svn-gvsig-desktop / trunk / extensions / extRasterTools / src / org / gvsig / rasterTools / pansharpening / filter / PanSharpeningStackManager.java @ 4582
History | View | Annotate | Download (7.89 KB)
1 |
package org.gvsig.rasterTools.pansharpening.filter; |
---|---|
2 |
|
3 |
import java.util.ArrayList; |
4 |
|
5 |
import org.cresques.io.GeoRasterFile; |
6 |
import org.cresques.io.raster.IStackManager; |
7 |
import org.cresques.io.raster.RasterBuf; |
8 |
import org.cresques.io.raster.RasterFilter; |
9 |
import org.cresques.io.raster.RasterFilterStack; |
10 |
import org.cresques.io.raster.RasterFilterStackManager; |
11 |
|
12 |
/**
|
13 |
* Gestor de pila para el filtro de panshapening.
|
14 |
* @author Nacho Brodin (brodin_ign@gva.es)
|
15 |
*/
|
16 |
public class PanSharpeningStackManager implements IStackManager{ |
17 |
|
18 |
//public static String defaultClass = "org.gvsig.rasterTools.pansharpening.filter.PanSharpeningStackManager";
|
19 |
public final static int sharpening = 5; |
20 |
protected RasterFilterStack filterStack = null; |
21 |
private GeoRasterFile[] grfList = null; |
22 |
private RasterFilterStackManager filterStackManager = null; |
23 |
|
24 |
public PanSharpeningStackManager(RasterFilterStackManager filterStackManager){
|
25 |
this.filterStackManager = filterStackManager;
|
26 |
this.filterStack = filterStackManager.getFilterStack();
|
27 |
filterStackManager.addTypeFilter("sharpening", PanSharpeningStackManager.sharpening, 0); |
28 |
filterStackManager.register(this);
|
29 |
} |
30 |
|
31 |
/**
|
32 |
* A?ade un filtro ComputeMinMax
|
33 |
* @param files Ficheros que componen la imagen
|
34 |
* @param i Posici?n de la imagen de refinado dentro de la lista de GeoRasterFile
|
35 |
* @param order Orden de visualizado de las bandas RGB
|
36 |
* @param alpha Alpha aplicado a toda la imagen
|
37 |
* @param method M?todo de calculo del refinado
|
38 |
* @param coef Coeficiente
|
39 |
*/
|
40 |
public void addSharpeningFilter(GeoRasterFile[] files, int i, int[] order, int alpha, String method, double coef, int coefBrovey) { |
41 |
//Si ya hay un filtro de sharpening nos lo cargamos
|
42 |
if (filterStack.isActive(((Integer)filterStackManager.getTypeFilters().get("sharpening")).intValue())) { |
43 |
filterStack.removeFilter(((Integer) filterStackManager.getTypeFilters().get("sharpening")).intValue()); |
44 |
} |
45 |
|
46 |
RasterFilter filtro = null;
|
47 |
|
48 |
switch (filterStack.getDataTypeInFilter(((Integer) filterStackManager.getTypeFilters().get("sharpening")).intValue())) { |
49 |
case RasterBuf.TYPE_IMAGE:
|
50 |
filtro = new PanSharpeningImageFilter();
|
51 |
break;
|
52 |
case RasterBuf.TYPE_SHORT:
|
53 |
case RasterBuf.TYPE_USHORT:
|
54 |
case RasterBuf.TYPE_INT:
|
55 |
//filtro = new SharpeningShortFilter();
|
56 |
break;
|
57 |
} |
58 |
|
59 |
if(filtro != null){ |
60 |
filtro.addParam("stats", filterStack.getStats());
|
61 |
filtro.addParam("pancromatica", new Integer(i)); |
62 |
filtro.addParam("files", files);
|
63 |
filtro.addParam("order", order);
|
64 |
filtro.addParam("alpha", new Integer(alpha)); |
65 |
filtro.addParam("method", method);
|
66 |
filtro.addParam("coef", new Double(coef)); |
67 |
filtro.addParam("coefBrovey", new Integer(coefBrovey)); |
68 |
filterStack.addFilter(((Integer) filterStackManager.getTypeFilters().get("sharpening")).intValue(),filtro); |
69 |
|
70 |
filterStackManager.controlTypes(); |
71 |
} |
72 |
} |
73 |
|
74 |
/**
|
75 |
* Obtiene el valor entero que corresponde al tipo de filtro del filtro pasado por par?metro.
|
76 |
* @param rasterFilter
|
77 |
* @return Entero que representa el tipo de filtro
|
78 |
*/
|
79 |
public int getType(RasterFilter rasterFilter){ |
80 |
if(rasterFilter instanceof PanSharpeningFilter) |
81 |
return PanSharpeningStackManager.sharpening;
|
82 |
|
83 |
return filterStackManager.getType(rasterFilter);
|
84 |
} |
85 |
|
86 |
public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf){ |
87 |
if (rf instanceof PanSharpeningFilter) { |
88 |
PanSharpeningFilter sharp = ((PanSharpeningFilter) rf); |
89 |
// filterList.add("filter.className="+PanSharpeningStackManager.defaultClass);
|
90 |
filterList.add("filter.pansharpening.active=true");
|
91 |
filterList.add("filter.pansharpening.posPancromatica="+sharp.posPancromatica);
|
92 |
filterList.add("filter.pansharpening.bandOrder="+sharp.bandOrder[0]+","+sharp.bandOrder[1]+","+sharp.bandOrder[2]); |
93 |
for(int file=0;file<sharp.files.length;file++) |
94 |
filterList.add("filter.pansharpening.file"+file+"="+sharp.files[file].getName()); |
95 |
filterList.add("filter.pansharpening.method="+sharp.method);
|
96 |
filterList.add("filter.pansharpening.coefHSL="+sharp.coef);
|
97 |
filterList.add("filter.pansharpening.coefBrovey="+sharp.coefBrovey);
|
98 |
filterList.add("filter.pansharpening.alpha="+sharp.alpha);
|
99 |
} |
100 |
return filterList;
|
101 |
} |
102 |
|
103 |
/**
|
104 |
* Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
|
105 |
* tener la forma elemento=valor.
|
106 |
* @param filters
|
107 |
*/
|
108 |
public void createStackFromStrings(ArrayList f, GeoRasterFile[] grfList) { |
109 |
this.grfList = grfList;
|
110 |
this.createStackFromStrings(f, new Integer(0)); |
111 |
} |
112 |
|
113 |
public int createStackFromStrings(String fil, ArrayList filters, int filteri){ |
114 |
if (fil.startsWith("filter.pansharpening.active") && |
115 |
RasterFilterStackManager.getValue(fil).equals("true")) {
|
116 |
filters.remove(filteri); |
117 |
|
118 |
int posPancromatica = 0; |
119 |
int[] bandOrder = {0, 1, 2}; |
120 |
ArrayList files = new ArrayList(); |
121 |
int alpha = 0; |
122 |
String method = ""; |
123 |
double coef = 0D; |
124 |
int coefBrovey = 0; |
125 |
|
126 |
for (int propFilter = 0;propFilter < filters.size();propFilter++) { |
127 |
String elem = (String) filters.get(propFilter); |
128 |
|
129 |
if (elem.startsWith("filter.pansharpening.posPancromatica")) { |
130 |
posPancromatica = Integer.parseInt(RasterFilterStackManager.getValue(elem));
|
131 |
filters.remove(propFilter); |
132 |
propFilter--; |
133 |
} |
134 |
if (elem.startsWith("filter.pansharpening.bandOrder")) { |
135 |
String rango = RasterFilterStackManager.getValue(elem);
|
136 |
bandOrder[0] = Integer.parseInt(rango.substring(0, rango.indexOf(","))); |
137 |
bandOrder[1] = Integer.parseInt(rango.substring(rango.indexOf(",") + 1, rango.lastIndexOf(","))); |
138 |
bandOrder[2] = Integer.parseInt(rango.substring(rango.lastIndexOf(",") + 1, rango.length())); |
139 |
filters.remove(propFilter); |
140 |
propFilter--; |
141 |
} |
142 |
if (elem.startsWith("filter.pansharpening.file")) { |
143 |
files.add(RasterFilterStackManager.getValue(elem)); |
144 |
filters.remove(propFilter); |
145 |
propFilter--; |
146 |
} |
147 |
if (elem.startsWith("filter.pansharpening.alpha")) { |
148 |
alpha = Integer.parseInt(RasterFilterStackManager.getValue(elem));
|
149 |
filters.remove(propFilter); |
150 |
propFilter--; |
151 |
} |
152 |
if (elem.startsWith("filter.pansharpening.method")) { |
153 |
method = RasterFilterStackManager.getValue(elem); |
154 |
filters.remove(propFilter); |
155 |
propFilter--; |
156 |
} |
157 |
if (elem.startsWith("filter.pansharpening.coefHSL")) { |
158 |
coef = Double.parseDouble(RasterFilterStackManager.getValue(elem));
|
159 |
filters.remove(propFilter); |
160 |
propFilter--; |
161 |
} |
162 |
if (elem.startsWith("filter.pansharpening.coefBrovey")) { |
163 |
coefBrovey = Integer.parseInt(RasterFilterStackManager.getValue(elem));
|
164 |
//filters.remove(propFilter);
|
165 |
//propFilter--;
|
166 |
} |
167 |
} |
168 |
|
169 |
addSharpeningFilter(this.grfList, posPancromatica, bandOrder, alpha, method, coef, coefBrovey);
|
170 |
filteri = -1;
|
171 |
} |
172 |
return filteri;
|
173 |
} |
174 |
|
175 |
public void createStackFromStrings(ArrayList f, Integer pos) { |
176 |
// TODO Auto-generated method stub
|
177 |
|
178 |
} |
179 |
|
180 |
public ArrayList getStringsFromStack() { |
181 |
// TODO Auto-generated method stub
|
182 |
return null; |
183 |
} |
184 |
|
185 |
} |