@Override protected Stx computeStxImpl(int level, ProgressMonitor pm) { final IndexCoding indexCoding = getIndexCoding(); if (indexCoding == null) { return super.computeStxImpl(level, pm); } final int sampleCount = indexCoding.getSampleCount(); int minSample = Integer.MAX_VALUE; int maxSample = Integer.MIN_VALUE; for (int i = 0; i < sampleCount; i++) { final int sample = indexCoding.getSampleValue(i); minSample = Math.min(minSample, sample); maxSample = Math.max(maxSample, sample); } final int binCount = maxSample - minSample + 1; final double min = minSample; final double max = maxSample; return new StxFactory() .withResolutionLevel(level) .withHistogramBinCount(binCount) .withMinimum(min) .withMaximum(max).create(this, pm); }
@Override protected Object doInBackground(ProgressMonitor pm) { pm.beginTask(title, selectedMasks.length); try { final int binCount = Util.computeBinCount(accuracyModel.accuracy); for (int i = 0; i < selectedMasks.length; i++) { final Mask mask = selectedMasks[i]; final Stx stx; ProgressMonitor subPm = SubProgressMonitor.create(pm, 1); if (mask == null) { stx = new StxFactory() .withHistogramBinCount(binCount) .create(getRaster(), subPm); getRaster().setStx(stx); } else { stx = new StxFactory() .withHistogramBinCount(binCount) .withRoiMask(mask) .create(getRaster(), subPm); } histograms[i] = stx.getHistogram(); publish(new ComputeResult(stx, mask)); } } finally { pm.done(); } return null; }
private void setLogarithmicDisplay(final RasterDataNode raster, final boolean logarithmicDisplay) { final ImageInfoEditorModel model = imageInfoEditor.getModel(); if (logarithmicDisplay) { final StxFactory stxFactory = new StxFactory(); final Stx stx = stxFactory .withHistogramBinCount(raster.getStx().getHistogramBinCount()) .withLogHistogram(logarithmicDisplay) .withResolutionLevel(raster.getSourceImage().getModel().getLevelCount() - 1) .create(raster, ProgressMonitor.NULL); model.setDisplayProperties(raster.getName(), raster.getUnit(), stx, POW10_SCALING); } else { model.setDisplayProperties(raster.getName(), raster.getUnit(), raster.getStx(), Scaling.IDENTITY); } model.getImageInfo().setLogScaled(logarithmicDisplay); }
factory.withHistogramBinCount(histogramPlotConfig.numBins); factory.withLogHistogram(histogramPlotConfig.histogramLogScaled); if (min != null) {
@Test public void testCreateStxForMultipleBands() throws Exception { final Band testBand1 = createTestBand(ProductData.TYPE_FLOAT64, 10, 10, -100); final Band testBand2 = createTestBand(ProductData.TYPE_FLOAT64, 10, 10, -200); Stx stx = new StxFactory().withHistogramBinCount(2097152).create(null, new RasterDataNode[]{testBand1, testBand2}, ProgressMonitor.NULL); assertEquals(100, stx.getMinimum(), 1E-3); assertEquals(299, stx.getMaximum(), 1E-3); assertEquals(199.5, stx.getMean(), 1E-3); assertEquals(199.5, stx.getMedian(), 1E-3); assertEquals(279, stx.getHistogram().getPTileThreshold(0.9)[0], 1E-3); assertEquals(199, stx.getHistogram().getPTileThreshold(0.5)[0], 1E-3); assertEquals(119, stx.getHistogram().getPTileThreshold(0.1)[0], 1E-3); }
@Test public void testCreateStxForNullBands() throws Exception { final Band testBand1 = createTestBand(ProductData.TYPE_FLOAT64, 10, 10, -100); final Band testBand2 = null; Stx stx = new StxFactory().withHistogramBinCount(524288).create(null, new RasterDataNode[]{testBand1, testBand2}, ProgressMonitor.NULL); assertEquals(100, stx.getMinimum(), 1E-3); assertEquals(199, stx.getMaximum(), 1E-3); assertEquals(149.5, stx.getMean(), 1E-3); assertEquals(149.5, stx.getMedian(), 1E-3); assertEquals(189, stx.getHistogram().getPTileThreshold(0.9)[0], 1E-3); assertEquals(149, stx.getHistogram().getPTileThreshold(0.5)[0], 1E-3); assertEquals(109, stx.getHistogram().getPTileThreshold(0.1)[0], 1E-3); }
@Test public void testCreateStxForMultipleBandsAndRoiMask() throws Exception { final Band testBand1 = createTestBand(ProductData.TYPE_FLOAT64, 10, 10, -100); final Band testBand2 = createTestBand(ProductData.TYPE_FLOAT64, 10, 10, -200); final Mask roiMask = testBand1.getProduct().addMask("validMask", "X < 5", "testValidMask", Color.gray, Double.NaN); final Mask roiMask2 = testBand2.getProduct().addMask("validMask", "X < 5", "testValidMask", Color.gray, Double.NaN); Stx stx = new StxFactory() .withHistogramBinCount(2097152) .create(new Mask[]{roiMask, roiMask2}, new RasterDataNode[]{testBand1, testBand2}, ProgressMonitor.NULL); assertEquals(100, stx.getMinimum(), 1E-3); assertEquals(294, stx.getMaximum(), 1E-3); assertEquals(197, stx.getMean(), 1E-3); assertEquals(274, stx.getHistogram().getPTileThreshold(0.9)[0], 1E-3); assertEquals(194, stx.getHistogram().getPTileThreshold(0.5)[0], 1E-3); assertEquals(114, stx.getHistogram().getPTileThreshold(0.1)[0], 1E-3); }