private static BufferedImage getGaussianBlur(int size, BufferedImage image) { KernelJAI kernel = Functions.getGaussKernel(size / 3.0); ParameterBlock pb = new ParameterBlock(); pb.addSource(image); pb.add(kernel); RenderingHints hints = new RenderingHints( JAI.KEY_BORDER_EXTENDER, BorderExtender.createInstance(BorderExtender.BORDER_COPY)); hints.add(JAIContext.noCacheHint); return JAI.create("LCSeparableConvolve", pb, hints).getAsBufferedImage(); }
public PlanarImage setFront() { if (chroma_domain == 0 && chroma_range == 0 && luma_domain == 0 && luma_range == 0) return back; PlanarImage front = back; ColorScience.LinearTransform transform = new ColorScience.YST(); double[][] rgb2yst = transform.fromRGB(back.getSampleModel().getDataType()); double[][] yst2rgb = transform.toRGB(back.getSampleModel().getDataType()); ParameterBlock pb = new ParameterBlock(); pb.addSource(back); pb.add(rgb2yst); RenderedOp ystImage = JAI.create("BandCombine", pb, null); RenderingHints mfHints = new RenderingHints( JAI.KEY_BORDER_EXTENDER, BorderExtender.createInstance(BorderExtender.BORDER_COPY)); if (chroma_domain != 0 && chroma_range != 0) { pb = new ParameterBlock(); pb.addSource(ystImage); pb.add(chroma_domain * scale); pb.add(0.02f + 0.001f * chroma_domain); // pb.add(0.1f); ystImage = JAI.create("BilateralFilter", pb, mfHints); ystImage.setProperty(JAIContext.PERSISTENT_CACHE_TAG, Boolean.TRUE); } if (luma_domain != 0 && luma_range != 0) { pb = new ParameterBlock(); pb.addSource(ystImage); pb.add(new int[] {0}); RenderedOp y = JAI.create("bandselect", pb, null); pb = new ParameterBlock(); pb.addSource(ystImage); pb.add(new int[] {1, 2}); RenderedOp cc = JAI.create("bandselect", pb, JAIContext.noCacheHint); pb = new ParameterBlock(); pb.addSource(y); pb.add((2 + luma_domain / 10f) * scale); pb.add(0.005f * luma_domain); y = JAI.create("BilateralFilter", pb, mfHints); RenderingHints layoutHints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, Functions.getImageLayout(ystImage)); pb = new ParameterBlock(); pb.addSource(y); pb.addSource(cc); layoutHints.add(JAIContext.noCacheHint); ystImage = JAI.create("BandMerge", pb, layoutHints); } pb = new ParameterBlock(); pb.addSource(ystImage); pb.add(yst2rgb); front = JAI.create("BandCombine", pb, null); front.setProperty(JAIContext.PERSISTENT_CACHE_TAG, Boolean.TRUE); return front; }