/** * Stop gap measure to get a ROI that can scale up to massive images, until ROIGeometry gets * fixed to be a good ROIShape replacement * * @param theGeom * @return */ private static ROI getAsROI(Geometry theGeom) { org.locationtech.jts.geom.Envelope env = theGeom.getEnvelopeInternal(); int x = (int) Math.floor(env.getMinX()); int y = (int) Math.floor(env.getMinY()); int w = (int) Math.ceil(env.getMaxX()) - x; int h = (int) Math.ceil(env.getMaxY()) - y; ParameterBlockJAI pb = new ParameterBlockJAI("VectorBinarize"); pb.setParameter("minx", x); pb.setParameter("miny", y); pb.setParameter("width", w); pb.setParameter("height", h); pb.setParameter("geometry", PreparedGeometryFactory.prepare(theGeom)); pb.setParameter("antiAliasing", true); RenderedImage roiImage = JAI.create("VectorBinarize", pb, null); return new ROI(roiImage); } }
@Override protected void handleJAIEXTParams(ParameterBlockJAI jaiParams, ParameterValueGroup params) { GridCoverage2D source = (GridCoverage2D) params.parameter("source0").getValue(); // Handle ROI and NoData handleROINoDataInternal(jaiParams, source, "ShadedRelief", 0, 1); // Get some values from system props for (String paramName : CUSTOMIZABLE_PARAMS) { String propName = STATS_PROPERTY + "." + paramName; String propVal = System.getProperty(propName); if (propVal != null) { jaiParams.setParameter(paramName, propVal); } } }
@Override protected ParameterBlockJAI prepareParameters(ParameterValueGroup parameters) { ParameterBlockJAI block = super.prepareParameters(parameters); block.setParameter("lowValue", parameters.parameter("lowValue").getValue()); block.setParameter("highValue", parameters.parameter("highValue").getValue()); block.setParameter("numBins", parameters.parameter("numBins").getValue()); if (JAIExt.isJAIExtOperation(STATS)) { handleJAIEXTParams(block, parameters); } return block; }
public static RenderedOp create(RenderedImage source0, FillType type, RenderingHints hints) { ParameterBlockJAI pb = new ParameterBlockJAI("TransparencyFill", RenderedRegistryMode.MODE_NAME); pb.setSource("source0", source0); pb.setParameter("type", type); return JAI.create("TransparencyFill", pb, hints); } }
/** * Loads an image using the provided file name and the {@linkplain #getRenderingHints current * hints}, which are used to control caching and layout. * * @param source Filename of the source image to read. * @param imageChoice Image index in multipage images. * @param readMatadata If {@code true}, metadata will be read. */ public final void load(final String source, final int imageChoice, final boolean readMetadata) { final ParameterBlockJAI pbj = new ParameterBlockJAI("ImageRead"); pbj.setParameter("Input", source) .setParameter("ImageChoice", Integer.valueOf(imageChoice)) .setParameter("ReadMetadata", Boolean.valueOf(readMetadata)) .setParameter("VerifyInput", Boolean.TRUE); image = JAI.create("ImageRead", pbj, getRenderingHints()); }
private RenderedImage mosaicHeterogeneousImages(List<ImageInTile> sources) { // at the time of writing, only JAI-EXT mosaic can handle a mix of different // color models, we need to use it explicitly RenderedImage image; final ParameterBlockJAI pb = new ParameterBlockJAI(new it.geosolutions.jaiext.mosaic.MosaicDescriptor()); for (ImageInTile it : sources) { if (it.posx != 0 || it.posy != 0) { ImageWorker iw = new ImageWorker(it.image); iw.translate( it.posx, it.posy, Interpolation.getInstance(Interpolation.INTERP_NEAREST)); RenderedImage translated = iw.getRenderedImage(); pb.addSource(translated); } else { pb.addSource(it.image); } } pb.setParameter("mosaicType", MosaicDescriptor.MOSAIC_TYPE_OVERLAY); pb.setParameter("sourceAlpha", null); pb.setParameter("sourceROI", null); pb.setParameter("sourceThreshold", null); pb.setParameter("backgroundValues", new double[] {0}); pb.setParameter("nodata", null); RenderingHints hints = new Hints(JAI.getDefaultInstance().getRenderingHints()); hints.putAll(GeoTools.getDefaultHints()); image = new MosaicRIF().create(pb, hints); return image; }
block.setParameter("noData", nodata); block.setParameter("transformations", tr); block.setParameter("roi", roi); block.setParameter( "destinationNoData", nodata[getIndex(parameters)].getMin().doubleValue());
block.setParameter("xPeriod", Integer.valueOf((int) transformedEnv.getWidth())); block.setParameter("yPeriod", Integer.valueOf((int) transformedEnv.getHeight())); convertPolygon(roiInput, worldToGridTransform); block.setParameter("roi", new ROIShape(shapePolygon));
pbj.setParameter("stats", stats.toArray(new Statistic[stats.size()])); pbj.setParameter("bands", new Integer[] {band}); pbj.setParameter("ranges", ranges); pbj.setParameter("rangesType", Range.Type.INCLUDE); pbj.setParameter("rangeLocalStats", true);
pb.setParameter("roi", CoverageUtilities.prepareROI(roi, mt2D)); pb.setParameter("band", band); final ArrayList<Double> elements = new ArrayList<Double>(levels.length); for (double level : levels) elements.add(level); pb.setParameter("levels", elements); } else { pb.setParameter("interval", interval); pb.setParameter("simplify", simplify); pb.setParameter("smooth", smooth); pb.setParameter("nodata", noDataList);
pb.setParameter("roi", CoverageUtilities.prepareROI(roi, mt2D)); pb.setParameter("band", band); pb.setParameter("outsideValues", outsideValues); if (insideEdges != null) { pb.setParameter("insideEdges", insideEdges);
block.setParameter("roilist", outputList); block.setParameter("mask", maskROI); } else { throw new IllegalArgumentException("Mask is outside the Coverage Envelope");
pbjImageWrite.setParameter("Output", outstream); pbjImageWrite.setParameter("VerifyOutput", Boolean.FALSE); pbjImageWrite.setParameter("Format", extension); JAI.create("ImageWrite", pbjImageWrite); outstream.flush();
public RenderedOp create(RenderedImage source0, ColorMapTransform domain1D, Integer bandIndex, ROI roi, Range nodata, RenderingHints hints) { ParameterBlockJAI pb = new ParameterBlockJAI(RasterClassifierOpImage.OPERATION_NAME, RenderedRegistryMode.MODE_NAME); // Setting source pb.setSource(source0, 0); // Setting parameters pb.setParameter("Domain1D", domain1D); pb.setParameter("bandIndex", bandIndex); pb.setParameter("roi", roi); pb.setParameter("nodata", nodata); return JAI.create(RasterClassifierOpImage.OPERATION_NAME, pb, hints); } }
@Override protected ParameterBlockJAI prepareParameters(ParameterValueGroup parameters) { ParameterBlockJAI block = super.prepareParameters(parameters); block.setParameter("lowValue", parameters.parameter("lowValue").getValue()); block.setParameter("highValue", parameters.parameter("highValue").getValue()); block.setParameter("numBins", parameters.parameter("numBins").getValue()); return block; } }
protected PlanarImage scaleUnit(PlanarImage image) { final RenderingHints hints = new RenderingHints(JAI.KEY_BORDER_EXTENDER, BorderExtender.createInstance(BorderExtender.BORDER_ZERO)); final ParameterBlockJAI pb = new ParameterBlockJAI("DivideByConst", RenderedRegistryMode.MODE_NAME); pb.setSource("source0", image); pb.setParameter("constants", new double[] { scaleArea }); return JAI.create("DivideByConst", pb, hints); }
private RenderedOp doOp(RenderedImage srcImg, RangeLookupTable table, ROI roi, Double defaultValue) { ParameterBlockJAI pb = new ParameterBlockJAI("RLookup"); pb.setSource("source0", srcImg); pb.setParameter("table", table); pb.setParameter("roi", roi); pb.setParameter("default", defaultValue); return JAI.create("RLookup", pb); }
@Test public void createSequentialImage() throws Exception { ParameterBlockJAI pb = new ParameterBlockJAI("Jiffle"); String script = "dest = y() * width() + x();" ; pb.setParameter("script", script); pb.setParameter("destName", "dest"); Rectangle bounds = new Rectangle(0, 0, WIDTH, WIDTH); pb.setParameter("destBounds", bounds); RenderedOp op = JAI.create("Jiffle", pb); RenderedImage result = op.getRendering(); assertResult(result, script); }
/** * Applies the operation and tests the result with the expected one, using checksum. */ @Test public void testOnIndexed() { loadSampleImage(SampleImage.INDEXED); final ParameterBlockJAI parameters = new ParameterBlockJAI(SilhouetteMask.OPERATION_NAME); parameters.setParameter("background", new double[][] {{255}}); applyUnary(parameters, 3206331653L); showCurrentImage("testOnIndexed"); } }
@Test public void getMissingProperty() { RenderedImage image = createImage(); ParameterBlockJAI pb = new ParameterBlockJAI(new ClassBreaksDescriptor()); pb.addSource(image); pb.setParameter("method", ClassificationMethod.QUANTILE); pb.setParameter("numClasses", 5); // raw creation like in CoverageClassStats, otherwise the issue gets masked by JAI wrappers RenderedImage op = new ClassBreaksRIF().create(pb, null); // used to NPE here Object roi = op.getProperty("ROI"); assertEquals(Image.UndefinedProperty, roi); }