Esempio n. 1
0
  /**
   * Compute centers for all numClasses clusters
   *
   * @param srcBandList the input bands
   * @param op the operator
   */
  private synchronized void computeTerrainClusterCenters(
      final PolBandUtils.PolSourceBand srcBandList, final PolarimetricClassificationOp op) {

    if (clusterCentersComputed) {
      return;
    }

    mask = new byte[srcHeight][srcWidth];
    final double[][] fdd = new double[srcHeight][srcWidth];
    final java.util.List<ClusterInfo> pvCenterList = new ArrayList<>(numInitialClusters);
    final java.util.List<ClusterInfo> pdCenterList = new ArrayList<>(numInitialClusters);
    final java.util.List<ClusterInfo> psCenterList = new ArrayList<>(numInitialClusters);

    maxClusterSize = 2 * srcHeight * srcWidth / numFinalClasses;

    final Dimension tileSize = new Dimension(256, 256);
    final Rectangle[] tileRectangles =
        OperatorUtils.getAllTileRectangles(op.getSourceProduct(), tileSize, 0);

    computeInitialTerrainClusterCenters(
        fdd, pvCenterList, pdCenterList, psCenterList, srcBandList, tileRectangles, op);

    computeFinalTerrainClusterCenters(
        fdd, pvCenterList, pdCenterList, psCenterList, srcBandList, tileRectangles, op);

    clusterCentersComputed = true;
  }