Revision 18673

View differences:

trunk/extensions/extGeoreferencing/src/org/gvsig/georeferencing/process/geotransform/GeoTransformProcess.java
39 39
	 */
40 40

  
41 41
package org.gvsig.georeferencing.process.geotransform;
42

  
42 43
import org.gvsig.raster.RasterProcess;
43 44
import org.gvsig.raster.datastruct.GeoPoint;
44 45
import org.gvsig.raster.util.RasterToolsUtil;
......
67 68
	// numero minimo de puntos 
68 69
	protected int minGPC=0;
69 70
	
70
	//coeficientes del polinomio de transformacion para las coordenadas en X
71
	private double []coefX=null;
72
	
73
    //coeficientes del polinomio de transformacion para las coordenadas en Y
74
	private double []coefY=null;
75
	
76 71
	// Lista con los valores de las potencias de x e y  
77 72
	private int exp[][] = null;
78 73
	
......
87 82
	
88 83
	GeoTransformDataResult resultData= null;
89 84
	
85
	//coeficientes polinomios conversion coordenadas reales a coordenadas pixel
86
	private double mapToPixelCoefX[]= null;
87
	private double mapToPixelCoefY[]=null;
88
	
89
	
90
	//coeficientes polinomio conversion coordenadas pixel a coordenadas reales
91
	private double pixelToMapCoefX[]= null;
92
	private double pixelToMapCoefY[]=null;
93
	
90 94
	/** 
91 95
	* Metodo que recoge los parametros del proceso de transformaci?n 
92 96
	* <LI>gpcs: lista de puntos de control</LI>> 
......
143 147
			calculateRMSerror();
144 148
			// Se almacenan los resultados en dataResult
145 149
			resultData.setGpcs(gpcs);
146
			resultData.setPolxCoef(coefX);
147
			resultData.setPolyCoef(coefY);
150
			resultData.setPixelToMapCoefX(pixelToMapCoefX);
151
			resultData.setPixelToMapCoefY(pixelToMapCoefY);
152
			resultData.setMapToPixelCoefX(mapToPixelCoefX);
153
			resultData.setMapToPixelCoefY(mapToPixelCoefY);
148 154
			resultData.setRmsXTotal(rmsXTotal);
149 155
			resultData.setRmsYTotal(rmsYTotal);
150 156
			resultData.setRmsXTotal(rmsXTotal);
......
166 172
     * 
167 173
     * */
168 174
	public void calculatePolinomialCoefX(){
175
		
169 176
		double matrixDx[][]= new double [minGPC][minGPC]; 
177
		double matrixDx2[][]= new double [minGPC][minGPC];
170 178
		double result[]= new double[minGPC];
179
		double result2[]= new double[minGPC];		
171 180
		int k=-1;
172 181
		// Obtencion de la primera fila de la matriz
173 182
		for (int filas=0; filas<minGPC;filas++)
......
175 184
		for (int i=0; i<=orden; i++)
176 185
			for(int j=0; j<=i; j++){
177 186
				k++;
178
				for(int v=0; v<gpcs.length;v++)
187
				for(int v=0; v<gpcs.length;v++){
179 188
					matrixDx[filas][k]+=(Math.pow(gpcs[v].pixelPoint.getX(),i-j)* Math.pow(gpcs[v].pixelPoint.getX(),exp[filas][0]))
180
							* (Math.pow(gpcs[v].pixelPoint.getY(),j)* Math.pow(gpcs[v].pixelPoint.getY(),exp[filas][1]));	
189
							* (Math.pow(gpcs[v].pixelPoint.getY(),j)* Math.pow(gpcs[v].pixelPoint.getY(),exp[filas][1]));
190
				
191
					matrixDx2[filas][k]+=(Math.pow(gpcs[v].mapPoint.getX(),i-j)* Math.pow(gpcs[v].mapPoint.getX(),exp[filas][0]))
192
					* (Math.pow(gpcs[v].mapPoint.getY(),j)* Math.pow(gpcs[v].mapPoint.getY(),exp[filas][1]));	
193
				}
181 194
				// Para la fila 0 se guardan los exponentes
182 195
				if(filas==0){
183 196
					exp[k][0]=i-j;
184 197
					exp[k][1]=j;
185 198

  
186 199
					// Se calcula el resultado de !!!!!
187
					for(int v=0; v<gpcs.length;v++)
200
					for(int v=0; v<gpcs.length;v++){
188 201
						result[k]+=(Math.pow(gpcs[v].pixelPoint.getX(),i-j)* Math.pow(gpcs[v].pixelPoint.getX(),exp[filas][0]))
189
						* (Math.pow(gpcs[v].pixelPoint.getY(),j)* Math.pow(gpcs[v].pixelPoint.getY(),exp[filas][1]))*gpcs[v].mapPoint.getX();	
202
						* (Math.pow(gpcs[v].pixelPoint.getY(),j)* Math.pow(gpcs[v].pixelPoint.getY(),exp[filas][1]))*gpcs[v].mapPoint.getX();
203
					
204
						result2[k]+=(Math.pow(gpcs[v].mapPoint.getX(),i-j)* Math.pow(gpcs[v].mapPoint.getX(),exp[filas][0]))
205
						* (Math.pow(gpcs[v].mapPoint.getY(),j)* Math.pow(gpcs[v].mapPoint.getY(),exp[filas][1]))*gpcs[v].pixelPoint.getX();	
206
					}	
190 207
				}
191 208
			}
192 209
		}
