private static NoDataMetadata mergeMetadataBySummary( final Set<SampleIndex> noDataIndices, final NoDataMetadata noDataMetadata, final WritableRaster raster) { final Iterator<SampleIndex> indices = noDataIndices.iterator(); while (indices.hasNext()) { final SampleIndex index = indices.next(); if (!noDataMetadata.isNoData( index, raster.getSampleDouble(index.getX(), index.getY(), index.getBand()))) { indices.remove(); } } return new NoDataBySampleIndex(noDataIndices); }
private static NoDataMetadata exhaustiveMergeMetadata( final NoDataMetadata noDataMetadata1, final WritableRaster raster1, final NoDataMetadata noDataMetadata2, final WritableRaster raster2) { final int width = Math.min(raster1.getWidth(), raster2.getWidth()); final int height = Math.min(raster1.getHeight(), raster2.getHeight()); final int numBands = Math.min(raster1.getNumBands(), raster2.getNumBands()); final Set<SampleIndex> indices = new HashSet<SampleIndex>(); for (int b = 0; b < numBands; b++) { for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { final SampleIndex index = new SampleIndex(x, y, b); if (noDataMetadata1.isNoData(index, raster1.getSampleDouble(x, y, b)) && noDataMetadata2.isNoData(index, raster2.getSampleDouble(x, y, b))) { indices.add(index); } } } } return new NoDataBySampleIndex(indices); }
protected void mergeRasters( final RasterTile<T> thisTile, final RasterTile<T> nextTile, final WritableRaster thisRaster, final WritableRaster nextRaster) { final int maxX = nextRaster.getMinX() + nextRaster.getWidth(); final int maxY = nextRaster.getMinY() + nextRaster.getHeight(); for (int b = 0; b < nextRaster.getNumBands(); b++) { for (int x = nextRaster.getMinX(); x < maxX; x++) { for (int y = nextRaster.getMinY(); y < maxY; y++) { final double thisSample = thisRaster.getSampleDouble(x, y, b); final double nextSample = nextRaster.getSampleDouble(x, y, b); thisRaster.setSample(x, y, b, getSample(x, y, b, thisSample, nextSample)); } } } }
/** * <p>Test interpolate method from biCubic class.<br/><br/> * * Verify that interpolation at Integer pixel position equal pixel position.<br/> * Verify that none-integer pixels position interpolation is between minimum and maximum interpolation values.<br/><br/> * * To find minimum and maximum values :<br/> * - Compute pixels interpolation at nearest integer pixel position and get maximum and minimum values.<br/> * - Find interpolation roots, get roots interpolation values if its possible,<br/> * and get maximum and minimum values from previous maximum and minimum.</p> */ @Test public void globalTest() { // pixIterator.moveTo(0, -1, 0); double interpolXDeb, interpolXEnd, interpolYDeb, interpolYEnd; for (int y = miny; y < miny + height-1; y++) { for (int x = minx; x < minx + width-1; x++) { // interpolation verification at integer pixel position. interpolXDeb = interpol.interpolate(x, y, 0); assertTrue(Math.abs(rastertest.getSampleDouble(x, y, 0) - interpolXDeb) <= 1E-12); interpolXEnd = interpol.interpolate(x+1, y, 0); assertTrue(Math.abs(rastertest.getSampleDouble(x+1, y, 0) - interpolXEnd) <= 1E-12); interpolYDeb = interpol.interpolate(x, y+1, 0); assertTrue(Math.abs(rastertest.getSampleDouble(x, y+1, 0) - interpolYDeb) <= 1E-12); interpolYEnd = interpol.interpolate(x+1, y+1, 0); assertTrue(Math.abs(rastertest.getSampleDouble(x+1, y+1, 0) - interpolYEnd) <= 1E-12); } } } }
assertTrue(Math.abs(rastertest.getSampleDouble(x, y, 0) - interpolVal) <= 1E-12); interpolVal = interpol.interpolate(x, y)[0]; assertTrue("At : ("+x+", "+y+ "Expected : "+(rastertest.getSampleDouble(x, y, 0))+" found : "+interpolVal, Math.abs(rastertest.getSampleDouble(x, y, 0) - interpolVal) <= 1E-12); assertTrue(Math.abs(rastertest.getSampleDouble(x, y, 0) - interpolVal) <= 1E-12); interpolVal = interpol.interpolate(x, y)[0]; assertTrue("At : ("+x+", "+y+ "Expected : "+(rastertest.getSampleDouble(x, y, 0))+" found : "+interpolVal, Math.abs(rastertest.getSampleDouble(x, y, 0) - interpolVal) <= 1E-12);
for (int y = 0; y < gridRange2D.getHeight(); y++) { try { dest = raster.getSampleDouble(x, y, 0);
double sample = dest.getSampleDouble(i, j, b);
if (thisTileMetadata.isNoData( new SampleIndex(x, y, b), thisRaster.getSampleDouble(x, y, b))) { final double sample = nextRaster.getSampleDouble(x, y, b); if ((nextTileMetadata == null) || !nextTileMetadata.isNoData(new SampleIndex(x, y, b), sample)) {