@Override public Number get(int x, int y) { return image.get(x,y); }
public static void vertical(Kernel1D_F64 kernel, GrayF64 input, GrayF64 output ) { final int offset = kernel.getOffset(); final int width = input.getWidth(); final int height = input.getHeight(); for (int y = 0; y < height; y++) { for( int x = 0; x < width; x++ ) { double total = 0; double 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++ ) { double v = kernel.get(i-y+offset); total += input.get(x,i)*v; weight += v; } output.set(x,y, total/weight ); } } }
private static BufferedImage grayMagnitude(GrayF64 src, BufferedImage dst, double maxAbsValue) { for (int y = 0; y < src.height; y++) { for (int x = 0; x < src.width; x++) { double v = Math.abs(src.get(x, y)); int rgb = (int) (255 * v / maxAbsValue); dst.setRGB(x, y, rgb << 16 | rgb << 8 | rgb); } } return dst; }
public static void horizontal(Kernel1D_F64 kernel, GrayF64 input, GrayF64 output ) { final int offset = kernel.getOffset(); final int width = input.getWidth(); final int height = input.getHeight(); for (int y = 0; y < height; y++) { for( int x = 0; x < width; x++ ) { double total = 0; double weight = 0; int startX = x - offset; int endX = startX+kernel.getWidth(); if( startX < 0 ) startX = 0; if( endX > width ) endX = width; for( int j = startX; j < endX; j++ ) { double v = kernel.get(j-x+offset); total += input.get(j,y)*v; weight += v; } output.set(x,y, total/weight ); } } }
private static BufferedImage grayMagnitude(GrayF64 src, BufferedImage dst, double maxAbsValue) { for (int y = 0; y < src.height; y++) { for (int x = 0; x < src.width; x++) { double v = Math.abs(src.get(x, y)); int rgb = (int) (255 * v / maxAbsValue); dst.setRGB(x, y, rgb << 16 | rgb << 8 | rgb); } } return dst; }
public static void convolve(Kernel2D_F64 kernel, GrayF64 input, GrayF64 output ) { final int offset = kernel.getOffset(); final int width = input.getWidth(); final int height = input.getHeight(); for (int y = 0; y < height; y++) { for( int x = 0; x < width; x++ ) { int startX = x - offset; int endX = startX + kernel.getWidth(); if( startX < 0 ) startX = 0; if( endX > width ) endX = width; int startY = y - offset; int endY = startY + kernel.getWidth(); if( startY < 0 ) startY = 0; if( endY > height ) endY = height; double total = 0; double weight = 0; for( int i = startY; i < endY; i++ ) { for( int j = startX; j < endX; j++ ) { double v = kernel.get(j-x+offset,i-y+offset); total += input.get(j,i)*v; weight += v; } } output.set(x,y, total/weight ); } } }
public static void print(GrayF64 a) { for (int y = 0; y < a.height; y++) { for (int x = 0; x < a.width; x++) { System.out.printf("%6.2f ", a.get(x, y)); } System.out.println(); } System.out.println(); }
public static void circshift(GrayF64 a, GrayF64 b ) { int w2 = a.width/2; int h2 = b.height/2; for( int y = 0; y < a.height; y++ ) { int yy = (y+h2)%a.height; for( int x = 0; x < a.width; x++ ) { int xx = (x+w2)%a.width; b.set( xx , yy , a.get(x,y)); } } }
public double get( int x , int y ) { if( image.isInBounds(x,y) ) return image.get(x,y); return getOutside( x , y ); }
@Override public double getOutside(int x, int y) { return image.get( colWrap.getIndex(x) , rowWrap.getIndex(y) ); }
public static double get(ImageGray img, int x, int y) { if (img instanceof GrayI8) { return ((GrayI8) img).get(x, y); } else if (img instanceof GrayI16) { return ((GrayI16) img).get(x, y); } else if (img instanceof GrayS32) { return ((GrayS32) img).get(x, y); } else if (img instanceof GrayF32) { return ((GrayF32) img).get(x, y); } else if (img instanceof GrayF64) { return ((GrayF64) img).get(x, y); } else if (img instanceof GrayS64) { return ((GrayS64) img).get(x, y); } else { throw new IllegalArgumentException("Unknown or incompatible image type: " + img.getClass().getSimpleName()); } }