/** * Divides a kernel by some number. * * @param kernel The kernel to divide. * @param denominator The factor to divide by. * @return The resulting kernel. */ private static KernelJAI divide(KernelJAI kernel, final double denominator) { if (denominator != 1) { final float[] data = kernel.getKernelData(); final int length = data.length; for (int i=0; i<length; i++) { data[i] /= denominator; } kernel = new KernelJAI(kernel.getWidth(), kernel.getHeight(), kernel.getXOrigin(), kernel.getYOrigin(), data); } return kernel; }
/** * Determines whether a kernel is the Floyd-Steinberg kernel. * * @param kernel The <code>KernelJAI</code> to examine. * @return Whether the kernel argument is the Floyd-Steinberg kernel. */ private static boolean isFloydSteinbergKernel(KernelJAI kernel) { int ky = kernel.getYOrigin(); return (kernel.getWidth() == 3 && kernel.getXOrigin() == 1 && kernel.getHeight() - ky == 2 && Math.abs(kernel.getElement(2, ky) - 7.0F / 16.0F) < FLOAT_EPSILON && Math.abs(kernel.getElement(0, ky + 1) - 3.0F / 16.0F) < FLOAT_EPSILON && Math.abs(kernel.getElement(1, ky + 1) - 5.0F / 16.0F) < FLOAT_EPSILON && Math .abs(kernel.getElement(2, ky + 1) - 1.0F / 16.0F) < FLOAT_EPSILON); }
public SeparableConvolveOpImage(RenderedImage source, BorderExtender extender, RenderingHints hints, ImageLayout l, KernelJAI kernel, ROI roi, Range noData, double destinationNoData, boolean skipNoData) { super(source, extender, hints, l, kernel, roi, noData, destinationNoData, skipNoData); // TODO Auto-generated constructor stub this.kernel = kernel; kw = kernel.getWidth(); kh = kernel.getHeight(); kx = kernel.getXOrigin(); ky = kernel.getYOrigin(); hValues = kernel.getHorizontalKernelData(); vValues = kernel.getVerticalKernelData(); if (sampleModel.getDataType() == DataBuffer.TYPE_BYTE) { hTables = new float[hValues.length][256]; for (int i = 0; i < hValues.length; i++) { float k = hValues[i]; for (int j = 0; j < 256; j++) { byte b = (byte)j; float f = (float)j; hTables[i][b+128] = hasNoData && noData.contains(b) ? 0 : k*f; } } } }
int maskWidth = ditherMask[0].getWidth(); int maskHeight = ditherMask[0].getHeight(); for (int band = 0; band < ditherMask.length; band++) { if (ditherMask[band].getWidth() != maskWidth || ditherMask[band].getHeight() != maskHeight) { msg.append(JaiI18N.getString("OrderedDitherDescriptor9")); return false; float[] kernelData = ditherMask[band].getKernelData(); for (int i = 0; i < kernelData.length; i++) { if (kernelData[i] < 0.0F || kernelData[i] > 1.0) {
true, extender, kernel.getLeftPadding(), kernel.getRightPadding(), kernel.getTopPadding(), kernel.getBottomPadding()); kernelW = kernel.getWidth(); kernelH = kernel.getHeight(); kernelKeyX = kernel.getXOrigin(); kernelKeyY = kernel.getYOrigin(); float[] data = kernel.getKernelData();
/** * Returns the current kernel. * * @see KernelEditor#getKernel */ public KernelJAI getKernel() { final int height = elements.length; final int width = height!=0 ? elements[0].length : 0; final float[] data = new float[width*height]; int c=0; for (int j=0; j<height; j++) { for (int i=0; i<width; i++) { data[c++] = elements[j][i]; } } return new KernelJAI(width, height, data); }
ParameterBlock pb = new ParameterBlock(); pb.addSource(gray); pb.add(kernel.getWidth()/2); pb.add(kernel.getHeight()/2); pb.add(kernel.getWidth()/2); pb.add(kernel.getHeight()/2); pb.add(extender); PlanarImage temp = JAI.create("border", pb); pb.add(-kernel.getWidth()/2); pb.add(-kernel.getHeight()/2); pb.add(-kernel.getWidth()/2); pb.add(-kernel.getHeight()/2); pb.add(extender);
boolean skipNoData = (Boolean) pb.getObjectParameter(4); kernel = kernel.getRotatedKernel(); if (kernel.getWidth() == 3 && kernel.getHeight() == 3 && kernel.getXOrigin() == 1 && kernel.getYOrigin() == 1 && dataTypeOk) { return new Convolve3x3OpImage(img, extender, hints, l, kernel, roi, nodata, destinationNoData, skipNoData);
/** * Set the kernel. The table size will be set to the specified kernel size, add all * coefficients will be copied in the table. If the specified kernel matches one of * the kernel registered with the {@link #addKernel addKernel} method, then the kernel * name and category will be updated according. * * @see KernelEditor#setKernel */ public void setKernel(final KernelJAI kernel) { final int rowCount = kernel.getHeight(); final int colCount = kernel.getWidth(); setKernelSize(rowCount, colCount); for (int j=0; j<rowCount; j++) { for (int i=0; i<colCount; i++) { elements[j][i] = kernel.getElement(i,j); } } fireTableDataChanged(); }
/** * Counts the number of active cells (those with non-zero values) in the kernel. * A round-off tolerance of 1.0e-6 is used. * * @param kernel the kernel * * @return the number of non-zero cells */ private int numActiveKernelCells(KernelJAI kernel) { final float TOL = 1.0e-6F; float[] data = kernel.getKernelData(); int n = 0; for (float cellValue : data) { if (Math.abs(cellValue) > TOL) { n++ ; } } return n; }
final float[] data = binKernel.getKernelData(); int valid = 0; for (int index = 0; index < data.length; index++) { kernel = new KernelJAI(width, width, weights); break; case Quartic: kernel = new KernelJAI(width, width, tcWeights); break;
float[] data = kernel.getKernelData(); int w = kernel.getWidth(); int h = kernel.getHeight(); StringBuilder sb = new StringBuilder();
true, extender, kernel.getLeftPadding(), kernel.getRightPadding(), kernel.getTopPadding(), kernel.getBottomPadding()); kernelData = kernel.getKernelData(); kernelActive = new boolean[kernelData.length]; for (int i = 0; i < kernelData.length; i++) { kernelW = kernel.getWidth(); kernelH = kernel.getHeight(); kernelKeyX = kernel.getXOrigin(); kernelKeyY = kernel.getYOrigin();
return new KernelJAI(size, size, key, key, data);
ParameterBlock pb = new ParameterBlock(); pb.addSource(gray); pb.add(kernel.getWidth()/2); pb.add(kernel.getHeight()/2); pb.add(kernel.getWidth()/2); pb.add(kernel.getHeight()/2); pb.add(extender); PlanarImage temp = JAI.create("border", pb); pb.add(-kernel.getWidth()/2); pb.add(-kernel.getHeight()/2); pb.add(-kernel.getWidth()/2); pb.add(-kernel.getHeight()/2); pb.add(extender);
final Map.Entry entry = (Map.Entry) it.next(); final KernelJAI kernel = (KernelJAI) entry.getValue(); if (rowCount==kernel.getHeight() && colCount==kernel.getWidth()) { for (int j=0; j<rowCount; j++) { for (int i=0; i<colCount; i++) { if (elements[j][i] != kernel.getElement(i,j)) { continue iter;
private KernelJAI getKernel(double searchRadius) { scaleArea = 0.0; // convert map unit to cell unit double cellSize = Math.max(CellSizeX, CellSizeY); int radius = (int) Math.floor(searchRadius / cellSize); // Creates a circular kernel with width 2*radius + 1 KernelJAI kernel = KernelFactory.createConstantCircle(radius, (float) cellSize); // calculate area final double cellArea = CellSizeX * CellSizeY; final float[] data = kernel.getKernelData(); int valid = 0; for (int index = 0; index < data.length; index++) { if (data[index] != 0.0) { scaleArea += cellArea; valid++; } } this.MinValue = 0.0; this.MaxValue = MaxValue * valid; return kernel; } }
/** * Divides a kernel by some number. * * @param kernel The kernel to divide. * @param denominator The factor to divide by. * @return The resulting kernel. */ private static KernelJAI divide(KernelJAI kernel, final double denominator) { if (denominator != 1) { final float[] data = kernel.getKernelData(); final int length = data.length; for (int i=0; i<length; i++) { data[i] /= denominator; } kernel = new KernelJAI(kernel.getWidth(), kernel.getHeight(), kernel.getXOrigin(), kernel.getYOrigin(), data); } return kernel; }
float[] data = kernel.getKernelData(); int w = kernel.getWidth(); int h = kernel.getHeight(); StringBuilder sb = new StringBuilder();
public ConvolveOpImage(RenderedImage source, BorderExtender extender, RenderingHints hints, ImageLayout l, KernelJAI kernel, ROI roi, Range noData, double destinationNoData, boolean skipNoData) { super(source, l, hints, true, extender, kernel.getLeftPadding(), kernel.getRightPadding(), kernel.getTopPadding(), kernel.getBottomPadding()); kw = kernel.getWidth(); kh = kernel.getHeight(); kx = kernel.getXOrigin(); ky = kernel.getYOrigin();