private void setInitialClusterBoundaries(final java.util.List<ClusterInfo> clusterList) { final Band ratio = sourceProduct.getBand(srcBandNames[0]); final double bandMin = ratio.getStx(true, ProgressMonitor.NULL).getMinimum(); final double bandMax = ratio.getStx(true, ProgressMonitor.NULL).getMaximum(); final int numLowerClasses = Math.max(1, (int) Math.round((T_Ratio_Low - bandMin) / (bandMax - bandMin - T_Ratio_High + T_Ratio_Low) * (numClasses - 1))); final int numHighClasses = numClasses - 1 - numLowerClasses; final double dl = (T_Ratio_Low - bandMin) / numLowerClasses; final double dh = (bandMax - T_Ratio_High) / numHighClasses; for (int i = 0; i < numClasses; i++) { ClusterInfo cluster = new ClusterInfo(i); if (i == 0) { cluster.setInitialClusterBounds(T_Ratio_Low, T_Ratio_High); } else if (i <= numLowerClasses) { cluster.setInitialClusterBounds(bandMin + (i - 1) * dl, bandMin + i * dl); } else { cluster.setInitialClusterBounds(T_Ratio_High + (i - numLowerClasses - 1) * dh, T_Ratio_High + (i - numLowerClasses) * dh); } clusterList.add(cluster); } }
private static Band addConfidenceBand(Product product, Band sourceBand, Band varianceBand) { Band confidenceBand; Stx varStx = varianceBand.getStx(); double minVar = Math.max(varStx.getMean() - 3 * varStx.getStandardDeviation(), varStx.getMinimum()); double maxVar = Math.min(varStx.getMean() + 3 * varStx.getStandardDeviation(), varStx.getMaximum()); double absVar = maxVar - minVar; confidenceBand = product.addBand(sourceBand.getName() + "_confidence", String.format("min(max((1 - (%s - %s) / %s), 0), 1)", varianceBand.getName(), minVar, absVar), ProductData.TYPE_FLOAT32); confidenceBand.setUnit("dl"); return confidenceBand; } }
private float[][] getSpectrum(final int currentRec, final boolean getReal) throws Exception { final Band rasterNode = getBand(currentRec, getReal); rasterNode.loadRasterData(); final float[] dataset = new float[rasterNode.getRasterWidth() * rasterNode.getRasterHeight()]; rasterNode.getPixels(0, 0, rasterNode.getRasterWidth(), rasterNode.getRasterHeight(), dataset); minValue = (float) rasterNode.getStx().getMinimum(); maxValue = (float) rasterNode.getStx().getMaximum(); final float spectrum[][] = new float[numDirBins][numWLBins]; int index = 0; for (int i = 0; i < numDirBins; i++) { for (int j = 0; j < numWLBins; j++) { spectrum[i][j] = dataset[index++]; } } return spectrum; }
private static void nomalizeHSVExpressions(final Product product, String[] hsvExpressions) { // normalize //range = max - min; //normvalue = min(max(((v- min)/range),0), 1); boolean modified = product.isModified(); int i = 0; for (String exp : hsvExpressions) { if (exp.isEmpty()) continue; final String checkForNoDataValue = "";//getCheckForNoDataExpression(product, exp); final Band virtBand = createVirtualBand(product, exp, "tmpVirtBand" + i); final Stx stx = virtBand.getStx(false, ProgressMonitor.NULL); if (stx != null) { final double min = stx.getMinimum(); final double range = stx.getMaximum() - min; hsvExpressions[i] = checkForNoDataValue + "min(max((((" + exp + ")- " + min + ")/" + range + "), 0), 1)"; } product.removeBand(virtBand); ++i; } product.setModified(modified); }
final Stx stx = srcBand.getStx(); final double min = stx.getMinimum(); final double max = stx.getMaximum();
realBand.setNoDataValueUsed(computedBand.isNoDataValueUsed()); if (computedBand.isStxSet()) { realBand.setStx(computedBand.getStx());