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++) {
float[] data = kernel.getKernelData(); int w = kernel.getWidth(); int h = kernel.getHeight(); StringBuilder sb = new StringBuilder();
/** * 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); }
/** * 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); }
final int h = kernel.getHeight();
final int h = kernel.getHeight();
/** * 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(); }
/** * 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; }
/** * 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); }
/** * 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); }
double sumV = 0; final int width = kernel.getWidth(); final int height = kernel.getHeight();
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; } } } }
final KernelJAI mask1 = (KernelJAI) block.getObjectParameter("Mask1"); final KernelJAI mask2 = (KernelJAI) block.getObjectParameter("Mask2"); final double size = (mask1.getWidth() + mask1.getHeight() + mask2.getWidth() + mask2.getHeight()) / 4.0; double factor = getNormalizationFactor(mask1, mask2) / (size-1); if (factor>0 && !Double.isInfinite(factor)) {
final KernelJAI mask1 = (KernelJAI) block.getObjectParameter("Mask1"); final KernelJAI mask2 = (KernelJAI) block.getObjectParameter("Mask2"); final double size = (mask1.getWidth() + mask1.getHeight() + mask2.getWidth() + mask2.getHeight()) / 4.0; double factor = getNormalizationFactor(mask1, mask2) / (size-1); if (factor>0 && !Double.isInfinite(factor)) {
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; } } }