Statistics
| Revision:

root / trunk / extensions / extRemoteSensing / src-test / org / gvsig / remotesensing / processtest / TClassificationProcessTest.java @ 21773

History | View | Annotate | Download (8.4 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica 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

    
41
package org.gvsig.remotesensing.processtest;
42

    
43
import java.util.ArrayList;
44

    
45
import junit.framework.TestCase;
46

    
47
import org.gvsig.fmap.raster.grid.roi.VectorialROI;
48
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
49
import org.gvsig.raster.RasterLibrary;
50
import org.gvsig.raster.buffer.BufferFactory;
51
import org.gvsig.raster.buffer.RasterBufferInvalidException;
52
import org.gvsig.raster.dataset.IBuffer;
53
import org.gvsig.raster.grid.Grid;
54
import org.gvsig.remotesensing.classification.ClassificationMaximumLikelihoodProcess;
55
import org.gvsig.remotesensing.classification.ClassificationMinimumDistanceProcess;
56
import org.gvsig.remotesensing.classification.ClassificationParallelepipedProcess;
57

    
58
import com.iver.cit.gvsig.exceptions.layers.LoadLayerException;
59
import com.iver.cit.gvsig.fmap.core.GeneralPathX;
60
import com.iver.cit.gvsig.fmap.core.IGeometry;
61
import com.iver.cit.gvsig.fmap.core.ShapeFactory;
62

    
63

    
64
/**
65
* Este test prueba el proceso de clasificaci?n de una imagen de 4x4 con 
66
* tres bandas.El proceso de clasificaci?n se realiza por minima distancia, maxima probabilidad
67
* y paralelepipedos. Los resultados se comparan con el resultado te?rico v?lido
68
* 
69
* ** @author Alejandro Mu?oz Sanchez (alejandro.munoz@uclm.es)
70
* */
71
public class TClassificationProcessTest extends TestCase {
72

    
73
        private String baseDir = "./test-images/";
74
        private String path1 = baseDir + "classification_image_test.tif";
75
        private FLyrRasterSE lyr=null;
76
        private Grid dataGrid= null;
77
        GeneralPathX path, path2 = null;
78
        IGeometry geometry, geometry2 = null;
79
        
80
        static{
81
                RasterLibrary.wakeUp();        
82
        }
83
        
84
        public void start() {
85
                this.setUp();
86
                this.testStack();
87
        }
88
        
89
        public void setUp() {
90
                System.err.println("TClassificationProcessTest running...");
91
                try {
92
                        lyr = FLyrRasterSE.createLayer(
93
                                        path1,
94
                                        path1,
95
                                        null
96
                                        );
97
                        BufferFactory ds1 = new BufferFactory(lyr.getDataSource());
98
                        dataGrid= new Grid(ds1);
99
                } catch (LoadLayerException e) {
100
                        System.out.print("Error en la construcci?n de la capa");
101
                } catch (RasterBufferInvalidException e) {
102
                        System.out.print("Error en la carga del grid de datos");
103
                }
104
        }
105
        
106
        public void testStack() {
107
                
108
                // Definici?n de las clases (rois) para el proceso
109
                VectorialROI class1= new VectorialROI(dataGrid);
110
                VectorialROI class2= new VectorialROI(dataGrid);
111
                path = new GeneralPathX();
112
                path2= new GeneralPathX();
113
                
114
                // class1-- Roi con los pixeles 1 y 2 de las dos primeras filas
115
                path.moveTo(dataGrid.getGridExtent().getULX(),dataGrid.getGridExtent().getULY());
116
                path.lineTo(dataGrid.getGridExtent().getULX()+(2*dataGrid.getCellSize())-0.3,dataGrid.getGridExtent().getULY());
117
                path.lineTo(dataGrid.getGridExtent().getULX()+(2*dataGrid.getCellSize())-0.3,dataGrid.getGridExtent().getULY()-2*(dataGrid.getCellSize())+0.3);
118
                path.lineTo(dataGrid.getGridExtent().getULX(),dataGrid.getGridExtent().getULY()-2*(dataGrid.getCellSize())+0.3);
119
                path.closePath();
120
                geometry=ShapeFactory.createPolygon2D(path);
121
                class1.addGeometry(geometry);
122
                
123
                
124
                //class2-- Roi con los pixeles 1 y 2 de las dos ultimas filas
125
                path2.moveTo(dataGrid.getGridExtent().getLLX(),dataGrid.getGridExtent().getLLY());
126
                path2.lineTo(dataGrid.getGridExtent().getLLX()+(2*dataGrid.getCellSize())-0.3,dataGrid.getGridExtent().getLLY());
127
                path2.lineTo(dataGrid.getGridExtent().getLLX()+(2*dataGrid.getCellSize())-0.3,dataGrid.getGridExtent().getLLY()+2*(dataGrid.getCellSize())-0.3);
128
                path2.lineTo(dataGrid.getGridExtent().getLLX(),dataGrid.getGridExtent().getLLY()+2*(dataGrid.getCellSize())-0.3);
129
                
130
                geometry2=ShapeFactory.createPolygon2D(path2);
131
                class2.addGeometry(geometry2);
132
                
133
                ArrayList listRois=new ArrayList();
134
                listRois.add(class1);
135
                listRois.add(class2);
136
        
137
                // Clasificacion por el m?todo de m?nima distancia
138
                ClassificationMinimumDistanceProcess proceso = new ClassificationMinimumDistanceProcess();
139
                proceso.addParam("layer",lyr);
140
                proceso.addParam("bandList",new int[]{0,1,2});
141
                proceso.addParam("rois",listRois);
142
                proceso.run();
143
                
144
                IBuffer result= (IBuffer) proceso.getResult();
145
        
146
                assertEquals(result.getBandCount(),1);
147
                
148
                //Comparaci?n de valores
149
                assertEquals(result.getElemByte(0, 0,0),0);
150
                assertEquals(result.getElemByte(0, 1,0),0);
151
                assertEquals(result.getElemByte(0, 2,0),0);
152
                assertEquals(result.getElemByte(0, 3,0),0);        
153
                
154
                assertEquals(result.getElemByte(1, 0,0),1);
155
                assertEquals(result.getElemByte(1, 1,0),0);
156
                assertEquals(result.getElemByte(1, 2,0),0);
157
                assertEquals(result.getElemByte(1, 3,0),0);        
158
                
159
                assertEquals(result.getElemByte(2, 0,0),1);
160
                assertEquals(result.getElemByte(2, 1,0),1);
161
                assertEquals(result.getElemByte(2, 2,0),1);
162
                assertEquals(result.getElemByte(2, 3,0),0);        
163
                
164
                assertEquals(result.getElemByte(3, 0,0),0);
165
                assertEquals(result.getElemByte(3, 1,0),0);
166
                assertEquals(result.getElemByte(3, 2,0),1);
167
                assertEquals(result.getElemByte(3, 3,0),0);        
168
                
169
                
170
//                 Clasificacion por el m?todo de m?xima probabilidad distancia
171
                ClassificationMaximumLikelihoodProcess proceso2 = new ClassificationMaximumLikelihoodProcess();
172
                proceso2.addParam("layer",lyr);
173
                proceso2.addParam("bandList",new int[]{0,1,2});
174
                proceso2.addParam("rois",listRois);
175
                proceso2.run();
176
                
177

    
178
                IBuffer result2= (IBuffer) proceso2.getResult();
179
                
180
                assertEquals(result2.getBandCount(),1);
181
                
182
                //Comparaci?n de valores
183
                assertEquals(result2.getElemByte(0, 0,0),0);
184
                assertEquals(result2.getElemByte(0, 1,0),0);
185
                assertEquals(result2.getElemByte(0, 2,0),1);
186
                assertEquals(result2.getElemByte(0, 3,0),1);        
187
                
188
                assertEquals(result2.getElemByte(1, 0,0),0);
189
                assertEquals(result2.getElemByte(1, 1,0),0);
190
                assertEquals(result2.getElemByte(1, 2,0),1);
191
                assertEquals(result2.getElemByte(1, 3,0),1);        
192
                
193
                assertEquals(result2.getElemByte(2, 0,0),1);
194
                assertEquals(result2.getElemByte(2, 1,0),1);
195
                assertEquals(result2.getElemByte(2, 2,0),1);
196
                assertEquals(result2.getElemByte(2, 3,0),1);        
197
                
198
                assertEquals(result2.getElemByte(3, 0,0),1);
199
                assertEquals(result2.getElemByte(3, 1,0),1);
200
                assertEquals(result2.getElemByte(3, 2,0),1);
201
                assertEquals(result2.getElemByte(3, 3,0),1);
202
                
203
                
204
//                 Clasificacion por el m?todo de m?xima probabilidad distancia
205
                ClassificationParallelepipedProcess proceso3 = new ClassificationParallelepipedProcess();
206
                proceso3.addParam("layer",lyr);
207
                proceso3.addParam("bandList",new int[]{0,1,2});
208
                proceso3.addParam("rois",listRois);
209
                proceso3.addParam("dev", new Double(3));
210
                proceso3.run();
211
                
212

    
213
                IBuffer result3= (IBuffer) proceso3.getResult();
214
                
215
                assertEquals(result3.getBandCount(),1);
216
                
217
                //Comparaci?n de valores
218
                assertEquals(result3.getElemByte(0, 0,0),0);
219
                assertEquals(result3.getElemByte(0, 1,0),0);
220
                assertEquals(result3.getElemByte(0, 2,0),0);
221
                assertEquals(result3.getElemByte(0, 3,0),2);        
222
                
223
                assertEquals(result3.getElemByte(1, 0,0),0);
224
                assertEquals(result3.getElemByte(1, 1,0),0);
225
                assertEquals(result3.getElemByte(1, 2,0),0);
226
                assertEquals(result3.getElemByte(1, 3,0),2);        
227
                
228
                assertEquals(result3.getElemByte(2, 0,0),1);
229
                assertEquals(result3.getElemByte(2, 1,0),1);
230
                assertEquals(result3.getElemByte(2, 2,0),0);
231
                assertEquals(result3.getElemByte(2, 3,0),0);        
232
                
233
                assertEquals(result3.getElemByte(3, 0,0),0);
234
                assertEquals(result3.getElemByte(3, 1,0),0);
235
                assertEquals(result3.getElemByte(3, 2,0),0);
236
                assertEquals(result3.getElemByte(3, 3,0),0);        
237
                
238
        }
239
        
240
}