private void getCurrentPoint(final int idx, final ProductData[] dataBuffers, final double[] u) { for (int i = 1; i < dataBuffers.length; i++) { u[i - 1] = dataBuffers[i].getElemDoubleAt(idx); } }
/** * Get compact-pol or dual-pol scatter vector for a given pixel in the input product. * * @param index X,Y coordinate of the given pixel * @param dataBuffers Source tiles dataBuffers for all 4 source bands * @param kr Real part of the scatter vector * @param ki Imaginary part of the scatter vector */ default void getScatterVector(final int index, final ProductData[] dataBuffers, final double[] kr, final double[] ki) { kr[0] = dataBuffers[0].getElemDoubleAt(index); ki[0] = dataBuffers[1].getElemDoubleAt(index); kr[1] = dataBuffers[2].getElemDoubleAt(index); ki[1] = dataBuffers[3].getElemDoubleAt(index); }
default boolean isNoData(final ProductData[] dataBuffers, final int index, final double nodatavalue) { return dataBuffers[0].getElemDoubleAt(index) == nodatavalue && dataBuffers[1].getElemDoubleAt(index) == nodatavalue; } }
/** * Get scatter matrix for given pixel. * * @param index X,Y coordinate of the given pixel * @param dataBuffers Source tiles dataBuffers for all 8 source bands * @param scatterMatrix_i Real part of the scatter matrix * @param scatterMatrix_q Imaginary part of the scatter matrix */ default void getComplexScatterMatrix(final int index, final ProductData[] dataBuffers, final double[][] scatterMatrix_i, final double[][] scatterMatrix_q) { scatterMatrix_i[0][0] = dataBuffers[0].getElemDoubleAt(index); // HH - real scatterMatrix_q[0][0] = dataBuffers[1].getElemDoubleAt(index); // HH - imag scatterMatrix_i[0][1] = dataBuffers[2].getElemDoubleAt(index); // HV - real scatterMatrix_q[0][1] = dataBuffers[3].getElemDoubleAt(index); // HV - imag scatterMatrix_i[1][0] = dataBuffers[4].getElemDoubleAt(index); // VH - real scatterMatrix_q[1][0] = dataBuffers[5].getElemDoubleAt(index); // VH - imag scatterMatrix_i[1][1] = dataBuffers[6].getElemDoubleAt(index); // VV - real scatterMatrix_q[1][1] = dataBuffers[7].getElemDoubleAt(index); // VV - imag }
/** * Get covariance matrix C2 for a given pixel in the input C2 product. * * @param index X,Y coordinate of the given pixel * @param dataBuffers Source tile data buffers for all 4 source bands * @param Cr Real part of the 2x2 covariance matrix * @param Ci Imaginary part of the 2x2 covariance matrix */ default void getCovarianceMatrixC2(final int index, final ProductData[] dataBuffers, final double[][] Cr, final double[][] Ci) { Cr[0][0] = dataBuffers[0].getElemDoubleAt(index); // C11 - real Ci[0][0] = 0.0; // C11 - imag Cr[0][1] = dataBuffers[1].getElemDoubleAt(index); // C12 - real Ci[0][1] = dataBuffers[2].getElemDoubleAt(index); // C12 - imag Cr[1][1] = dataBuffers[3].getElemDoubleAt(index); // C22 - real Ci[1][1] = 0.0; // C22 - imag Cr[1][0] = Cr[0][1]; Ci[1][0] = -Ci[0][1]; }
private static void getRowData(final int sy, final int sx0, final int sw, final ProductData iData, final ProductData qData, final Tile iRaster, final double[] array) { int index; int k = 0; final int length = sx0 + sw; for (int sx = sx0; sx < length; ++sx) { index = iRaster.getDataBufferIndex(sx, sy); array[k++] = iData.getElemDoubleAt(index); array[k++] = qData.getElemDoubleAt(index); } }
private static void getRowData(final int sy, final int sx0, final int sw, final ProductData srcData, final Tile srcRaster, final double[] array) { int k = 0; final int length = sx0 + sw; for (int sx = sx0; sx < length; ++sx) { array[k++] = srcData.getElemDoubleAt(srcRaster.getDataBufferIndex(sx, sy)); array[k++] = 0.0; } }
public boolean getSamples(final int[] x, final int[] y, final double[][] samples) throws Exception { boolean allValid = true; for (int i = 0; i < y.length; i++) { for (int j = 0; j < x.length; j++) { samples[i][j] = dataBuffer.getElemDoubleAt(tile.getDataBufferIndex(x[j], y[i])); if (usesNoData) { if (scalingApplied && geophysicalNoDataValue == samples[i][j] || noDataValue == samples[i][j]) { samples[i][j] = Double.NaN; allValid = false; } } } } return allValid; } }
/** * Get scatter matrix for given pixel. * * @param index X,Y coordinate of the given pixel * @param dataBuffers Source tiles dataBuffers for all 8 source bands * @param Sr Real part of the scatter matrix * @param Si Imaginary part of the scatter matrix */ default void getComplexScatterMatrix(final int index, final ProductData[] dataBuffers, final DoubleMatrix Sr, final DoubleMatrix Si) { Sr.put(0, 0, dataBuffers[0].getElemDoubleAt(index)); // HH - real Si.put(0, 0, dataBuffers[1].getElemDoubleAt(index)); // HH - imag Sr.put(0, 1, dataBuffers[2].getElemDoubleAt(index)); // HV - real Si.put(0, 1, dataBuffers[3].getElemDoubleAt(index)); // HV - imag Sr.put(1, 0, dataBuffers[4].getElemDoubleAt(index)); // VH - real Si.put(1, 0, dataBuffers[5].getElemDoubleAt(index)); // VH - imag Sr.put(1, 1, dataBuffers[6].getElemDoubleAt(index)); // VV - real Si.put(1, 1, dataBuffers[7].getElemDoubleAt(index)); // VV - imag }
private double getMeanValue(final int xStart, final int xEnd, final int yStart, final int yEnd, final ProductData srcData1, final ProductData srcData2, final TileIndex srcIndex, final double rgAzLooks) { double v1, v2; double meanValue = 0.0; if (complexCoregistration) { for (int y = yStart; y < yEnd; y++) { srcIndex.calculateStride(y); for (int x = xStart; x < xEnd; x++) { final int idx = srcIndex.getIndex(x); v1 = srcData1.getElemDoubleAt(idx); v2 = srcData2.getElemDoubleAt(idx); meanValue += v1 * v1 + v2 * v2; } } } else { for (int y = yStart; y < yEnd; y++) { srcIndex.calculateStride(y); for (int x = xStart; x < xEnd; x++) { meanValue += srcData1.getElemDoubleAt(srcIndex.getIndex(x)); } } } return meanValue / rgAzLooks; }
public boolean getSamples(final int[] x, final int[] y, final double[][] samples) throws Exception { boolean allValid = true; try { final TileIndex index = new TileIndex(tile); final int maxX = x.length; for (int i = 0; i < y.length; i++) { index.calculateStride(y[i]); for (int j = 0; j < maxX; j++) { double v = dataBuffer.getElemDoubleAt(index.getIndex(x[j])); samples[i][j] = v; } } } catch (Exception e) { SystemUtils.LOG.severe(e.getMessage()); allValid = false; } return allValid; } }
private static void searchNeighbourhood(final PixelPos pixel, final int x0, final int y0, final int w, final int h, final ProductData data, final Tile tile, final double threshold, final int[][] pixelsScaned, final List<PixelPos> clusterPixels, final List<PixelPos> newSeeds) { final int xc = (int) pixel.x; final int yc = (int) pixel.y; final int[] x = {xc - 1, xc, xc + 1, xc - 1, xc + 1, xc - 1, xc, xc + 1}; final int[] y = {yc - 1, yc - 1, yc - 1, yc, yc, yc + 1, yc + 1, yc + 1}; for (int i = 0; i < 8; i++) { if (x[i] >= x0 && x[i] < x0 + w && y[i] >= y0 && y[i] < y0 + h && pixelsScaned[y[i] - y0][x[i] - x0] == 0 && data.getElemDoubleAt(tile.getDataBufferIndex(x[i], y[i])) > threshold) { pixelsScaned[y[i] - y0][x[i] - x0] = 1; clusterPixels.add(new PixelPos(x[i], y[i])); newSeeds.add(new PixelPos(x[i], y[i])); } } } }
private double[] getMasterImagette(final Tile tile, final ProductData data, final PixelPos gcpPixelPos) { final double[] imagette = new double[cWindowWidth * cWindowHeight]; final int xul = (int) gcpPixelPos.x - cHalfWindowWidth + 1; final int yul = (int) gcpPixelPos.y - cHalfWindowHeight + 1; final TileIndex index = new TileIndex(tile); int k = 0; for (int j = 0; j < cWindowHeight; j++) { index.calculateStride(yul + j); for (int i = 0; i < cWindowWidth; i++) { imagette[k++] = data.getElemDoubleAt(index.getIndex(xul + i)); } } return imagette; }
private void addOrbitStateVectors(final MetadataElement absRoot, final MetadataElement globalElem) { final MetadataElement orbitVectorListElem = absRoot.getElement(AbstractMetadata.orbit_state_vectors); final ProductData.UTC referenceUTC = ReaderUtils.getTime(globalElem, "Reference_UTC", standardDateFormat); final int numPoints = globalElem.getAttributeInt("Number_of_State_Vectors"); for (int i = 0; i < numPoints; i++) { final double stateVectorTime = globalElem.getAttribute("State_Vectors_Times").getData().getElemDoubleAt(i); final ProductData.UTC orbitTime = new ProductData.UTC(referenceUTC.getMJD() + stateVectorTime / Constants.secondsInDay); final ProductData pos = globalElem.getAttribute("ECEF_Satellite_Position").getData(); final ProductData vel = globalElem.getAttribute("ECEF_Satellite_Velocity").getData(); final double satellitePositionX = pos.getElemDoubleAt(3 * i); final double satellitePositionY = pos.getElemDoubleAt(3 * i + 1); final double satellitePositionZ = pos.getElemDoubleAt(3 * i + 2); final double satelliteVelocityX = vel.getElemDoubleAt(3 * i); final double satelliteVelocityY = vel.getElemDoubleAt(3 * i + 1); final double satelliteVelocityZ = vel.getElemDoubleAt(3 * i + 2); final MetadataElement orbitVectorElem = new MetadataElement(AbstractMetadata.orbit_vector + (i + 1)); orbitVectorElem.setAttributeUTC(AbstractMetadata.orbit_vector_time, orbitTime); orbitVectorElem.setAttributeDouble(AbstractMetadata.orbit_vector_x_pos, satellitePositionX); orbitVectorElem.setAttributeDouble(AbstractMetadata.orbit_vector_y_pos, satellitePositionY); orbitVectorElem.setAttributeDouble(AbstractMetadata.orbit_vector_z_pos, satellitePositionZ); orbitVectorElem.setAttributeDouble(AbstractMetadata.orbit_vector_x_vel, satelliteVelocityX); orbitVectorElem.setAttributeDouble(AbstractMetadata.orbit_vector_y_vel, satelliteVelocityY); orbitVectorElem.setAttributeDouble(AbstractMetadata.orbit_vector_z_vel, satelliteVelocityZ); orbitVectorListElem.addElement(orbitVectorElem); } }
@Override public void run() { for (int i = 0; i < numOfSourceBands; i++) { bandsRawSamples[i] = getSourceTile(sourceProduct.getBand(sourceBandNames[i]), rectangle).getRawSamples(); } final int n = bandsRawSamples[0].getNumElems(); Arrays.fill(tileMinPCA, Double.MAX_VALUE); for (int i = 0; i < numPCA; i++) { for (int k = 0; k < n; k++) { double vPCA = 0.0; for (int j = 0; j < numOfSourceBands; j++) { vPCA += bandsRawSamples[j].getElemDoubleAt(k) * eigenVectorMatrices[j][i]; } if (vPCA < tileMinPCA[i]) tileMinPCA[i] = vPCA; } } synchronized (minPCA) { computePCAMin(tileMinPCA); } } };
public static DoubleMatrix pullDoubleMatrix(final Tile tile) { final int height = tile.getHeight(); final int width = tile.getWidth(); final DoubleMatrix result = new DoubleMatrix(height, width); final ProductData samples = tile.getRawSamples(); for (int y = 0; y < height; y++) { final int stride = y * width; for (int x = 0; x < width; x++) { result.put(y, x, samples.getElemDoubleAt(stride + x)); } } samples.dispose(); return result; }
v = rawSamples1.getElemDoubleAt(i); if (v > max[idx]) max[idx] = v;
private static Object getDataElemArray(ProductData data, int index) { switch (data.getType()) { case TYPE_INT8: return new byte[]{(byte)data.getElemIntAt(index)}; case TYPE_INT16: return new short[]{(short)data.getElemIntAt(index)}; case TYPE_INT32: return new int[]{data.getElemIntAt(index)}; case TYPE_UINT8: return new byte[]{(byte)data.getElemUIntAt(index)}; case TYPE_UINT16: return new short[]{(short)data.getElemUIntAt(index)}; case TYPE_UINT32: return new int[]{(int)data.getElemUIntAt(index)}; case TYPE_INT64: return new long[]{data.getElemLongAt(index)}; case TYPE_FLOAT32: return new float[]{data.getElemFloatAt(index)}; case TYPE_FLOAT64: return new double[]{data.getElemDoubleAt(index)}; default: return null; } } }
private static void addDopplerCentroidCoefficients(final Product product) { final MetadataElement absRoot = AbstractMetadata.getAbstractedMetadata(product); final MetadataElement root = AbstractMetadata.getOriginalProductMetadata(product); final MetadataElement globalElem = root.getElement(NetcdfConstants.GLOBAL_ATTRIBUTES_NAME); final MetadataElement dopplerCentroidCoefficientsElem = absRoot.getElement(AbstractMetadata.dop_coefficients); final MetadataElement dopplerListElem = new MetadataElement(AbstractMetadata.dop_coef_list + ".1"); dopplerCentroidCoefficientsElem.addElement(dopplerListElem); final ProductData.UTC utcTime = absRoot.getAttributeUTC(AbstractMetadata.first_line_time, AbstractMetadata.NO_METADATA_UTC); dopplerListElem.setAttributeUTC(AbstractMetadata.dop_coef_time, utcTime); AbstractMetadata.addAbstractedAttribute(dopplerListElem, AbstractMetadata.slant_range_time, ProductData.TYPE_FLOAT64, "ns", "Slant Range Time"); AbstractMetadata.setAttribute(dopplerListElem, AbstractMetadata.slant_range_time, 0.0); for (int i = 0; i < 6; i++) { final double coefValue = globalElem.getAttribute("Centroid_vs_Range_Time_Polynomial").getData().getElemDoubleAt(i); final MetadataElement coefElem = new MetadataElement(AbstractMetadata.coefficient + '.' + (i + 1)); dopplerListElem.addElement(coefElem); AbstractMetadata.addAbstractedAttribute(coefElem, AbstractMetadata.dop_coef, ProductData.TYPE_FLOAT64, "", "Doppler Centroid Coefficient"); AbstractMetadata.setAttribute(coefElem, AbstractMetadata.dop_coef, coefValue); } }
private void addDopplerCentroidCoefficients() { final MetadataElement absRoot = AbstractMetadata.getAbstractedMetadata(product); final MetadataElement root = AbstractMetadata.getOriginalProductMetadata(product); final MetadataElement globalElem = root.getElement(NetcdfConstants.GLOBAL_ATTRIBUTES_NAME); final MetadataElement dopplerCentroidCoefficientsElem = absRoot.getElement(AbstractMetadata.dop_coefficients); final MetadataElement dopplerListElem = new MetadataElement(AbstractMetadata.dop_coef_list + ".1"); dopplerCentroidCoefficientsElem.addElement(dopplerListElem); final ProductData.UTC utcTime = absRoot.getAttributeUTC(AbstractMetadata.first_line_time, AbstractMetadata.NO_METADATA_UTC); dopplerListElem.setAttributeUTC(AbstractMetadata.dop_coef_time, utcTime); AbstractMetadata.addAbstractedAttribute(dopplerListElem, AbstractMetadata.slant_range_time, ProductData.TYPE_FLOAT64, "ns", "Slant Range Time"); AbstractMetadata.setAttribute(dopplerListElem, AbstractMetadata.slant_range_time, 0.0); for (int i = 0; i < 6; i++) { final double coefValue = globalElem.getAttribute("Centroid_vs_Range_Time_Polynomial").getData().getElemDoubleAt(i); final MetadataElement coefElem = new MetadataElement(AbstractMetadata.coefficient + '.' + (i + 1)); dopplerListElem.addElement(coefElem); AbstractMetadata.addAbstractedAttribute(coefElem, AbstractMetadata.dop_coef, ProductData.TYPE_FLOAT64, "", "Doppler Centroid Coefficient"); AbstractMetadata.setAttribute(coefElem, AbstractMetadata.dop_coef, coefValue); } }