193 210
		Matrix matrixResult= new Matrix(matrixDx);
194
		coefX=solveSistem(matrixResult,result);	
211
		Matrix matrixResult2= new Matrix(matrixDx2);
212
		pixelToMapCoefX=solveSistem(matrixResult,result);	
213
		mapToPixelCoefX=solveSistem(matrixResult2,result2);
195 214
	}
196 215
	
197 216
	
......
204 223
     * */
205 224
	public void calculatePolinomialCoefY(){
206 225
		double matrixDy[][]= new double [minGPC][minGPC]; 
226
		double matrixDy2[][]= new double [minGPC][minGPC]; 
207 227
		double result[]= new double[minGPC];
228
		double result2[]= new double[minGPC];
208 229
		int k=-1;
209 230
		// Obtencion de la primera fila de la matriz
210 231
		for (int filas=0; filas<minGPC;filas++)
......
212 233
		for (int i=0; i<=orden; i++)
213 234
			for(int j=0; j<=i; j++){
214 235
				k++;
215
				for(int v=0; v<gpcs.length;v++)
236
				for(int v=0; v<gpcs.length;v++){
216 237
					matrixDy[filas][k]+=(Math.pow(gpcs[v].pixelPoint.getX(),i-j)* Math.pow(gpcs[v].pixelPoint.getX(),exp[filas][0]))
217 238
							* (Math.pow(gpcs[v].pixelPoint.getY(),j)* Math.pow(gpcs[v].pixelPoint.getY(),exp[filas][1]));	
239
					matrixDy2[filas][k]+=(Math.pow(gpcs[v].mapPoint.getX(),i-j)* Math.pow(gpcs[v].mapPoint.getX(),exp[filas][0]))
240
					* (Math.pow(gpcs[v].mapPoint.getY(),j)* Math.pow(gpcs[v].mapPoint.getY(),exp[filas][1]));	
241
		
242
				
243
				}
218 244
				// Para la fila 0 se guardan los exponentes
219 245
				if(filas==0){
220 246
					exp[k][0]=i-j;
221 247
					exp[k][1]=j;
222 248

  
223 249
					// Se calcula el resultado de !!!!!
224
					for(int v=0; v<gpcs.length;v++)
250
					for(int v=0; v<gpcs.length;v++){
225 251
						result[k]+=(Math.pow(gpcs[v].pixelPoint.getX(),i-j)* Math.pow(gpcs[v].pixelPoint.getX(),exp[filas][0]))
226
						* (Math.pow(gpcs[v].pixelPoint.getY(),j)* Math.pow(gpcs[v].pixelPoint.getY(),exp[filas][1]))*gpcs[v].mapPoint.getY();	
252
								* (Math.pow(gpcs[v].pixelPoint.getY(),j)* Math.pow(gpcs[v].pixelPoint.getY(),exp[filas][1]))*gpcs[v].mapPoint.getY();	
253
				
254
						result2[k]+=(Math.pow(gpcs[v].mapPoint.getX(),i-j)* Math.pow(gpcs[v].mapPoint.getX(),exp[filas][0]))
255
								* (Math.pow(gpcs[v].mapPoint.getY(),j)* Math.pow(gpcs[v].mapPoint.getY(),exp[filas][1]))*gpcs[v].pixelPoint.getY();
256
					}	
227 257
				}
228 258
			}
229 259
		}
