/** * 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; }
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; } }
maskDataByte = new byte[ditherMask.length][]; for (int i = 0; i < maskDataByte.length; i++) { float[] maskData = ditherMask[i].getKernelData(); maskDataByte[i] = new byte[maskData.length]; for (int j = 0; j < maskData.length; j++) { maskDataInt = new int[ditherMask.length][]; for (int i = 0; i < maskDataInt.length; i++) { float[] maskData = ditherMask[i].getKernelData(); maskDataInt[i] = new int[maskData.length]; for (int j = 0; j < maskData.length; j++) { maskDataLong = new long[ditherMask.length][]; for (int i = 0; i < maskDataLong.length; i++) { float[] maskData = ditherMask[i].getKernelData(); maskDataLong[i] = new long[maskData.length]; for (int j = 0; j < maskData.length; j++) { maskDataFloat = new float[ditherMask.length][]; for (int i = 0; i < maskDataFloat.length; i++) { maskDataFloat[i] = ditherMask[i].getKernelData();
maskDataByte = new byte[ditherMask.length][]; for (int i = 0; i < maskDataByte.length; i++) { float[] maskData = ditherMask[i].getKernelData(); maskDataByte[i] = new byte[maskData.length]; for (int j = 0; j < maskData.length; j++) { maskDataInt = new int[ditherMask.length][]; for (int i = 0; i < maskDataInt.length; i++) { float[] maskData = ditherMask[i].getKernelData(); maskDataInt[i] = new int[maskData.length]; for (int j = 0; j < maskData.length; j++) { maskDataLong = new long[ditherMask.length][]; for (int i = 0; i < maskDataLong.length; i++) { float[] maskData = ditherMask[i].getKernelData(); maskDataLong[i] = new long[maskData.length]; for (int j = 0; j < maskData.length; j++) { maskDataFloat = new float[ditherMask.length][]; for (int i = 0; i < maskDataFloat.length; i++) { maskDataFloat[i] = ditherMask[i].getKernelData();
float[] data = kernel.getKernelData(); int w = kernel.getWidth(); int h = kernel.getHeight();
float[] data = kernel.getKernelData(); int w = kernel.getWidth(); int h = kernel.getHeight();
float[] data = kernel.getKernelData(); int w = kernel.getWidth(); int h = kernel.getHeight();
float[] data = kernel.getKernelData(); int w = kernel.getWidth(); int h = kernel.getHeight();
float data[] = kernel.getKernelData(); final int w = kernel.getWidth(); final int h = kernel.getHeight();
float data[] = kernel.getKernelData(); final int w = kernel.getWidth(); final int h = kernel.getHeight();
/** * 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; }
/** * 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; }
return false; float[] kernelData = ditherMask[band].getKernelData(); for (int i = 0; i < kernelData.length; i++) { if (kernelData[i] < 0.0F || kernelData[i] > 1.0) {
/** * Create a copy of the input kernel with element values * standardized to sum to 1.0. The input kernel's * dimensions and location of the key element are retained * by the new kernel. * * @param kernel the input kernel * @return a new KernelJAI object */ public static KernelJAI standardize(KernelJAI kernel) { float[] data = kernel.getKernelData(); float sum = 0f; for (float f : data) { sum += f; } for (int i = 0; i < data.length; i++) { data[i] /= sum; } return new KernelJAI( kernel.getWidth(), kernel.getHeight(), kernel.getXOrigin(), kernel.getYOrigin(), data); }
return false; float[] kernelData = ditherMask[band].getKernelData(); for (int i = 0; i < kernelData.length; i++) { if (kernelData[i] < 0.0F || kernelData[i] > 1.0) {
/** * Create a copy of the input kernel with element values * standardized to sum to 1.0. The input kernel's * dimensions and location of the key element are retained * by the new kernel. * * @param kernel the input kernel * @return a new KernelJAI object */ public static KernelJAI standardize(KernelJAI kernel) { float[] data = kernel.getKernelData(); float sum = 0f; for (float f : data) { sum += f; } for (int i = 0; i < data.length; i++) { data[i] /= sum; } return new KernelJAI( kernel.getWidth(), kernel.getHeight(), kernel.getXOrigin(), kernel.getYOrigin(), data); }
/** * Create a copy of the input kernel with element values * standardized to sum to 1.0. The input kernel's * dimensions and location of the key element are retained * by the new kernel. * * @param kernel the input kernel * @return a new KernelJAI object */ public static KernelJAI standardize(KernelJAI kernel) { float[] data = kernel.getKernelData(); float sum = 0f; for (float f : data) { sum += f; } for (int i = 0; i < data.length; i++) { data[i] /= sum; } return new KernelJAI( kernel.getWidth(), kernel.getHeight(), kernel.getXOrigin(), kernel.getYOrigin(), data); }
/** * Create a copy of the input kernel with element values * standardized to sum to 1.0. The input kernel's * dimensions and location of the key element are retained * by the new kernel. * * @param kernel the input kernel * @return a new KernelJAI object */ public static KernelJAI standardize(KernelJAI kernel) { float[] data = kernel.getKernelData(); float sum = 0f; for (float f : data) { sum += f; } for (int i = 0; i < data.length; i++) { data[i] /= sum; } return new KernelJAI( kernel.getWidth(), kernel.getHeight(), kernel.getXOrigin(), kernel.getYOrigin(), data); }
final float[] data = kernel.getKernelData(); int valid = 0; for (int index = 0; index < data.length; index++) {
public Convolve3x3OpImage(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); this.kernel = kernel; if ((kernel.getWidth() != 3) || (kernel.getHeight() != 3) || (kernel.getXOrigin() != 1) || (kernel.getYOrigin() != 1)) { throw new RuntimeException(JaiI18N.getString("Convolve3x3OpImage0")); } if (sampleModel.getDataType() == DataBuffer.TYPE_BYTE) { float kdata[] = kernel.getKernelData(); float k0 = kdata[0], k1 = kdata[1], k2 = kdata[2], k3 = kdata[3], k4 = kdata[4], k5 = kdata[5], k6 = kdata[6], k7 = kdata[7], k8 = kdata[8]; for (int j = 0; j < 256; j++) { byte b = (byte) j; float f = (float) j; // noData Check tables[0][b + 128] = hasNoData && noData.contains(b) ? 0.5f : k0 * f + 0.5f; tables[1][b + 128] = hasNoData && noData.contains(b) ? 0 : k1 * f; tables[2][b + 128] = hasNoData && noData.contains(b) ? 0 : k2 * f; tables[3][b + 128] = hasNoData && noData.contains(b) ? 0 : k3 * f; tables[4][b + 128] = hasNoData && noData.contains(b) ? 0 : k4 * f; tables[5][b + 128] = hasNoData && noData.contains(b) ? 0 : k5 * f; tables[6][b + 128] = hasNoData && noData.contains(b) ? 0 : k6 * f; tables[7][b + 128] = hasNoData && noData.contains(b) ? 0 : k7 * f; tables[8][b + 128] = hasNoData && noData.contains(b) ? 0 : k8 * f; } } }