Revision 22393 trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/correction/MedianDoubleFilter.java
MedianDoubleFilter.java | ||
---|---|---|
29 | 29 |
* @author Diego Guerrero Sevilla <diego.guerrero@uclm.es> |
30 | 30 |
*/ |
31 | 31 |
public class MedianDoubleFilter extends MedianFilter { |
32 |
|
|
32 |
private double[] window = null; |
|
33 |
|
|
33 | 34 |
public MedianDoubleFilter(){ |
34 | 35 |
super(); |
35 | 36 |
} |
... | ... | |
40 | 41 |
*/ |
41 | 42 |
public void pre() { |
42 | 43 |
super.pre(); |
44 |
window = new double[sizeWindow]; |
|
43 | 45 |
rasterResult = RasterBuffer.getBuffer(IBuffer.TYPE_DOUBLE, raster.getWidth(), raster.getHeight(), raster.getBandCount(), true); |
44 | 46 |
} |
45 | 47 |
|
... | ... | |
48 | 50 |
* @see org.gvsig.raster.grid.filter.correction.MedianFilter#process(int, int) |
49 | 51 |
*/ |
50 | 52 |
public void process(int col, int line) { |
51 |
// El lado de la ventana debe ser positivo e impar. |
|
52 |
ladoVentana = Math.abs(ladoVentana); |
|
53 |
if (ladoVentana % 2 == 0) |
|
54 |
ladoVentana++; |
|
55 |
int tamVentana = ladoVentana * ladoVentana; |
|
56 |
int semiLado = (ladoVentana - 1) >> 1; |
|
57 |
|
|
58 |
double[] ventana = new double[tamVentana]; |
|
59 |
|
|
60 | 53 |
// Obtener el vector con la ventanas de muestras |
61 | 54 |
for (int band = 0; band < raster.getBandCount(); band++) { |
62 | 55 |
int k = 0; |
63 |
for (int i = -semiLado; i <= semiLado; i++)
|
|
64 |
for (int j = -semiLado; j <= semiLado; j++) {
|
|
56 |
for (int i = -halfSide; i <= halfSide; i++)
|
|
57 |
for (int j = -halfSide; j <= halfSide; j++) {
|
|
65 | 58 |
if ((col + i >= 0) && (line + j >= 0) && (col + i < width) && (line + j < height)) { |
66 |
ventana[k] = raster.getElemDouble(line + j, col + i, band);
|
|
59 |
window[k] = raster.getElemDouble(line + j, col + i, band);
|
|
67 | 60 |
k++; |
68 | 61 |
} |
69 | 62 |
} |
70 | 63 |
// Ordenar los valores de las ventanas, se supone que usa quickSort. |
71 |
Arrays.sort(ventana, 0, k);
|
|
64 |
Arrays.sort(window, 0, k);
|
|
72 | 65 |
|
73 | 66 |
// Extraer los elementos centrales y asignarselos al pixel (x,y) |
74 |
rasterResult.setElem(line, col, band, ventana[k >> 1]);
|
|
67 |
rasterResult.setElem(line, col, band, window[k >> 1]);
|
|
75 | 68 |
} |
76 | 69 |
} |
77 | 70 |
|
Also available in: Unified diff