Revision 2438 org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/filter/enhancement/EqualizationFilter.java

View differences:

EqualizationFilter.java
26 26
import org.gvsig.fmap.dal.coverage.datastruct.BufferHistogram;
27 27
import org.gvsig.fmap.dal.coverage.datastruct.Params;
28 28
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
29
import org.gvsig.fmap.dal.coverage.exception.FilterAddException;
29 30
import org.gvsig.fmap.dal.coverage.exception.HistogramException;
30 31
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
31 32
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
32 33
import org.gvsig.fmap.dal.coverage.grid.filter.BaseRasterFilter;
34
import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer;
33 35
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
34
import org.gvsig.raster.impl.DefaultRasterManager;
35 36
import org.gvsig.raster.impl.buffer.RasterBuffer;
36 37
import org.gvsig.raster.impl.datastruct.BufferHistogramImpl;
37 38
import org.gvsig.raster.impl.store.ParamsImpl;
38 39
/**
39 40
 * Clase base para los filtros de ecualizaci?n de histograma.
40 41
 *
41
 * @version 31/05/2007
42 42
 * @author Nacho Brodin (nachobrodin@gmail.com)
43 43
 */
44 44
public class EqualizationFilter extends BaseRasterFilter {
......
46 46
	protected double[]                 minBandValue	      = null;
47 47
	protected double[]                 maxBandValue	      = null;
48 48
	protected int                      nbands             = 3;
49
	protected int[]                    renderBands        = null;
50 49
	protected int[]                    k                  = null;                   
51 50
	public static String[]             names              = new String[] {"equalization"};
52 51
	protected BufferHistogram          histogram          = null;
......
66 65
		setName(names[0]);
67 66
	}
68 67

  
69
	/*
70
	 * (non-Javadoc)
71
	 * @see org.gvsig.raster.grid.filter.RasterFilter#pre()
72
	 */
73
	public void pre() {
74
		raster = (Buffer) params.get("raster");
75
		stats = (Statistics) params.get("stats");
76
		histogram = (BufferHistogram) params.get("histogram");
77
		
78
		if(histogram == null) {
79
			try {
80
				histogram = raster.getHistogramComputer().getBufferHistogram();
81
			} catch (ProcessInterruptedException e) {
82
				exec = false;
83
			} catch (HistogramException e) {
84
				exec = false;
85
			} 
68
	public void pre() throws FilterAddException {
69
		super.pre();
70
		stats = (Statistics)getEnv().get("SrcStatistics");
71
		HistogramComputer hist = (HistogramComputer)getEnv().get("SrcHistogram");
72
		try {
73
			if (!stats.isCalculated()) {
74
				try {
75
					stats.calculate(RasterLibrary.statisticsScale);
76
				} catch (FileNotOpenException e) {
77
					// No podemos aplicar el filtro
78
					return;
79
				} catch (RasterDriverException e) {
80
					// No podemos aplicar el filtro
81
					return;
82
				}
83
			}
84
		} catch (ProcessInterruptedException e) {
85
			//Si se ha interrumpido no a?adimos el filtro
86 86
		}
87

  
88
		try {
89
			this.histogram = hist.getBufferHistogram();
90
		} catch (ProcessInterruptedException e) {
91
			exec = false;
92
		} catch (HistogramException e) {
93
			exec = false;
94
		} 
87 95
		
88
		renderBands = (int[]) params.get("renderBands");
89
		if(renderBands != null && renderBands.length < raster.getBandCount()) {
90
			int[] newRenderBands = new int[raster.getBandCount()];
91
			for (int i = 0; i < renderBands.length; i++)
92
				newRenderBands[i] = renderBands[i];
93
			for (int i = renderBands.length; i < newRenderBands.length; i++)
94
				newRenderBands[i] = i;
95
			renderBands = newRenderBands;
96
		}
97
		if(renderBands == null)
98
			renderBands = new int[]{0, 1, 2};
99
		
100 96
		ecualizedBands = (int[]) params.get("ecualizedBands");
101 97
		if(ecualizedBands == null)
102
			ecualizedBands = renderBands;
98
			ecualizedBands = getColorInterpretation().buildRenderBands();
103 99
		
104 100
		height = raster.getHeight();
105 101
		width = raster.getWidth();
......
132 128
				maxBandValue = stats.getMax();
133 129
			}
134 130
		}
135
				
131

  
136 132
		BufferHistogram rgbHistogram = null;
137
		try {
138
			if(raster.getDataType() == Buffer.TYPE_BYTE)
139
				rgbHistogram = BufferHistogramImpl.convertHistogramToRGB(raster.getHistogramComputer().getBufferHistogram());
140
			else 
141
				rgbHistogram = raster.getHistogramComputer().getBufferHistogram();
142
		} catch (ProcessInterruptedException e) {
143
			exec = false;
144
			return;
145
		} catch (HistogramException e) {
146
			exec = false;
147
			return;
148
		} 
133
		if(raster.getDataType() == Buffer.TYPE_BYTE)
134
			rgbHistogram = BufferHistogramImpl.convertHistogramToRGB(histogram);
135
		else 
136
			rgbHistogram = histogram;
149 137
		double[][] accumNormalize = BufferHistogramImpl.convertTableToNormalizeAccumulate(rgbHistogram.getTable());
150 138
		double[][] accumNormalizeNeg = BufferHistogramImpl.convertTableToNormalizeAccumulate(rgbHistogram.getNegativeTable());
151 139
		
......
158 146
		nElements = (laheNegative[0].length - 1);
159 147
		
160 148
		nbands = stats.getBandCount();
161
		rasterResult = DefaultRasterManager.getInstance().createBuffer(raster.getDataType(), raster.getWidth(), raster.getHeight(), raster.getBandCount(), true);
149
		createBufferResult(raster.getDataType(), raster.getBandCount());
162 150
	}
