Statistics
| Revision:

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
}