Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libRaster / src-test / org / gvsig / raster / dataset / io / rmf / TestRmfRead.java @ 30754

History | View | Annotate | Download (10.6 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 IVER T.I. 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
package org.gvsig.raster.dataset.io.rmf;
20

    
21
import java.awt.geom.AffineTransform;
22

    
23
import org.gvsig.raster.BaseTestCase;
24
import org.gvsig.raster.RasterLibrary;
25
import org.gvsig.raster.dataset.NotSupportedExtensionException;
26
import org.gvsig.raster.dataset.RasterDataset;
27
import org.gvsig.raster.dataset.RasterDriverException;
28
import org.gvsig.raster.dataset.properties.DatasetColorInterpretation;
29
import org.gvsig.raster.dataset.properties.DatasetStatistics;
30
import org.gvsig.raster.dataset.rmf.IRmfBlock;
31
import org.gvsig.raster.dataset.rmf.ParsingException;
32
import org.gvsig.raster.dataset.rmf.RmfBlocksManager;
33
import org.gvsig.raster.dataset.serializer.ColorInterpretationRmfSerializer;
34
import org.gvsig.raster.dataset.serializer.GeoInfoRmfSerializer;
35
import org.gvsig.raster.dataset.serializer.GeoPointListRmfSerializer;
36
import org.gvsig.raster.dataset.serializer.StatisticsRmfSerializer;
37
import org.gvsig.raster.datastruct.ColorTable;
38
import org.gvsig.raster.datastruct.GeoPoint;
39
import org.gvsig.raster.datastruct.GeoPointList;
40
import org.gvsig.raster.datastruct.Histogram;
41
import org.gvsig.raster.datastruct.HistogramClass;
42
import org.gvsig.raster.datastruct.NoData;
43
import org.gvsig.raster.datastruct.serializer.ColorTableRmfSerializer;
44
import org.gvsig.raster.datastruct.serializer.HistogramRmfSerializer;
45
import org.gvsig.raster.datastruct.serializer.NoDataRmfSerializer;
46
/**
47
 * Test de lectura para ficheros rmf. Obtiene distintos tipos de bloques y
48
 * comprueba que el objeto que han de generar es correcto.
49
 *
50
 * @author Nacho Brodin (nachobrodin@gmail.com)
51
 */
52
public class TestRmfRead extends BaseTestCase {
53
        private String           baseDir = "./test-images/";
54
        private RmfBlocksManager manager = null;
55
        public String            file    = "readtest.rmf";
56
        private RasterDataset    f1      = null;
57
        private String           path1   = baseDir + "03AUG23153350-M2AS-000000122423_01_P001-BROWSE.jpg";
58

    
59
        static {
60
                RasterLibrary.wakeUp();
61
        }
62

    
63
        public void start() throws Exception {
64
                this.setUp();
65
                this.testStack();
66
        }
67

    
68
        protected void doSetUp() throws Exception {
69
                super.doSetUp();
70
                System.err.println("TestRmfRead running...");
71
                try {
72
                        deleteRMF(path1);
73
                        f1 = RasterDataset.open(null, path1);
74
                } catch (NotSupportedExtensionException e1) {
75
                        e1.printStackTrace();
76
                } catch (RasterDriverException e1) {
77
                        e1.printStackTrace();
78
                }
79
        }
80

    
81
        public void testStack(){
82
                manager = new RmfBlocksManager(baseDir + file);
83
                if (!manager.checkRmf())
84
                        assertEquals(0, 1);
85
                HistogramRmfSerializer ser = new HistogramRmfSerializer();
86
                ColorTableRmfSerializer ser1 = new ColorTableRmfSerializer();
87
                StatisticsRmfSerializer ser2 = new StatisticsRmfSerializer();
88
                GeoInfoRmfSerializer ser3 = new GeoInfoRmfSerializer(f1);
89
                GeoPointListRmfSerializer ser4 = new GeoPointListRmfSerializer();
90
                NoDataRmfSerializer ser5 = new NoDataRmfSerializer();
91
                ColorInterpretationRmfSerializer ser6 = new ColorInterpretationRmfSerializer(f1.getColorInterpretation());
92

    
93
                manager.addClient(ser);
94
                manager.addClient(ser1);
95
                manager.addClient(ser2);
96
                manager.addClient(ser3);
97
                manager.addClient(ser4);
98
                manager.addClient(ser5);
99
                manager.addClient(ser6);
100

    
101
                try {
102
                        manager.read(null);
103
                        for (int i = 0; i < manager.getClientsCount(); i++) {
104
                                IRmfBlock client = manager.getClient(i);
105
                                if (client instanceof HistogramRmfSerializer)
106
                                        testHistogram((Histogram) client.getResult());
107
                                if (client instanceof ColorTableRmfSerializer) {
108
                                        ColorTable colorTable = (ColorTable) client.getResult();
109
                                        colorTable.setInterpolated(false);
110
                                        testColorTable(colorTable);
111
                                }
112
                                if (client instanceof StatisticsRmfSerializer)
113
                                        testStatistics((DatasetStatistics) client.getResult());
114
                                if (client instanceof NoDataRmfSerializer)
115
                                        testNoData((NoData) client.getResult());
116
//                                if (client instanceof GeoInfoRmfSerializer)
117
//                                        testGeoInfo((RasterDataset) client.getResult());
118
                                if (client instanceof GeoPointListRmfSerializer)
119
                                        testGeoPoints((GeoPointList) client.getResult());
120
                                if (client instanceof ColorInterpretationRmfSerializer) {
121
                                        DatasetColorInterpretation ci = (DatasetColorInterpretation) client.getResult();
122
                                        testColorInterpretation(ci);
123
                                }
124
                        }
125

    
126
                } catch (ParsingException e) {
127
                        e.printStackTrace();
128
                }
129

    
130
        }
131

    
132
        public void testColorInterpretation(DatasetColorInterpretation ci) {
133
                for (int j = 0; j < ci.length(); j++) {
134
                        String value = ci.get(j);
135
//                        System.out.println(value);
136
                        if (j == 0)
137
                                assertEquals(value, "Blue");
138
                        if (j == 1)
139
                                assertEquals(value, "Green");
140
                        if (j == 2)
141
                                assertEquals(value, "Red");
142
                }
143
        }
144

    
145
        public void testHistogram(Histogram h) {
146
                Histogram h2 = Histogram.convertHistogramToRGB(h);
147

    
148
                HistogramClass[][] classes = h2.getHistogram();
149
                for (int iBand = 0; iBand < classes.length; iBand++)
150
                        for (int iValue = 0; iValue < classes[iBand].length; iValue++) {
151
                                assertEquals((int) classes[iBand][iValue].getMin(), iValue);
152
                                assertEquals((int) classes[iBand][iValue].getMax(), iValue + 1);
153
                        }
154

    
155
                assertEquals((int) h.getHistogramValue(0, 0), 16);
156
                assertEquals((int) h.getHistogramValue(0, 1), 4);
157
                assertEquals((int) h.getHistogramValue(0, 23), 6);
158
                assertEquals((int) h.getHistogramValue(0, 48), 4);
159

    
160
                assertEquals((int) h.getHistogramValue(1, 0), 2);
161
                assertEquals((int) h.getHistogramValue(1, 4), 1);
162
                assertEquals((int) h.getHistogramValue(1, 7), 8);
163
                assertEquals((int) h.getHistogramValue(1, 20), 4);
164

    
165
                assertEquals((int) h.getHistogramValue(2, 0), 25);
166
                assertEquals((int) h.getHistogramValue(2, 2), 1);
167
                assertEquals((int) h.getHistogramValue(2, 13), 4);
168
                assertEquals((int) h.getHistogramValue(2, 21), 2);
169
        }
170

    
171
        public void testColorTable(ColorTable ct) {
172

    
173
//                byte[][] color = ct.getColorTableByBand();
174

    
175
//                assertEquals(ct.getName(), "Prueba Tabla de Color");
176

    
177
                assertEquals(ct.getRGBAByBand(15)[0] & 0xff, 95);
178
                assertEquals(ct.getRGBAByBand(15)[1] & 0xff, 95);
179
                assertEquals(ct.getRGBAByBand(15)[2] & 0xff, 95);
180

    
181
                assertEquals(ct.getRGBAByBand(22)[0] & 0xff, 0);
182
                assertEquals(ct.getRGBAByBand(22)[1] & 0xff, 0);
183
                assertEquals(ct.getRGBAByBand(22)[2] & 0xff, 0);
184

    
185
                assertEquals(ct.getRGBAByBand(24)[0] & 0xff, 0);
186
                assertEquals(ct.getRGBAByBand(24)[1] & 0xff, 0);
187
                assertEquals(ct.getRGBAByBand(24)[2] & 0xff, 0);
188

    
189
                assertEquals(ct.getRGBAByBand(28)[0] & 0xff, 0);
190
                assertEquals(ct.getRGBAByBand(28)[1] & 0xff, 0);
191
                assertEquals(ct.getRGBAByBand(28)[2] & 0xff, 0);
192

    
193
                assertEquals(ct.getRGBAByBand(0)[0] & 0xff, 255);
194
                assertEquals(ct.getRGBAByBand(0)[1] & 0xff, 255);
195
                assertEquals(ct.getRGBAByBand(0)[2] & 0xff, 255);
196

    
197
                assertEquals(ct.getRGBAByBand(1)[0] & 0xff, 0);
198
                assertEquals(ct.getRGBAByBand(1)[1] & 0xff, 0);
199
                assertEquals(ct.getRGBAByBand(1)[2] & 0xff, 0);
200

    
201
                assertEquals(ct.getRGBAByBand(2)[0] & 0xff, 0);
202
                assertEquals(ct.getRGBAByBand(2)[1] & 0xff, 102);
203
                assertEquals(ct.getRGBAByBand(2)[2] & 0xff, 255);
204

    
205
//                System.out.println(ct.getName());
206
//                for (int i = 0; i < color.length; i++) {
207
//                        System.out.println((color[i][0] & 0xff) + " " + (color[i][1] & 0xff) + " " + (color[i][2] & 0xff));
208
//                }
209
        }
210

    
211
        public void testNoData(NoData noData) {
212
                assertEquals((int) noData.getValue(), 5450);
213
                assertEquals(noData.getType(), 2);
214
        }
215

    
216
        public void testStatistics(DatasetStatistics ds) {
217
                int bandCount = ds.getBandCount();
218
                double[] max = ds.getMaxRGB();
219
                double[] min = ds.getMinRGB();
220
                double[] secondMax = ds.getSecondMaxRGB();
221
                double[] secondMin = ds.getSecondMinRGB();
222
                double[] mean = ds.getMean();
223
                double[] variance = ds.getVariance();
224

    
225
                assertEquals(bandCount, 3);
226
                for (int i = 0; i < bandCount; i++)
227
                        switch (i) {
228
                                case 0:
229
                                        assertEquals((int) max[i], 250);
230
                                        assertEquals((int) min[i], 0);
231
                                        assertEquals((int) secondMax[i], 248);
232
                                        assertEquals((int) secondMin[i], 1);
233
                                        assertEquals((int) mean[i], 36);
234
                                        assertEquals((int) variance[i], 4984);
235
                                        break;
236
                                case 1:
237
                                        assertEquals((int) max[i], 255);
238
                                        assertEquals((int) min[i], 0);
239
                                        assertEquals((int) secondMax[i], 254);
240
                                        assertEquals((int) secondMin[i], 3);
241
                                        assertEquals((int) mean[i], 37);
242
                                        assertEquals((int) variance[i], 6292);
243
                                        break;
244
                                case 2:
245
                                        assertEquals((int) max[i], 254);
246
                                        assertEquals((int) min[i], 0);
247
                                        assertEquals((int) secondMax[i], 250);
248
                                        assertEquals((int) secondMin[i], 1);
249
                                        assertEquals((int) mean[i], 35);
250
                                        assertEquals((int) variance[i], 4154);
251
                                        break;
252
                        }
253

    
254
//                System.out.println(ct.getName());
255
//                System.out.println(ct.getType());
256
//                for (int i = 0; i < color.length; i++) {
257
//                        System.out.print(range[i] + ": ");
258
//                        System.out.println(color[i][0] + " " + color[i][1] + " " + color[i][2]);
259
//                }
260
        }
261

    
262
        public void testGeoInfo(RasterDataset dataset) {
263
        //TODO: TEST: Terminar test de acceso a la georreferenciaci?n.
264
//                String proj = "";
265
//                if(dataset.getProjection() != null)
266
//                        proj = dataset.getProjection().getAbrev();
267
                AffineTransform at = dataset.getAffineTransform();
268

    
269
                assertEquals((int) at.getTranslateX(), 5000);
270
                assertEquals((int) at.getTranslateY(), 5000);
271
                assertEquals((int) at.getScaleX(), 2);
272
                assertEquals((int) at.getScaleY(), -2);
273
        }
274

    
275
        public void testGeoPoints(GeoPointList gpList) {
276
                GeoPoint p = gpList.get(0);
277

    
278
                assertEquals((int) p.pixelPoint.getX(), 10);
279
                assertEquals((int) p.pixelPoint.getY(), 10);
280
                assertEquals((int) p.mapPoint.getX(), 34223);
281
                assertEquals((int) p.mapPoint.getY(), 2344);
282

    
283
                assertEquals(p.active, true);
284

    
285
//                assertEquals((int) p.leftCenterPoint.getX(), 24223);
286
//                assertEquals((int) p.leftCenterPoint.getY(), 3244);
287
//                assertEquals((int) p.rightCenterPoint.getX(), 2433);
288
//                assertEquals((int) p.rightCenterPoint.getY(), 6244);
289
//
290
//                assertEquals((int) p.leftViewPort.getExtent().minX(), 30032);
291
//                assertEquals((int) p.leftViewPort.getExtent().maxY(), 2103);
292
//
293
//                assertEquals((int) p.rightViewPort.getExtent().minX(), 30032);
294
//                assertEquals((int) p.rightViewPort.getExtent().maxY(), 2103);
295

    
296
                assertEquals((int) p.zoomLeft, 1);
297
                assertEquals((int) p.zoomRight, 1);
298
        }
299
}