Module ij
Package ij.process

Class ByteProcessor

  • All Implemented Interfaces:
    java.lang.Cloneable
    Direct Known Subclasses:
    BinaryProcessor

    public class ByteProcessor
    extends ImageProcessor
    This is an 8-bit image and methods that operate on that image. Based on the ImageProcessor class from "KickAss Java Programming" by Tonny Espeset.
    • Field Detail

      • pixels

        protected byte[] pixels
      • snapshotPixels

        protected byte[] snapshotPixels
    • Constructor Detail

      • ByteProcessor

        public ByteProcessor​(java.awt.Image img)
        Creates a ByteProcessor from an AWT Image.
      • ByteProcessor

        public ByteProcessor​(int width,
                             int height)
        Creates a blank ByteProcessor of the specified dimensions.
      • ByteProcessor

        public ByteProcessor​(int width,
                             int height,
                             byte[] pixels)
        Creates a ByteProcessor from a byte array.
      • ByteProcessor

        public ByteProcessor​(int width,
                             int height,
                             byte[] pixels,
                             java.awt.image.ColorModel cm)
        Creates a ByteProcessor from a pixel array and IndexColorModel.
      • ByteProcessor

        public ByteProcessor​(java.awt.image.BufferedImage bi)
        Creates a ByteProcessor from a TYPE_BYTE_GRAY BufferedImage.
    • Method Detail

      • createImage

        public java.awt.Image createImage()
        Description copied from class: ImageProcessor
        Returns a copy of this image is the form of an AWT Image.
        Specified by:
        createImage in class ImageProcessor
      • getBufferedImage

        public java.awt.image.BufferedImage getBufferedImage()
        Returns this image as a BufferedImage.
        Overrides:
        getBufferedImage in class ImageProcessor
      • reset

        public void reset()
        Reset the image from snapshot.
        Specified by:
        reset in class ImageProcessor
      • swapPixelArrays

        public void swapPixelArrays()
        Swaps the pixel and snapshot (undo) arrays.
        Specified by:
        swapPixelArrays in class ImageProcessor
      • setSnapshotPixels

        public void setSnapshotPixels​(java.lang.Object pixels)
        Description copied from class: ImageProcessor
        Sets a new pixel array for the snapshot (undo) buffer.
        Specified by:
        setSnapshotPixels in class ImageProcessor
      • getSnapshotPixels

        public java.lang.Object getSnapshotPixels()
        Description copied from class: ImageProcessor
        Returns a reference to the snapshot (undo) buffer, or null.
        Specified by:
        getSnapshotPixels in class ImageProcessor
      • getPixel

        public int getPixel​(int x,
                            int y)
        Description copied from class: ImageProcessor
        Returns the value of the pixel at (x,y). For RGB images, the argb values are packed in an int. For float images, the the value must be converted using Float.intBitsToFloat(). Returns zero if either the x or y coodinate is out of range. Use getValue(x,y) to get calibrated values from 8-bit and 16-bit images, to get intensity values from RGB images and to get float values from 32-bit images.
        Specified by:
        getPixel in class ImageProcessor
        See Also:
        ImageProcessor.getValue(int, int)
      • get

        public final int get​(int x,
                             int y)
        Description copied from class: ImageProcessor
        This is a faster version of getPixel() that does not do bounds checking.
        Specified by:
        get in class ImageProcessor
      • set

        public final void set​(int x,
                              int y,
                              int value)
        Description copied from class: ImageProcessor
        This is a faster version of putPixel() that does not clip out of range values and does not do bounds checking.
        Specified by:
        set in class ImageProcessor
      • get

        public final int get​(int index)
        Specified by:
        get in class ImageProcessor
      • set

        public final void set​(int index,
                              int value)
        Specified by:
        set in class ImageProcessor
      • getf

        public final float getf​(int x,
                                int y)
        Description copied from class: ImageProcessor
        Returns the value of the pixel at (x,y) as a float. Faster than getPixelValue() but does no bounds checking and does not return calibrated values.
        Specified by:
        getf in class ImageProcessor
      • setf

        public final void setf​(int x,
                               int y,
                               float value)
        Description copied from class: ImageProcessor
        Sets the value of the pixel at (x,y) to 'value'. Does no bounds checking or clamping, making it faster than putPixel(). Due to the lack of bounds checking, (x,y) coordinates outside the image may cause an exception. Due to the lack of clamping, values outside the 0-255 range (for byte) or 0-65535 range (for short) are not handled correctly.
        Specified by:
        setf in class ImageProcessor
      • getf

        public final float getf​(int index)
        Specified by:
        getf in class ImageProcessor
      • setf

        public final void setf​(int index,
                               float value)
        Specified by:
        setf in class ImageProcessor
      • getInterpolatedPixel

        public double getInterpolatedPixel​(double x,
                                           double y)
        Uses the current interpolation method (BILINEAR or BICUBIC) to calculate the pixel value at real coordinates (x,y).
        Specified by:
        getInterpolatedPixel in class ImageProcessor
      • getPixelInterpolated

        public final int getPixelInterpolated​(double x,
                                              double y)
        Description copied from class: ImageProcessor
        Uses the current interpolation method to find the pixel value at real coordinates (x,y). For RGB images, the argb values are packed in an int. For float images, the value must be converted using Float.intBitsToFloat(). Returns zero if the (x, y) is not inside the image.
        Specified by:
        getPixelInterpolated in class ImageProcessor
      • setColor

        public void setColor​(java.awt.Color color)
        Sets the foreground drawing color.
        Specified by:
        setColor in class ImageProcessor
      • setBackgroundColor

        public void setBackgroundColor​(java.awt.Color color)
        Sets the background fill/draw color.
        Overrides:
        setBackgroundColor in class ImageProcessor
      • setValue

        public void setValue​(double value)
        Sets the default fill/draw value, where 0<=value<=255.
        Specified by:
        setValue in class ImageProcessor
      • setBackgroundValue

        public void setBackgroundValue​(double value)
        Sets the background fill value, where 0<=value<=255.
        Specified by:
        setBackgroundValue in class ImageProcessor
      • putPixelValue

        public void putPixelValue​(int x,
                                  int y,
                                  double value)
        Stores the specified real value at (x,y). Does nothing if (x,y) is outside the image boundary. Values outside the range 0-255 are clamped.
        Specified by:
        putPixelValue in class ImageProcessor
      • putPixel

        public final void putPixel​(int x,
                                   int y,
                                   int value)
        Stores the specified value at (x,y). Does nothing if (x,y) is outside the image boundary. Values outside the range 0-255 are clamped.
        Specified by:
        putPixel in class ImageProcessor
      • drawPixel

        public void drawPixel​(int x,
                              int y)
        Draws a pixel in the current foreground color.
        Specified by:
        drawPixel in class ImageProcessor
      • getPixels

        public java.lang.Object getPixels()
        Returns a reference to the byte array containing this image's pixel data. To avoid sign extension, the pixel values must be accessed using a mask (e.g. int i = pixels[j]&0xff).
        Specified by:
        getPixels in class ImageProcessor
      • setPixels

        public void setPixels​(java.lang.Object pixels)
        Description copied from class: ImageProcessor
        Sets a new pixel array for the image. The length of the array must be equal to width*height. Use setSnapshotPixels(null) to clear the snapshot buffer.
        Specified by:
        setPixels in class ImageProcessor
      • getMin

        public double getMin()
        Returns the smallest displayed pixel value.
        Specified by:
        getMin in class ImageProcessor
      • getMax

        public double getMax()
        Returns the largest displayed pixel value.
        Specified by:
        getMax in class ImageProcessor
      • setThreshold

        public void setThreshold​(double minThreshold,
                                 double maxThreshold,
                                 int lutUpdate)
        Description copied from class: ImageProcessor
        Sets the lower and upper threshold levels. The 'lutUpdate' argument can be RED_LUT, BLACK_AND_WHITE_LUT, OVER_UNDER_LUT or NO_LUT_UPDATE. Thresholding of RGB images is not supported.
        Overrides:
        setThreshold in class ImageProcessor
      • copyBits

        public void copyBits​(ImageProcessor ip,
                             int xloc,
                             int yloc,
                             int mode)
        Copies the image contained in 'ip' to (xloc, yloc) using one of the transfer modes defined in the Blitter interface.
        Specified by:
        copyBits in class ImageProcessor
      • applyTable

        public void applyTable​(int[] lut)
        Description copied from class: ImageProcessor
        Transforms the image or ROI using a lookup table. The length of the table must be 256 for byte images and 65536 for short images. RGB and float images are not supported.
        Specified by:
        applyTable in class ImageProcessor
      • convolve3x3

        public void convolve3x3​(int[] kernel)
        Description copied from class: ImageProcessor
        Convolves the image or ROI with the specified 3x3 integer convolution kernel.
        Specified by:
        convolve3x3 in class ImageProcessor
      • filter

        public void filter​(int type)
        Filters using a 3x3 neighborhood. The p1, p2, etc variables, which contain the values of the pixels in the neighborhood, are arranged as follows:
                            p1 p2 p3
                            p4 p5 p6
                            p7 p8 p9
                        
        Specified by:
        filter in class ImageProcessor
      • erode

        public void erode()
        Description copied from class: ImageProcessor
        Erodes the image or ROI using a 3x3 maximum filter. Requires 8-bit or RGB image.
        Specified by:
        erode in class ImageProcessor
      • dilate

        public void dilate()
        Description copied from class: ImageProcessor
        Dilates the image or ROI using a 3x3 minimum filter. Requires 8-bit or RGB image.
        Specified by:
        dilate in class ImageProcessor
      • erode

        public void erode​(int count,
                          int background)
      • dilate

        public void dilate​(int count,
                           int background)
      • outline

        public void outline()
      • skeletonize

        public void skeletonize()
        Converts black objects in a binary image to single pixel skeletons.
      • skeletonize

        public void skeletonize​(int foreground)
        Converts objects with pixel values of 'forground' (255 or 0) in a binary imager to single pixel skeletons.
      • noise

        public void noise​(double standardDeviation)
        Adds pseudorandom, Gaussian ("normally") distributed values, with mean 0.0 and the specified standard deviation, to this image or ROI.
        Specified by:
        noise in class ImageProcessor
      • getHistogram

        public int[] getHistogram()
        Description copied from class: ImageProcessor
        Returns the histogram of the image or ROI. Returns a luminosity histogram for RGB images and null for float images.

        For 8-bit and 16-bit images, returns an array with one entry for each possible value that a pixel can have, from 0 to 255 (8-bit image) or 0-65535 (16-bit image). Thus, the array size is 256 or 65536, and the bin width in uncalibrated units is 1.

        For RGB images, the brightness is evaluated using the color weights (which would result in a float value) and rounded to an int. This gives 256 bins. FloatProcessor.getHistogram is not implemented (returns null).

        Specified by:
        getHistogram in class ImageProcessor
      • threshold

        public void threshold​(int level1,
                              int level2)
        Sets pixels less than 'level1' or greater than 'level2' to 0 and all other pixels to 255.
        Overrides:
        threshold in class ImageProcessor
      • threshold

        public void threshold​(int level)
        Sets pixels less than or equal to 'level' to 0 and all other pixels to 255.
        Specified by:
        threshold in class ImageProcessor
      • applyLut

        public void applyLut()
      • convolve

        public void convolve​(float[] kernel,
                             int kernelWidth,
                             int kernelHeight)
        Performs a convolution operation using the specified kernel.
        Specified by:
        convolve in class ImageProcessor
      • setFromFloatProcessors

        public void setFromFloatProcessors​(FloatProcessor[] fp)
      • toFloatArrays

        public float[][] toFloatArrays()
      • setFromFloatArrays

        public void setFromFloatArrays​(float[][] arrays)
      • toFloat

        public FloatProcessor toFloat​(int channelNumber,
                                      FloatProcessor fp)
        Returns a FloatProcessor with the same image, no scaling or calibration (pixel values 0 to 255). The roi, mask, lut (ColorModel), threshold, min&max are also set for the FloatProcessor
        Specified by:
        toFloat in class ImageProcessor
        Parameters:
        channelNumber - Ignored (needed for compatibility with ColorProcessor.toFloat)
        fp - Here a FloatProcessor can be supplied, or null. The FloatProcessor is overwritten by this method (re-using its pixels array improves performance).
        Returns:
        A FloatProcessor with the converted image data
      • setPixels

        public void setPixels​(int channelNumber,
                              FloatProcessor fp)
        Sets the pixels from a FloatProcessor, no scaling. Also the min&max values are taken from the FloatProcessor.
        Specified by:
        setPixels in class ImageProcessor
        Parameters:
        channelNumber - Ignored (needed for compatibility with ColorProcessor.toFloat)
        fp - The FloatProcessor where the image data are read from.
      • isBinary

        public boolean isBinary()
        Returns 'true' if this is a binary image (8-bit-image with only 0 and 255).
        Overrides:
        isBinary in class ImageProcessor
      • getBitDepth

        public int getBitDepth()
        Description copied from class: ImageProcessor
        Returns the bit depth, 8, 16, 24 (RGB) or 32. RGB images actually use 32 bits per pixel.
        Overrides:
        getBitDepth in class ImageProcessor