root / trunk / libraries / libRaster / src / org / gvsig / raster / grid / filter / convolution / ConvolutionFloatFilter.java @ 12176
History | View | Annotate | Download (3.48 KB)
1 | 12095 | dguerrero | /* gvSIG. Sistema de Informaci?n Geogrfica de la Generalitat Valenciana
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2006 Instituto de Desarrollo Regional and Generalitat Valenciana.
|
||
4 | *
|
||
5 | * This program is free software; you can redistribute it and/or
|
||
6 | * modify it under the terms of the GNU General Public License
|
||
7 | * as published by the Free Software Foundation; either version 2
|
||
8 | * of the License, or (at your option) any later version.
|
||
9 | *
|
||
10 | * This program is distributed in the hope that it will be useful,
|
||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
13 | * GNU General Public License for more details.
|
||
14 | *
|
||
15 | * You should have received a copy of the GNU General Public License
|
||
16 | * along with this program; if not, write to the Free Software
|
||
17 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
18 | *
|
||
19 | * For more information, contact:
|
||
20 | *
|
||
21 | * Generalitat Valenciana
|
||
22 | * Conselleria d'Infraestructures i Transport
|
||
23 | * Av. Blasco Iba?ez, 50
|
||
24 | * 46010 VALENCIA
|
||
25 | * SPAIN
|
||
26 | *
|
||
27 | * +34 963862235
|
||
28 | * gvsig@gva.es
|
||
29 | * www.gvsig.gva.es
|
||
30 | *
|
||
31 | * or
|
||
32 | *
|
||
33 | * Instituto de Desarrollo Regional (Universidad de Castilla La-Mancha)
|
||
34 | * Campus Universitario s/n
|
||
35 | * 02071 Alabacete
|
||
36 | * Spain
|
||
37 | *
|
||
38 | * +34 967 599 200
|
||
39 | */
|
||
40 | package org.gvsig.raster.grid.filter.convolution; |
||
41 | |||
42 | import org.gvsig.raster.buffer.RasterBuffer; |
||
43 | import org.gvsig.raster.dataset.IBuffer; |
||
44 | |||
45 | 12137 | dguerrero | /**
|
46 | * Filtro de convolucion para Buffer de tipo Float
|
||
47 | * @author Alejandro Mu?oz <alejandro.munoz@uclm.es>
|
||
48 | * @author Diego Guerrero Sevilla <diego.guerrero@uclm.es>
|
||
49 | * */
|
||
50 | 12095 | dguerrero | public class ConvolutionFloatFilter extends ConvolutionFilter { |
51 | |||
52 | protected IBuffer rasterResult = null; |
||
53 | |||
54 | 12137 | dguerrero | public ConvolutionFloatFilter(){
|
55 | super();
|
||
56 | } |
||
57 | 12095 | dguerrero | |
58 | 12137 | dguerrero | /**
|
59 | * @param Kernel a aplicar. En caso de que no se trate de un kernel definido en ConvolutionFilter, se puede pasar como
|
||
60 | * parametro el kernel se pretende aplicar.
|
||
61 | * **/
|
||
62 | public ConvolutionFloatFilter(Kernel k){ |
||
63 | 12095 | dguerrero | super();
|
64 | 12137 | dguerrero | super.kernel=k;
|
65 | 12095 | dguerrero | } |
66 | |||
67 | public void pre(){ |
||
68 | super.pre();
|
||
69 | rasterResult = RasterBuffer.getBuffer(IBuffer.TYPE_FLOAT, raster.getWidth(), raster.getHeight(), raster.getBandCount(), true);
|
||
70 | } |
||
71 | |||
72 | 12137 | dguerrero | /** Aplicacion del filtro para el pixel de la posicion line, col */
|
73 | 12095 | dguerrero | public void process(int col, int line) { |
74 | 12137 | dguerrero | |
75 | 12176 | dguerrero | int lado= kernel.getLado();
|
76 | int semiLado = (lado - 1) >> 1; |
||
77 | double ventana[][]= new double[lado][lado]; |
||
78 | 12095 | dguerrero | float resultConvolution=0; |
79 | 12176 | dguerrero | for (int band = 0; band < raster.getBandCount(); band++) { |
80 | if ((col - semiLado >= 0) && (line - semiLado >= 0) && (col + semiLado < width) && (line + semiLado < height)){ |
||
81 | for (int j = -semiLado; j <= semiLado; j++) |
||
82 | for (int i = -semiLado; i <= semiLado; i++) |
||
83 | ventana[i + semiLado][j + semiLado] = raster.getElemFloat(line + j, col + i, band);; |
||
84 | 12095 | dguerrero | Kernel Kventana= new Kernel(ventana); |
85 | resultConvolution=(float)kernel.convolution(Kventana);
|
||
86 | 12176 | dguerrero | rasterResult.setElem(line, col, band,(float)resultConvolution);
|
87 | 12095 | dguerrero | } |
88 | 12176 | dguerrero | else rasterResult.setElem(line, col,band,(float)raster.getElemFloat(line,col,band)); |
89 | } |
||
90 | 12095 | dguerrero | |
91 | } |
||
92 | |||
93 | 12137 | dguerrero | /**
|
94 | * @return tipo de dato del buffer de entrada
|
||
95 | * */
|
||
96 | public int getInRasterDataType() { |
||
97 | return RasterBuffer.TYPE_FLOAT;
|
||
98 | } |
||
99 | 12095 | dguerrero | |
100 | 12137 | dguerrero | /**
|
101 | * @return tipo de dato del buffer de salida
|
||
102 | * */
|
||
103 | public int getOutRasterDataType() { |
||
104 | return RasterBuffer.TYPE_FLOAT;
|
||
105 | } |
||
106 | 12095 | dguerrero | |
107 | 12137 | dguerrero | /**
|
108 | * @return buffer resultante tras aplicar el filtro
|
||
109 | * */
|
||
110 | public Object getResult(String name) { |
||
111 | if (name.equals("raster")) |
||
112 | return (Object) this.rasterResult; |
||
113 | return null; |
||
114 | } |
||
115 | 12095 | dguerrero | |
116 | } |