Class AlgorithmMorphology3D

  • All Implemented Interfaces:
    java.awt.event.ActionListener, java.awt.event.WindowListener, java.lang.Runnable, java.util.EventListener

    public class AlgorithmMorphology3D
    extends AlgorithmBase
    Three-Dimensional mathmatical morphology class. Methods include:
    • Background Distance Map
    • close
    • Delete objects
    • dilate
    • Distance Map
    • erode
    • fill holes
    • find edges
    • Identify objects
    • Morphological gradient
    • open
    • Particle Analysis
    • Skeletonize with pruning option
    • ultimate erode
    • Border clearing
    • Geodesic dilation
    • Geodesic erosion
    • Morphological reconstruction by dilation
    • Morphological reconstruction by erosion
    • Opening by reconstruction
    • Closing by reconstruction
    Version:
    1.0 Aug 1999
    Author:
    Matthew J. McAuliffe, Ph.D.
    • Field Detail

      • PARTICLE_ANALYSIS

        public static final int PARTICLE_ANALYSIS
        DOCUMENT ME!
        See Also:
        Constant Field Values
      • DISTANCE_MAP_FOR_SHAPE_INTERPOLATION

        public static final int DISTANCE_MAP_FOR_SHAPE_INTERPOLATION
        DOCUMENT ME!
        See Also:
        Constant Field Values
      • MORPHOLOGICAL_RECONSTRUCTION_BY_DILATION

        public static final int MORPHOLOGICAL_RECONSTRUCTION_BY_DILATION
        See Also:
        Constant Field Values
      • MORPHOLOGICAL_RECONSTRUCTION_BY_EROSION

        public static final int MORPHOLOGICAL_RECONSTRUCTION_BY_EROSION
        See Also:
        Constant Field Values
      • OPENING_BY_RECONSTRUCTION

        public static final int OPENING_BY_RECONSTRUCTION
        See Also:
        Constant Field Values
      • CLOSING_BY_RECONSTRUCTION

        public static final int CLOSING_BY_RECONSTRUCTION
        See Also:
        Constant Field Values
      • OUTER_EDGING

        public static final int OUTER_EDGING
        Parameter used in Find_Edges. Indicates that the edge extracted is formed from the voxels that are directly adjacient to the ojbect.
        See Also:
        Constant Field Values
      • INNER_EDGING

        public static final int INNER_EDGING
        Parameter used in Find_Edges. Indicates that the edge extracted is formed from the voxels that overlay the edge voxels of the object.
        See Also:
        Constant Field Values
      • algorithm

        private int algorithm
        algorithm type (i.e. erode, dilate)
      • distanceMap

        private float[] distanceMap
        DOCUMENT ME!
      • edgingType

        private int edgingType
        Edge type.
      • entireImage

        private boolean entireImage
        if true, indicates that the VOIs should NOT be used and that entire image should be processed.
      • imgBuffer

        private short[] imgBuffer
        imgBuffer that hold voxel value for the 3D slices.
      • imgBuffer2

        private short[] imgBuffer2
      • maskBuffer

        private short[] maskBuffer
      • iterationsD

        private final int iterationsD
        Dilation iteration times.
      • iterationsE

        private final int iterationsE
        Erosion iteration times.
      • kDimXY

        private int kDimXY
        Kernel dimension.
      • kDimZ

        private int kDimZ
        DOCUMENT ME!
      • kernel

        private java.util.BitSet kernel
        Kernel for both erosion and dilation.
      • kernelType

        private final int kernelType
        kernel size (i.e. connectedness)
      • min

        private int min
        maximum, minimum size of objects.
      • max

        private int max
        maximum, minimum size of objects.
      • numPruningPixels

        private int numPruningPixels
        Number pixels to prune.
      • pixDist

        private float pixDist
        DOCUMENT ME!
      • processBuffer

        private short[] processBuffer
        intermediate processing buffer, same size with imgBuffer.
      • showFrame

        private final boolean showFrame
        Not used now. Flag to show frame during each algorithm method call.
        See Also:
        Constant Field Values
      • sphereDiameter

        private float sphereDiameter
        kernel diameter.
      • ultErodeObjects

        private WildMagic.LibFoundation.Mathematics.Vector3f[] ultErodeObjects
        DOCUMENT ME!
      • maskImage

        private ModelImage maskImage
        Used in geodesic dilation, geodesic erosion, morphological reconstruction by dilation, and morphological reconstruction by erosion Not used in opening by reconstruction and closing by reconstruction
      • geodesicSize

        private int geodesicSize
        Size of geodesic erosions and dilations
    • Constructor Detail

      • AlgorithmMorphology3D

        public AlgorithmMorphology3D​(ModelImage srcImg,
                                     int kernelType,
                                     float sphereDiameter,
                                     int method,
                                     int iterD,
                                     int iterE,
                                     int pruningPix,
                                     int edType,
                                     boolean entireImage)
        Creates a new AlgorithmMorphology3D object.
        Parameters:
        srcImg - source image model
        kernelType - kernel size (i.e. connectedness)
        sphereDiameter - only valid if kernelType == SIZED_SPHERE and represents the width of a circle in the resolution of the image
        method - setup the algorithm method (i.e. erode)
        iterD - number of times to dilate
        iterE - number of times to erode
        pruningPix - the number of pixels to prune
        edType - the type of edging to perform (inner or outer)
        entireImage - flag that indicates if the VOIs should NOT be used and entire image should be processed
      • AlgorithmMorphology3D

        public AlgorithmMorphology3D​(ModelImage srcImg,
                                     ModelImage destImg,
                                     int kernelType,
                                     float sphereDiameter,
                                     int method,
                                     int iterD,
                                     int iterE,
                                     int pruningPix,
                                     int edType,
                                     boolean entireImage)
        Creates a new AlgorithmMorphology3D object.
        Parameters:
        srcImg - source image model
        destImg - destination image model
        kernelType - kernel size (i.e. connectedness)
        sphereDiameter - only valid if kernelType == SIZED_SPHERE and represents the width of a circle in the resolution of the image
        method - setup the algorithm method (i.e. erode)
        iterD - number of times to dilate
        iterE - number of times to erode
        pruningPix - the number of pixels to prune
        edType - the type of edging to perform (inner or outer)
        entireImage - flag that indicates if the VOIs should NOT be used and entire image should be processed
      • AlgorithmMorphology3D

        public AlgorithmMorphology3D​(ModelImage srcImg,
                                     ModelImage destImg,
                                     ModelImage maskImage,
                                     int kernelType,
                                     float sphereDiameter,
                                     int method,
                                     int geodesicSize,
                                     int iterD,
                                     int iterE,
                                     boolean entireImage)
        Creates a new AlgorithmMorphology3D object.
        Parameters:
        srcImg - source image model
        kernelType - dilation kernel size (i.e. connectedness)
        circleDiameter - dilation only valid if kernelType == SIZED_CIRCLE and represents the width of a circle in the resolution of the image
        method - setup the algorithm method (i.e. erode, dilate)
        geodesicSize -
        iterD - number of times to dilate
        iterE - number of times to erode
        entireImage - if true, indicates that the VOIs should NOT be used and that entire image should be processed
    • Method Detail

      • finalize

        public void finalize()
        Prepares this class for destruction.
        Overrides:
        finalize in class AlgorithmBase
      • findEdges

        public void findEdges​(int edgeType,
                              boolean returnFlag)
        Finds the edges of objects.
        Parameters:
        edgeType - Indicates that the edge extracted is formed from the voxels that are directly adjacient to the ojbect or from the voxels that overlay the edge voxels of the object.
        returnFlag - if true then this operation is a step in the morph process (i.e. close) see OUTER_EDGING see INNER_EDGE
      • identifyObjects

        public void identifyObjects​(boolean returnFlag)
        Labels each object in an image with a different integer value.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process (i.e. close)
      • prune

        public void prune​(int iter,
                          boolean returnFlag)
        This method is to be applied on skeletonized images: it removes all branches which are iter or less pixels in length.
        Parameters:
        iter - the threshold number of pixels for the maximum length of a removed branch to be
        returnFlag - if true then this operation is a step in the morph process (i.e. close)
      • setAlgorithm

        public void setAlgorithm​(int method)
        Sets the algorithm type (i.e. erode, dilate)
        Parameters:
        method - algorithm type
      • setImage

        public void setImage​(ModelImage img)
        Sets new source image.
        Parameters:
        img - image model
      • setKernel

        public void setKernel​(java.util.BitSet kernel,
                              int dimXY,
                              int dimZ)
        Sets user defined square kernels.
        Parameters:
        kernel - user defined kernel
        dimXY - length of x and y dimensions
        dimZ - length of z dimension
      • setMinMax

        public void setMinMax​(int _min,
                              int _max)
        Sets the bounds of object size used to delete objects.
        Parameters:
        _min - minimum size of objects
        _max - maximum size of objects
      • setPixDistance

        public void setPixDistance​(float dist)
        Used in the ultimate erode function to remove all eroded points less than the distance specified in pixel units.
        Parameters:
        dist - distance in pixels.
      • showKernel

        public void showKernel()
        Display kernel as 1 or 0 in the debug window.
      • skeletonize

        public void skeletonize​(int pruningPixels,
                                boolean returnFlag)
        Skeletonizes the image by using a lookup table to repeatedly remove pixels from the edges of objects in a binary image, reducing them to single pixel wide skeletons. Based on a thinning algorithm by Zhang and Suen. There is an entry in the table for each of the 256 possible 3x3 neighborhood configurations. An entry of '1' signifies to delete the indicated pixel on the first pass, '2' means to delete the indicated pixel on the second pass, and '3' indicates to delete the pixel on either pass.
        Parameters:
        pruningPixels - the number of pixels to prune after skeletonizing. (should be 0 if no pruning is to be done)
        returnFlag - if true then this operation is a step in the morph process (i.e. close)
      • distanceMapForShapeInterpolation

        private void distanceMapForShapeInterpolation​(boolean returnFlag)
      • backgroundDistanceMap

        private void backgroundDistanceMap​(boolean returnFlag)
        Generates a Euclidian distance map of the background.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process
      • deleteObjects

        private void deleteObjects​(int min,
                                   int max,
                                   boolean returnFlag)
        Deletes objects larger than maximum size indicated and objects smaller than the indicated minimum size.
        Parameters:
        min - delete all objects smaller than the minimum value (pixels)
        max - delete all objects greater than the maximum value (pixels)
        returnFlag - if true then this operation is a step in the morph process (i.e. close)
      • borderClearing

        private void borderClearing​(boolean returnFlag)
        Removes objects that touch (i.e., are connected to) the border
        Parameters:
        returnFlag -
      • dilate

        private void dilate​(boolean returnFlag,
                            int iters)
        Dilates a boolean, unsigned byte, or unsigned short image using the indicated kernel and the indicated number of iterations.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process (i.e. close)
        iters - number of dilation iterations
      • geodesicDilation

        private void geodesicDilation​(boolean returnFlag,
                                      int geodesicSize)
        geodesic dilation of a boolean, unsigned byte or unsigned short image using the indicated kernel and the indicated number of executions.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process (i.e. close)
        geodesicSize -
      • geodesicErosion

        private void geodesicErosion​(boolean returnFlag,
                                     int geodesicSize)
        geodesic erosion of a boolean, unsigned byte or unsigned short image using the indicated kernel and the indicated number of executions.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process (i.e. close)
        geodesicSize -
      • distanceMap

        private void distanceMap​(boolean returnFlag)
        Generates a Euclidian distance map.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process
      • erode

        private void erode​(boolean returnFlag,
                           int iters)
        Erodes a boolean, unsigned byte, or unsigned short image using the indicated kernel and the indicated number of iterations.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process (i.e. open)
        iters - number of erosion iterations
      • fillHoles

        private void fillHoles​(boolean returnFlag)
        Fill the holes inside the cell region blocks.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process (i.e. close)
      • fillHolesRegion

        private void fillHolesRegion​(int stIndex,
                                     short floodValue,
                                     short objValue)
        3D flood fill that fill the holes insize the cell region block.
        Parameters:
        stIndex - the starting index of the seed point
        floodValue - the value to flood the region with
        objValue - object ID value that idenditifies the flood region.
      • floodFill

        private int floodFill​(short[] idBuffer,
                              int stIndex,
                              short floodValue,
                              short objValue)
        3D flood fill that forms a short mask.
        Parameters:
        idBuffer - buffer to store flooding results
        stIndex - starting index indicating the starting location of the flood fill
        floodValue - the value to flood the area with
        objValue - DOCUMENT ME!
        Returns:
        DOCUMENT ME!
      • isEndpoint

        private boolean isEndpoint​(int pix,
                                   short[] tmpBuffer)
        This method returns whether or not pix is the index of an endpoint in tmpBuffer (it is assumed that location pix is not the intensity of the background in tmpBuffer).
        Parameters:
        pix - the index of a non-zero pixel in tmpBuffer
        tmpBuffer - the image
        Returns:
        DOCUMENT ME!
      • makeKernel

        private void makeKernel​(int kernelType)
        Generates a kernel of the indicated type.
        Parameters:
        kernelType - type of kernel to be generated.
      • makeSphericalKernel

        private void makeSphericalKernel()
        Generates a spherical kernel of a specific diameter. Most importantly it normalizes the kernel based on the resolution in the z-dimension. This in effect accounts for the anisotrophy in the z-dimension of typical 3D medical images. The resultant data is stored in the kernel class variable.
      • onePixel

        private boolean onePixel​(short[] buffer,
                                 int index,
                                 int sliceSize,
                                 int xDim)
        Used by ultimate erode to simplify code a little. Checks to find a single pixels in the 27 neighborhood.
        Parameters:
        buffer - input data buffer
        index - index of interest
        sliceSize - number of voxels in the image plane
        xDim - dimension of the image in the x direction
        Returns:
        true if single pixel, false if not single pixel.
      • particleAnalysis

        private void particleAnalysis()
        Take a mask like image and performs an analysis.

        1. Deletes objects that are too small (noise) and objects that are too big 2. Ultimate erode and remove points that are too close 3. Watershed using ultimate eroded points as seed points and distance map. 4. Delete objects that are too small (noise) and objects that are too big

        Ult erode & (bg dist map AND orig image) => watershed(ultErodePts, ANDED Bg Dist) => IDobjects

      • thin

        private int thin​(int pass,
                         int slice,
                         int[] table)
        This a thinning algorithm used to do half of one layer of thinning (which layer is dictated by whether pass is even or odd).
        Parameters:
        pass - the number pass this execution is on the image
        slice - the slice number being worked on (starting with 0);
        table - the table to lookup whether to delete the pixel or let it stay.
        Returns:
        DOCUMENT ME!
      • ultimateErode

        private void ultimateErode​(boolean returnFlag)
        Erodes to a single point.
        Parameters:
        returnFlag - if true then this operation is a step in the morph process (i.e. open)