public Color computeColor(final Scaling scaling, final double sample) { // @todo 1 tb/tb take care of non-linear scalings 2014-03-26 return computeColor(sample, getMinDisplaySample(), getMaxDisplaySample()); }
/** * @deprecated since BEAM 5.0, use {@link org.esa.beam.jai.ImageManager#createColorPalette(ImageInfo)} instead */ @Deprecated public Color[] createColorPalette(Scaling scaling) { // @todo 1 tb/tb take care of non-linear scalings 2014-03-26 final Color[] colorPalette = new Color[numColors]; final double displayMin = getMinDisplaySample(); final double displayMax = getMaxDisplaySample(); final double scalingFactor = 1 / (numColors - 1.0); for (int i = 0; i < numColors; i++) { final double w = i * scalingFactor; final double sample = displayMin + w * (displayMax - displayMin); colorPalette[i] = computeColor(sample, displayMin, displayMax); } return colorPalette; }
private double normalizeSample(double sample) { double minDisplaySample = getImageInfo().getColorPaletteDef().getMinDisplaySample(); double maxDisplaySample = getImageInfo().getColorPaletteDef().getMaxDisplaySample(); if (imageInfo.isLogScaled()) { minDisplaySample = Math.log10(imageInfo.getColorPaletteDef().getMinDisplaySample()); maxDisplaySample = Math.log10(imageInfo.getColorPaletteDef().getMaxDisplaySample()); sample = Math.log10(sample); } double delta = maxDisplaySample - minDisplaySample; if (delta == 0 || Double.isNaN(delta)) { delta = 1; } return (sample - minDisplaySample) / delta; }
private static void writeColorPalette(RasterDataNode raster, FileWriter writer) throws IOException { ImageInfo imageInfo = raster.getImageInfo(); final ColorPaletteDef paletteDef = imageInfo.getColorPaletteDef(); final Color[] colorPalette = ImageManager.createColorPalette(imageInfo); // Color[] colorPalette = paletteDef.createColorPalette(raster); double s1 = paletteDef.getMinDisplaySample(); double s2 = paletteDef.getMaxDisplaySample(); int numColors = colorPalette.length; writer.write("# Band: " + raster.getName() + "\n"); writer.write("# Sample unit: " + raster.getUnit() + "\n"); writer.write("# Minimum sample value: " + s1 + "\n"); writer.write("# Maximum sample value: " + s2 + "\n"); writer.write("# Number of colors: " + numColors + "\n"); double sf = (s2 - s1) / (numColors - 1.0); writer.write("ID;Sample;RGB\n"); for (int i = 0; i < numColors; i++) { Color color = colorPalette[i]; double s = s1 + i * sf; writer.write(i + ";" + s + ";" + StringUtils.formatColor(color) + "\n"); } }
public Range getRangeFromFile() { final ComboBoxModel<ColorPaletteWrapper> model = getModel(); final int selectedIndex = getSelectedIndex(); final ColorPaletteWrapper paletteWrapper = model.getElementAt(selectedIndex); String name = paletteWrapper.name; final ColorPaletteDef cpd; if (name.startsWith(DERIVED_FROM)) { name = name.substring(DERIVED_FROM.length()).trim(); if (name.toLowerCase().endsWith(".cpd")) { name = FileUtils.getFilenameWithoutExtension(name); } cpd = findColorPalette(name); } else { cpd = paletteWrapper.cpd; } return new Range(cpd.getMinDisplaySample(), cpd.getMaxDisplaySample()); }
int textHeight = fontMetrics.getHeight(); final double minValue = imageInfo.getColorPaletteDef().getMinDisplaySample(); final double maxValue = imageInfo.getColorPaletteDef().getMaxDisplaySample(); double roundFactor = MathUtils.computeRoundFactor(minValue, maxValue, 2); for (int i = 0; i < n; i++) {
public void setNumPoints(int numPoints) { while (getNumPoints() < numPoints) { addPoint(new Point(getMaxDisplaySample() + 1.0, Color.BLACK)); } while (getNumPoints() > numPoints) { removePointAt(getNumPoints() - 1); } }
public static void applyPaletteToRaster(ColorPaletteDef cpd, RasterDataNode raster) { removeRasterFromMapping(raster); final ImageInfo imageInfo = raster.getImageInfo(); if (imageInfo == null) { return; } final double minSample; final double maxSample; final boolean autoDistribute; final ColorPaletteDef oldDef = imageInfo.getColorPaletteDef(); if (oldDef != null) { minSample = oldDef.getMinDisplaySample(); maxSample = oldDef.getMaxDisplaySample(); autoDistribute = oldDef.isAutoDistribute(); } else { minSample = cpd.getMinDisplaySample(); maxSample = cpd.getMaxDisplaySample(); autoDistribute = cpd.isAutoDistribute(); } imageInfo.setColorPaletteDef(cpd.createDeepCopy(), minSample, maxSample, autoDistribute); appendRasterToMapping(cpd, raster); }
if (def != null) { imageInfo.getRgbChannelDef().setMinDisplaySample(channel, def.getMinDisplaySample()); imageInfo.getRgbChannelDef().setMaxDisplaySample(channel, def.getMaxDisplaySample());
private static PlanarImage createByteIndexedImage(RasterDataNode raster, RenderedImage sourceImage, ImageInfo imageInfo) { ColorPaletteDef colorPaletteDef = imageInfo.getColorPaletteDef(); final double minSample = colorPaletteDef.getMinDisplaySample(); final double maxSample = colorPaletteDef.getMaxDisplaySample(); if (isClassificationBand(raster)) { final IntMap sampleColorIndexMap = new IntMap((int) minSample - 1, 4098); final ColorPaletteDef.Point[] points = colorPaletteDef.getPoints(); for (int colorIndex = 0; colorIndex < points.length; colorIndex++) { sampleColorIndexMap.putValue((int) getSample(points[colorIndex]), colorIndex); } final int undefinedIndex = colorPaletteDef.getNumPoints(); return createIndexedImage(sourceImage, sampleColorIndexMap, undefinedIndex); } else { return createByteIndexedImage(raster, sourceImage, minSample, maxSample, 1.0); } }
/** * Creates a greyscale image from the given <code>{@link RasterDataNode}</code>. * <p/> * <p>The method uses the given raster data node's image information (an instance of <code>{@link * ImageInfo}</code>) to create the image. * * @param rasterDataNode the raster data node, must not be <code>null</code> * @param pm a monitor to inform the user about progress * * @return the color indexed image * * @throws IOException if the given raster data is not loaded and reload causes an I/O error * @see org.esa.beam.framework.datamodel.RasterDataNode#getImageInfo() */ public static BufferedImage createColorIndexedImage(final RasterDataNode rasterDataNode, ProgressMonitor pm) throws IOException { Guardian.assertNotNull("rasterDataNode", rasterDataNode); final int width = rasterDataNode.getSceneRasterWidth(); final int height = rasterDataNode.getSceneRasterHeight(); final ImageInfo imageInfo = rasterDataNode.getImageInfo(ProgressMonitor.NULL); final double newMin = imageInfo.getColorPaletteDef().getMinDisplaySample(); final double newMax = imageInfo.getColorPaletteDef().getMaxDisplaySample(); final byte[] colorIndexes = rasterDataNode.quantizeRasterData(newMin, newMax, 1.0, pm); final IndexColorModel cm = imageInfo.createIndexColorModel(rasterDataNode); final SampleModel sm = cm.createCompatibleSampleModel(width, height); final DataBuffer db = new DataBufferByte(colorIndexes, colorIndexes.length); final WritableRaster wr = WritableRaster.createWritableRaster(sm, db, null); return new BufferedImage(cm, wr, false, null); }
public static Color computeColor(ImageInfo imageInfo, Double rasterValue) { final ColorPaletteDef cpd = imageInfo.getColorPaletteDef(); if (rasterValue <= cpd.getMinDisplaySample()) { return cpd.getFirstPoint().getColor(); } else if (rasterValue >= cpd.getMaxDisplaySample()) { return cpd.getLastPoint().getColor(); } else { BorderSamplesAndColors boSaCo = new BorderSamplesAndColors(); final boolean logScaled = imageInfo.isLogScaled(); if (logScaled) { rasterValue = Stx.LOG10_SCALING.scale(rasterValue); } for (int i = 0; i < cpd.getNumPoints() - 1; i++) { boSaCo = getBorderSamplesAndColors(imageInfo, i, boSaCo); if (rasterValue >= boSaCo.sample1 && rasterValue <= boSaCo.sample2) { return computeColor(rasterValue, boSaCo); } } } return Color.black; }
@Override public void updateFormModel(ProductSceneView productSceneView) { if (!hidden) { ColorPalettesManager.loadAvailableColorPalettes(parentForm.getIODir()); colorPaletteChooser.reloadPalettes(); } final ImageInfo imageInfo = productSceneView.getImageInfo(); final ColorPaletteDef cpd = imageInfo.getColorPaletteDef(); final boolean logScaled = imageInfo.isLogScaled(); final boolean discrete = cpd.isDiscrete(); colorPaletteChooser.setLog10Display(logScaled); colorPaletteChooser.setDiscreteDisplay(discrete); shouldFireChooserEvent = false; colorPaletteChooser.setSelectedColorPaletteDefinition(cpd); shouldFireChooserEvent = true; discreteCheckBox.setDiscreteColorsMode(discrete); logDisplayButton.setSelected(logScaled); parentForm.revalidateToolViewPaneControl(); minField.setValue(cpd.getMinDisplaySample()); maxField.setValue(cpd.getMaxDisplaySample()); }
public ImageInfo getImageInfo(RasterDataNode[] rasters) { Assert.notNull(rasters, "rasters"); Assert.argument(rasters.length == 1 || rasters.length == 3, "rasters.length == 1 || rasters.length == 3"); if (rasters.length == 1) { RasterDataNode raster = rasters[0]; Assert.state(raster.getImageInfo() != null, "raster.getImageInfo() != null"); return raster.getImageInfo(); } else { final RGBChannelDef rgbChannelDef = new RGBChannelDef(); for (int i = 0; i < rasters.length; i++) { RasterDataNode raster = rasters[i]; Assert.state(rasters[i].getImageInfo() != null, "rasters[i].getImageInfo() != null"); ImageInfo imageInfo = raster.getImageInfo(); rgbChannelDef.setSourceName(i, raster.getName()); rgbChannelDef.setMinDisplaySample(i, imageInfo.getColorPaletteDef().getMinDisplaySample()); rgbChannelDef.setMaxDisplaySample(i, imageInfo.getColorPaletteDef().getMaxDisplaySample()); } return new ImageInfo(rgbChannelDef); } }
private static void transferPoints(ColorPaletteDef sourceCPD, double minSample, double maxSample, boolean autoDistribute, ColorPaletteDef targetCPD) { if (autoDistribute || sourceCPD.isAutoDistribute()) { alignNumPoints(sourceCPD, targetCPD); double minDisplaySample = sourceCPD.getMinDisplaySample(); double maxDisplaySample = sourceCPD.getMaxDisplaySample(); double delta1 = (maxSample > minSample) ? maxSample - minSample : 1.0; double delta2 = (maxDisplaySample > minDisplaySample) ? maxDisplaySample - minDisplaySample : 1.0; double b = delta1 / delta2; double a = minSample - minDisplaySample * b; for (int i = 0; i < sourceCPD.getNumPoints(); i++) { targetCPD.getPointAt(i).setSample(a + b * sourceCPD.getPointAt(i).getSample()); targetCPD.getPointAt(i).setColor(sourceCPD.getPointAt(i).getColor()); targetCPD.getPointAt(i).setLabel(sourceCPD.getPointAt(i).getLabel()); } } else { targetCPD.setPoints(sourceCPD.getPoints().clone()); } }
rgbChannelDef.setSourceName(i, raster.getName()); rgbChannelDef.setMinDisplaySample(i, imageInfo.getColorPaletteDef().getMinDisplaySample()); rgbChannelDef.setMaxDisplaySample(i, imageInfo.getColorPaletteDef().getMaxDisplaySample());
default: min = currentCPD.getMinDisplaySample(); max = currentCPD.getMaxDisplaySample(); cpd = deepCopy;
final byte[] rgbSamples = new byte[numColorComponents * numPixels]; final double minSample = imageInfo.getColorPaletteDef().getMinDisplaySample(); final double maxSample = imageInfo.getColorPaletteDef().getMaxDisplaySample();
float[] minmax = new float[]{ (float) paletteDef.getMinDisplaySample(), (float) paletteDef.getMaxDisplaySample() }; createArrayAttribute(datasetID, "IMAGE_MINMAXRANGE", minmax);