/** * Perform contrast enhancement on one channel and copy the result to a RasterData object. * * @param newData * RasterData output container * @param rasutil * channel data source * @param inIndex * input channel index * @param outIndex * output channel index * @param enhancement * ContrastEnhancement to perform * @return modified RasterData container */ private RasterData setEnhancedChannelData( RasterData newData, RasterDataUtility rasutil, int inIndex, int outIndex, ContrastEnhancement enhancement ) { int i = 0, j = 0, val = 0, cols = newData.getColumns(), rows = newData.getRows(); rasutil.setContrastEnhancement( enhancement ); if ( enhancement != null ) { LOG.trace( "Using gamma {} for channel '{}'...", enhancement.gamma, inIndex ); } for ( i = 0; i < cols; i++ ) for ( j = 0; j < rows; j++ ) { val = (int) rasutil.getEnhanced( i, j, inIndex ); newData.setByteSample( i, j, outIndex, int2byte( val ) ); } return newData; }
/** * Performs contrast enhancement on all bands of a raster and returns the modified raster. * * @param raster * initial raster * @param contrastEnhancement * @return the enhanced raster */ private AbstractRaster performContrastEnhancement( AbstractRaster raster, ContrastEnhancement contrastEnhancement ) { if ( contrastEnhancement == null ) return raster; LOG.trace( "Enhancing contrast for overall raster..." ); RasterData data = raster.getAsSimpleRaster().getRasterData(), newData = data; RasterDataUtility rasutil = new RasterDataUtility( raster ); rasutil.setContrastEnhancement( contrastEnhancement ); rasutil.precomputeContrastEnhancements( -1, contrastEnhancement ); for ( int band = 0; band < data.getBands(); band++ ) newData = setEnhancedChannelData( newData, rasutil, band, band, contrastEnhancement ); AbstractRaster newRaster = new SimpleRaster( newData, raster.getEnvelope(), raster.getRasterReference(), null ); return newRaster; }