163 151

  
164 152
	/**
......
189 177
		return false;
190 178
	}
191 179
		
192
	/*
193
	 * (non-Javadoc)
194
	 * @see org.gvsig.raster.grid.filter.RasterFilter#getOutRasterDataType()
195
	 */
196 180
	public int getOutRasterDataType() {
197 181
		return Buffer.TYPE_BYTE;
198 182
	}
199 183

  
200
	/*
201
	 * (non-Javadoc)
202
	 * @see org.gvsig.raster.grid.filter.RasterFilter#getResult(java.lang.String)
203
	 */
204
	public Object getResult(String name) {
205
		if (name.equals("raster")) {
206
			if (!exec)
207
				return this.raster;
208
			return this.rasterResult;
209
		}
210
		return null;
211
	}
212

  
213
	/*
214
	 * (non-Javadoc)
215
	 * @see org.gvsig.raster.grid.filter.RasterFilter#getGroup()
216
	 */
217 184
	public String getGroup() {
218 185
		return "realces";
219 186
	}
220 187

  
221
	/*
222
	 * (non-Javadoc)
223
	 * @see org.gvsig.raster.grid.filter.RasterFilter#getUIParams()
224
	 */
225 188
	public Params getUIParams(String nameFilter) {
226
		Params params = new ParamsImpl();
227
		return params;
189
		return new ParamsImpl();
228 190
	}
229 191

  
230
	/*
231
	 * (non-Javadoc)
232
	 * @see org.gvsig.raster.grid.filter.RasterFilter#post()
233
	 */
234 192
	public void post() {
235 193
		// En caso de que nadie apunte a raster, se liberar? su memoria.
236 194
		raster = null;
237 195
	}
238 196

  
239
	/*
240
	 * (non-Javadoc)
241
	 * @see org.gvsig.raster.grid.filter.RasterFilter#getInRasterDataType()
242
	 */
243 197
	public int getInRasterDataType() {
244 198
		return 0;
245 199
	}
246 200

  
247
	/*
248
	 * (non-Javadoc)
249
	 * @see org.gvsig.raster.grid.filter.RasterFilter#process(int, int)
250
	 */
251 201
	public void process(int x, int y) {
252 202
	}
253 203

  
254
	/*
255
	 * (non-Javadoc)
256
	 * @see org.gvsig.raster.grid.filter.RasterFilter#getNames()
257
	 */
258 204
	public String[] getNames() {
259 205
		return names;
260 206
	}
261 207
	
262
	/*
263
	 * (non-Javadoc)
264
	 * @see org.gvsig.raster.grid.filter.RasterFilter#isVisible()
265
	 */
266 208
	public boolean isVisible() {
267 209
		return true;
268 210
	}

Also available in: Unified diff