/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static int maxAbs( GrayS8 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static int maxAbs( InterleavedS16 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width*input.numBands , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static long maxAbs( InterleavedS64 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width*input.numBands , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static int maxAbs( InterleavedS32 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width*input.numBands , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static int maxAbs( GrayS16 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static long maxAbs( GrayS64 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static int maxAbs( GrayS32 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static double maxAbs( InterleavedF64 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width*input.numBands , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static int maxAbs( InterleavedS8 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width*input.numBands , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static float maxAbs( GrayF32 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static float maxAbs( InterleavedF32 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width*input.numBands , input.stride ); }
/** * Returns the maximum element value. * * @param input Input image. Not modified. * @return Maximum pixel value. */ public static double maxAbs( GrayF64 input ) { return maxAbs( input.data, input.startIndex, input.height, input.width , input.stride ); }
@Override protected Number computeThreshold( GrayF32 subband ) { // the maximum magnitude coefficient is used to normalize all the other coefficients // and reduce numerical round-off error float max = ImageStatistics.maxAbs(subband); float varianceY = 0; for( int y = 0; y < subband.height; y++ ) { int index = subband.startIndex + subband.stride*y; int end = index + subband.width; for( ;index < end; index++ ) { float v = subband.data[index]/max; varianceY += v*v; } } // undo normalization. // these coefficients are modeled as being zero mean, so the variance can be computed this way varianceY = (varianceY/(subband.width*subband.height))*max*max; // signal standard deviation float inner = varianceY-noiseVariance; if( inner < 0 ) return Float.POSITIVE_INFINITY; else return noiseVariance/(float)Math.sqrt(inner); }
public static BufferedImage graySign(GrayF32 src, BufferedImage dst, float maxAbsValue) { dst = checkInputs(src, dst); if (maxAbsValue < 0) maxAbsValue = ImageStatistics.maxAbs(src); for (int y = 0; y < src.height; y++) { for (int x = 0; x < src.width; x++) { float v = src.get(x, y); int rgb = 127 + (int) (127 * v / maxAbsValue); dst.setRGB(x, y, rgb << 16 | rgb << 8 | rgb); } } return dst; }
public static BufferedImage graySign(GrayF32 src, BufferedImage dst, float maxAbsValue) { dst = checkInputs(src, dst); if (maxAbsValue < 0) maxAbsValue = ImageStatistics.maxAbs(src); for (int y = 0; y < src.height; y++) { for (int x = 0; x < src.width; x++) { float v = src.get(x, y); int rgb = 127 + (int) (127 * v / maxAbsValue); dst.setRGB(x, y, rgb << 16 | rgb << 8 | rgb); } } return dst; }
/** * Renders the image using its gray magnitude * * @param input (Input) Image image * @param maxAbsValue (Input) Largest absolute value of a pixel in the image * @param output (Output) Bitmap ARGB_8888 image. * @param storage Optional working buffer for Bitmap image. */ public static void grayMagnitude(GrayF32 input , float maxAbsValue , Bitmap output , byte[] storage) { shapeShape(input, output); if( storage == null ) storage = declareStorage(output,null); if( maxAbsValue < 0 ) maxAbsValue = ImageStatistics.maxAbs(input); int indexDst = 0; for( int y = 0; y < input.height; y++ ) { int indexSrc = input.startIndex + y*input.stride; for( int x = 0; x < input.width; x++ ) { byte gray = (byte)(255f*Math.abs(input.data[ indexSrc++ ])/maxAbsValue); storage[indexDst++] = gray; storage[indexDst++] = gray; storage[indexDst++] = gray; storage[indexDst++] = (byte) 0xFF; } } output.copyPixelsFromBuffer(ByteBuffer.wrap(storage)); }
/** * Renders the image using its gray magnitude * * @param input (Input) Image image * @param maxAbsValue (Input) Largest absolute value of a pixel in the image * @param output (Output) Bitmap ARGB_8888 image. * @param storage Optional working buffer for Bitmap image. */ public static void grayMagnitude(GrayS32 input , int maxAbsValue , Bitmap output , byte[] storage) { shapeShape(input, output); if( storage == null ) storage = declareStorage(output,null); if( maxAbsValue < 0 ) maxAbsValue = ImageStatistics.maxAbs(input); int indexDst = 0; for( int y = 0; y < input.height; y++ ) { int indexSrc = input.startIndex + y*input.stride; for( int x = 0; x < input.width; x++ ) { byte gray = (byte)(255*Math.abs(input.data[ indexSrc++ ])/maxAbsValue); storage[indexDst++] = gray; storage[indexDst++] = gray; storage[indexDst++] = gray; storage[indexDst++] = (byte) 0xFF; } } output.copyPixelsFromBuffer(ByteBuffer.wrap(storage)); }
@Override public void process(GrayU8 input) { ConvertImage.convert(input, grayF); PixelMath.divide(grayF,255.0f,grayF); dft.forward(grayF, transform); DiscreteFourierTransformOps.shiftZeroFrequency(transform, true); DiscreteFourierTransformOps.magnitude(transform, grayF); PixelMath.log(grayF,grayF); float max = ImageStatistics.maxAbs(grayF); PixelMath.multiply(grayF, 255f / max, grayF); ConvertBitmap.grayToBitmap(grayF, bitmap, bitmapTmp); } }
private double computeEdgeMSE(GrayF32 imageInv) { GrayF32 edge = new GrayF32(imageInv.width,imageInv.height); LaplacianEdge.process(image,edge); PixelMath.abs(edge,edge); float max = ImageStatistics.maxAbs(edge); PixelMath.divide(edge,max,edge); float total = ImageStatistics.sum(edge); double error = 0; for( int y = 0; y < image.height; y++ ) { for( int x = 0; x < image.width; x++ ) { double w = edge.get(x,y)/total; double e = (image.get(x,y)-imageInv.get(x,y)); error += (e*e)*w; } } return error; }
@Override public void processImage(int sourceID, long frameID, BufferedImage buffered, ImageBase input) { original = ConvertBufferedImage.checkCopy(buffered, original); T gray = (T) input; deriv.setInput(gray); D derivX = deriv.getDerivative(true); D derivY = deriv.getDerivative(false); D derivXX = deriv.getDerivative(true, true); D derivYY = deriv.getDerivative(false, false); D derivXY = deriv.getDerivative(true, false); GrayF32 featureImg; synchronized (lockAlgorithm) { detector.process(gray, derivX, derivY, derivXX, derivYY, derivXY); featureImg = detector.getIntensity(); VisualizeImageData.colorizeSign(featureImg, visualized, ImageStatistics.maxAbs(featureImg)); synchronized (lockCorners) { minimums.reset(); minimums.addAll(detector.getMinimums()); maximums.reset(); maximums.addAll(detector.getMaximums()); } } SwingUtilities.invokeLater(() -> { changeViewImage(); imagePanel.repaint(); }); }