230 260
		Matrix matrixResult= new Matrix(matrixDy);
231
		coefY=solveSistem(matrixResult,result);	
261
		Matrix matrixResult2= new Matrix(matrixDy2);
262
		pixelToMapCoefY=solveSistem(matrixResult,result);	
263
		mapToPixelCoefY=  solveSistem(matrixResult2,result2);
232 264
	}
233
		
265
	
266
	
267
	
234 268
	/**
235 269
	 * @return array con la solucion al sistema de ecuadiones.
236 270
	 * */
......
259 293
		
260 294
			for(int i = 0; i < minGPC; i++) {
261 295
		
262
				gpcs[im_point].setEvaluateX(gpcs[im_point].getEvaluateX() + coefX[i] * Math.pow(gpcs[im_point].pixelPoint.getX(), exp[i][0]) * Math.pow(gpcs[im_point].pixelPoint.getY(), exp[i][1]));
263
				gpcs[im_point].setEvaluateY(gpcs[im_point].getEvaluateY() + coefY[i] * Math.pow(gpcs[im_point].pixelPoint.getX(), exp[i][0]) * Math.pow(gpcs[im_point].pixelPoint.getY(), exp[i][1]));
296
				gpcs[im_point].setEvaluateX(gpcs[im_point].getEvaluateX() + pixelToMapCoefX[i] * Math.pow(gpcs[im_point].pixelPoint.getX(), exp[i][0]) * Math.pow(gpcs[im_point].pixelPoint.getY(), exp[i][1]));
297
				gpcs[im_point].setEvaluateY(gpcs[im_point].getEvaluateY() + pixelToMapCoefY[i] * Math.pow(gpcs[im_point].pixelPoint.getX(), exp[i][0]) * Math.pow(gpcs[im_point].pixelPoint.getY(), exp[i][1]));
264 298
			}	
265 299
			
266 300
			gpcs[im_point].setErrorX(Math.pow(gpcs[im_point].getEvaluateX() - gpcs[im_point].mapPoint.getX(), 2));
......
278 312
		this.rmsXTotal = rmsxTotal / numgpcs;
279 313
		this.rmsYTotal = rmsyTotal / numgpcs;
280 314
		
281
		/*System.out.print("Base X\t\t");
282
		System.out.print("Base Y\t\t");
283
		System.out.print("WarpX\t\t");
284
		System.out.print("WarpY\t\t");
315
		/*System.out.print("Map X\t\t");
316
		System.out.print("Map Y\t\t");
317
		System.out.print("Pix X\t\t");
318
		System.out.print("Pix Y\t\t");
285 319
		System.out.print("PredicX\t\t\t\t");
286 320
		System.out.print("PredicY\t\t\t\t");
287 321
		System.out.print("ErrorX\t\t\t\t");
......
300 334
				System.out.print((new Double(gpcs[i].getErrorX()).toString()+"\t\t"));
301 335
				System.out.print((new Double(gpcs[i].getErrorY()).toString()+"\t\t"));
302 336
				System.out.print((new Double(gpcs[i].getRms()).toString()+"\t\t"));
303

  
304
			}*/
305
		
337
			}	*/
306 338
	}
307 339
		
308 340
	/**

Also available in: Unified diff