final int height = raster.getHeight(); Rectangle imgBounds = new Rectangle(raster.getMinX(), raster.getMinY(), width, height); Rectangle sourceArea = imageReadParam.getSourceRegion();
final int y = image.getMinY();
private List<Rectangle> computeRectangles(List<PlanarImage> images) { List<Rectangle> reg = new ArrayList<>(); Set<Integer> xSet= new TreeSet<>(); Set<Integer> ySet = new TreeSet<>(); for(PlanarImage image: images){ xSet.add(image.getMinX()); xSet.add(image.getMinX() + image.getWidth()); ySet.add(image.getMinY()); ySet.add(image.getMinY() + image.getHeight()); } Integer[] xArray = xSet.toArray(new Integer[xSet.size()]); Integer[] yArray = ySet.toArray(new Integer[ySet.size()]); for(int x = 0; x < xArray.length - 1; x++){ for(int y = 0; y < yArray.length - 1; y++ ){ reg.add(new Rectangle(xArray[x],yArray[y], xArray[x+1]-xArray[x], yArray[y+1]-yArray[y])); } } return reg; }
static void ensureImageCompatibility(PlanarImage dataImage, PlanarImage maskImage) { if (maskImage.getSampleModel().getNumBands() != 1) { throw new IllegalStateException("maskSampleModel.numBands != 1"); } if (maskImage.getSampleModel().getDataType() != DataBuffer.TYPE_BYTE) { throw new IllegalStateException("maskSampleModel.dataType != TYPE_BYTE"); } if (maskImage.getMinX() != dataImage.getMinX()) { throw new IllegalStateException("maskImage.getMinX() != dataImage.getMinX()"); } if (maskImage.getMinY() != dataImage.getMinY()) { throw new IllegalStateException("maskImage.getMinY() != dataImage.getMinY()"); } if (maskImage.getWidth() != dataImage.getWidth()) { throw new IllegalStateException("maskImage.getWidth() != dataImage.getWidth()"); } if (maskImage.getHeight() != dataImage.getHeight()) { throw new IllegalStateException("maskImage.getHeight() != dataImage.getHeight()"); } }
/** * The origin of planarImage and sceneLayout must be the same. * Compute the number of the pixels needed to cover the scene and remove the rows and columns outside the scene in planarImage. * @param planarImage * @param resX * @param resY * @param sceneLayout * @return */ public static PlanarImage cropBordersOutsideScene (PlanarImage planarImage, float resX, float resY, S2OrthoSceneLayout sceneLayout) { int sceneHeight = 0; int sceneWidth = 0; if(sceneLayout.sceneDimensions.size()<=0) { return planarImage; } for(S2SpatialResolution resolution : S2SpatialResolution.values()) { if (sceneLayout.sceneDimensions.get(resolution) != null) { sceneHeight = sceneLayout.getSceneDimension(resolution).height*resolution.resolution; sceneWidth = sceneLayout.getSceneDimension(resolution).width*resolution.resolution; break; } } int rowNumber = (int) Math.ceil(sceneHeight/resY); int colNumber = (int) Math.ceil(sceneWidth/resX); planarImage = CropDescriptor.create(planarImage, planarImage.getMinX() + 0.0f, planarImage.getMinY() + 0.0f, (float) colNumber, (float) rowNumber, null); return planarImage; }
private static int getSample(int pixelX, int pixelY, PlanarImage image) { final int x = image.getMinX() + pixelX; final int y = image.getMinY() + pixelY; final int tileX = image.XToTileX(x); final int tileY = image.YToTileY(y); final Raster data = image.getTile(tileX, tileY); return data.getSample(x, y, 0); } }
private static double getSampleDouble(int pixelX, int pixelY, PlanarImage image) { final int x = image.getMinX() + pixelX; final int y = image.getMinY() + pixelY; final int tileX = image.XToTileX(x); final int tileY = image.YToTileY(y); final Raster data = image.getTile(tileX, tileY); return data.getSampleDouble(x, y, 0); } }
private static double getSampleDouble(int pixelX, int pixelY, PlanarImage image) { final int x = image.getMinX() + pixelX; final int y = image.getMinY() + pixelY; final int tileX = image.XToTileX(x); final int tileY = image.YToTileY(y); final Raster data = image.getTile(tileX, tileY); return data.getSampleDouble(x, y, 0); }
private static int getSample(int pixelX, int pixelY, PlanarImage image) { final int x = image.getMinX() + pixelX; final int y = image.getMinY() + pixelY; final int tileX = image.XToTileX(x); final int tileY = image.YToTileY(y); final Raster data = image.getTile(tileX, tileY); return data.getSample(x, y, 0); }
protected PlanarImage createL1bTileImage(String tileId, int level) { VirtualPath imagePath = tileBandInfo.getTileIdToPathMap().get(tileId); PlanarImage planarImage = null; try { planarImage = S2TileOpImage.create(imagePath.getFile(), getCacheDir(), null, // tileRectangle.getLocation(), tileBandInfo.getImageLayout(), getConfig(), getModel(), getProductResolution(), level); } catch (IOException e) { e.printStackTrace(); } logger.fine(String.format("Planar image model: %s", getModel().toString())); logger.fine(String.format("Planar image created: %s %s: minX=%d, minY=%d, width=%d, height=%d\n", tileBandInfo.getBandInformation().getPhysicalBand(), tileId, planarImage.getMinX(), planarImage.getMinY(), planarImage.getWidth(), planarImage.getHeight())); return planarImage; }
private RoiAccessor buildRoiAccessor(ROI sourceROI) { if (sourceROI != null) { final PlanarImage roiImage = sourceROI.getAsImage(); final RandomIter roiIter = RandomIterFactory.create(roiImage, null); final int minRoiX = roiImage.getMinX(); final int minRoiY = roiImage.getMinY(); final int roiW = roiImage.getWidth(); final int roiH = roiImage.getHeight(); return new RoiAccessor(roiIter, sourceROI, roiImage, minRoiX, minRoiY, roiW, roiH); } return null; }
private RoiAccessor buildRoiAccessor(boolean threshold) { if (threshold) { if (thresholdRoi != null) { final PlanarImage roiImage = getROIThresholdImage(); final RandomIter roiIter = RandomIterFactory.create(roiImage, null, TILE_CACHED, ARRAY_CALC); final int minRoiX = roiImage.getMinX(); final int minRoiY = roiImage.getMinY(); final int roiW = roiImage.getWidth(); final int roiH = roiImage.getHeight(); return new RoiAccessor(roiIter, thresholdRoi, roiImage, minRoiX, minRoiY, roiW, roiH); } } else { if (sourceROI != null) { final PlanarImage roiImage = getROIImage(); final RandomIter roiIter = RandomIterFactory.create(roiImage, null, TILE_CACHED, ARRAY_CALC); final int minRoiX = roiImage.getMinX(); final int minRoiY = roiImage.getMinY(); final int roiW = roiImage.getWidth(); final int roiH = roiImage.getHeight(); return new RoiAccessor(roiIter, sourceROI, roiImage, minRoiX, minRoiY, roiW, roiH); } } return null; }
static void accumulateTile(StxOp op, PlanarImage dataImage, PlanarImage maskImage, PixelAccessor dataAccessor, PixelAccessor maskAccessor, int tileX, int tileY) { final Raster dataTile = dataImage.getTile(tileX, tileY); if (!(dataTile instanceof NoDataRaster)) { // data and mask image might not have the same tile size // --> we can not use the tile index of the one for the other, so we use the bounds final Raster maskTile = maskImage != null ? maskImage.getData(dataTile.getBounds()) : null; final Rectangle rect = new Rectangle(dataImage.getMinX(), dataImage.getMinY(), dataImage.getWidth(), dataImage.getHeight()) .intersection(dataTile.getBounds()); final UnpackedImageData dataPixels = dataAccessor.getPixels(dataTile, rect, dataImage.getSampleModel().getDataType(), false); final UnpackedImageData maskPixels = maskAccessor != null ? maskAccessor.getPixels(maskTile, rect, DataBuffer.TYPE_BYTE, false) : null; op.accumulateData(dataPixels, maskPixels); } }
ImageLayout layout = new ImageLayout(); layout.setMinX(alphaArray[i].getMinX()); layout.setMinY(alphaArray[i].getMinY()); layout.setWidth(alphaArray[i].getWidth()); layout.setHeight(alphaArray[i].getHeight());