public static void convolve(Kernel2D_S32 kernel , InterleavedU8 src , InterleavedS32 dst ) { final int[] dataKernel = kernel.data; final byte[] dataSrc = src.data; final int[] dataDst = dst.data; final int width = src.getWidth(); final int height = src.getHeight(); final int numBands = src.getNumBands(); int offsetL = kernel.offset; int offsetR = kernel.width-kernel.offset-1; for( int y = offsetL; y < height-offsetR; y++ ) { int indexDst = dst.startIndex + y*dst.stride+offsetL*numBands; for( int x = offsetL; x < width-offsetR; x++ ) { int indexSrcStart = src.startIndex + (y-offsetL)*src.stride + (x-offsetL)*numBands; for (int band = 0; band < numBands; band++) { int total = 0; int indexKer = 0; for( int ki = 0; ki < kernel.width; ki++ ) { int indexSrc = indexSrcStart+ki*src.stride + band; for( int kj = 0; kj < kernel.width; kj++ ) { total += (dataSrc[indexSrc] & 0xFF)* dataKernel[indexKer++]; indexSrc += numBands; } } dataDst[indexDst++] = total; } } } }
public static void convolve(Kernel2D_S32 kernel , InterleavedU8 src , InterleavedI16 dst ) { final int[] dataKernel = kernel.data; final byte[] dataSrc = src.data; final short[] dataDst = dst.data; final int width = src.getWidth(); final int height = src.getHeight(); final int numBands = src.getNumBands(); int offsetL = kernel.offset; int offsetR = kernel.width-kernel.offset-1; for( int y = offsetL; y < height-offsetR; y++ ) { int indexDst = dst.startIndex + y*dst.stride+offsetL*numBands; for( int x = offsetL; x < width-offsetR; x++ ) { int indexSrcStart = src.startIndex + (y-offsetL)*src.stride + (x-offsetL)*numBands; for (int band = 0; band < numBands; band++) { int total = 0; int indexKer = 0; for( int ki = 0; ki < kernel.width; ki++ ) { int indexSrc = indexSrcStart+ki*src.stride + band; for( int kj = 0; kj < kernel.width; kj++ ) { total += (dataSrc[indexSrc] & 0xFF)* dataKernel[indexKer++]; indexSrc += numBands; } } dataDst[indexDst++] = (short)total; } } } }
public static void convolve(Kernel2D_S32 kernel , InterleavedU8 src , InterleavedI8 dst , int divisor ) { final int[] dataKernel = kernel.data; final byte[] dataSrc = src.data; final byte[] dataDst = dst.data; final int width = src.getWidth(); final int height = src.getHeight(); final int numBands = src.getNumBands(); final int halfDivisor = divisor/2; int offsetL = kernel.offset; int offsetR = kernel.width-kernel.offset-1; for( int y = offsetL; y < height-offsetR; y++ ) { int indexDst = dst.startIndex + y*dst.stride+offsetL*numBands; for( int x = offsetL; x < width-offsetR; x++ ) { int indexSrcStart = src.startIndex + (y-offsetL)*src.stride + (x-offsetL)*numBands; for (int band = 0; band < numBands; band++) { int total = 0; int indexKer = 0; for( int ki = 0; ki < kernel.width; ki++ ) { int indexSrc = indexSrcStart+ki*src.stride + band; for( int kj = 0; kj < kernel.width; kj++ ) { total += (dataSrc[indexSrc] & 0xFF)* dataKernel[indexKer++]; indexSrc += numBands; } } dataDst[indexDst++] = (byte)((total+halfDivisor)/divisor); } } } }
final int height = src.getHeight(); final int numBands = src.getNumBands(); final int[] total = new int[ numBands ];
final int height = src.getHeight(); final int numBands = dst.getNumBands(); final int total[] = new int[ numBands ];
public static void vertical(Kernel1D_S32 kernel, InterleavedU8 input, InterleavedI8 output ) { final int offset = kernel.getOffset(); final int width = input.getWidth(); final int height = input.getHeight(); final int numBands = input.getNumBands(); final int[] pixel = new int[ numBands ]; final int[] total = new int[ numBands ]; for (int y = 0; y < height; y++) { for( int x = 0; x < width; x++ ) { Arrays.fill(total,0); int weight = 0; int startY = y - offset; int endY = startY + kernel.getWidth(); if( startY < 0 ) startY = 0; if( endY > height ) endY = height; for( int i = startY; i < endY; i++ ) { int v = kernel.get(i-y+offset); input.get(x,i, pixel); for (int band = 0; band < numBands; band++) { total[band] += pixel[band]*v; } weight += v; } for (int band = 0; band < numBands; band++) { total[band] = (total[band]+weight/2)/weight; } output.set(x,y, total); } } }
final int height = input.getHeight(); final int numBands = input.getNumBands();
final int height = input.getHeight(); final int numBands = input.getNumBands();