Class AlgorithmBSnake

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

    public class AlgorithmBSnake
    extends AlgorithmBase
    Snake-like algorithm derivative using BSplines. The algorithm is supplied a polygon (VOI - contour) and that polygon is allowed to evolve to edge of the object generated by calculating the gradient magnitude (i.e. the energy function) at scale define by the user. The user/programmer supplies the sigmas (scales) at which to calculate the gradient magnitude. A large scale slows the snake and causes the snake to conform to large scale structure. A small sigma value causes the snake to conform to the small scale structure is therefore more sensitive to noise. The three-dimensional version is really a two-and-half dimensional algorithm where resultant contour in a slice is projected into the adjacent slice and is used as an initialization to the evolution in the new slice.
    Version:
    0.1 Feb 11, 1998
    Author:
    Matthew J. McAuliffe, Ph.D.
    See Also:
    AlgorithmBSpline, GenerateGaussian, AlgorithmVOISimplexOpt, AlgorithmSnake
    • Field Detail

      • PROP_SINGLE

        public static final int PROP_SINGLE
        Do not propagate the source VOI to any slices (2D).
        See Also:
        Constant Field Values
      • PROP_NEXT

        public static final int PROP_NEXT
        Propagate the source VOI to slices above its current slice in the volume.
        See Also:
        Constant Field Values
      • PROP_PREV

        public static final int PROP_PREV
        Propagate the source VOI to slices below its current slice in the volume.
        See Also:
        Constant Field Values
      • PROP_ALL

        public static final int PROP_ALL
        Propagate the source VOI to slices above and below its current slice.
        See Also:
        Constant Field Values
      • PROP_THRESHOLD

        private static final float PROP_THRESHOLD
        The maximum ratio of change in the energy under the VOI after propagation.
        See Also:
        Constant Field Values
      • boundaryIterations

        private int boundaryIterations
        Maximum number of snake iterations.
      • GxData

        private float[] GxData
        Storage location of the first derivative of the Gaussian in the X direction.
      • GyData

        private float[] GyData
        Storage location of the first derivative of the Gaussian in the Y direction.
      • GzData

        private float[] GzData
        Storage location of the first derivative of the Gaussian in the Z direction.
      • kExtents

        private int[] kExtents
        Dimensionality of the kernel.
      • propagationType

        private int propagationType
        The VOI propagation mode to use.
      • resultVOI

        private VOI resultVOI
        The resultant polygon and the evolution has completed.
      • sigmas

        private float[] sigmas
        Standard deviations of the Gaussian used to calculate the kernels.
      • srcImage

        private ModelImage srcImage
        Source image.
      • srcVOI

        private VOI srcVOI
        The initial VOI to initialize the evolution process.
    • Constructor Detail

      • AlgorithmBSnake

        public AlgorithmBSnake​(ModelImage srcImg,
                               float[] sigmas,
                               int boundaryIterations,
                               VOI srcVOI)
        Set up the snake algorithm so that it can be run.
        Parameters:
        srcImg - 2D or 3D source image
        sigmas - describe the scale of the Gaussian in each dimension
        boundaryIterations - maximum number of snake iterations
        srcVOI - VOI that is to be evolved
    • Method Detail

      • finalize

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

        public VOI getResultVOI()
        Accessor that returns the resultant VOI.
        Returns:
        resultant VOI that has localized to the boundaries of the object
      • setPropagation

        public void setPropagation​(int type)
        Sets the propagation type.
        Parameters:
        type - if PROP_ALL, result contour from a slice is propagated to the adjacent slice and used to initialize the snake algorithm for that slice. If PROP_NEXT, result contour from the original slice is propagated to the next slice and used to initialize the snake algorithm for that slice. If PROP_PREV, result contour from the original slice is propagated to the previous slice. If PROP_SINGLE, the snake algorithm stops after optimizing the boundary in the present slice.
      • calc2D

        private void calc2D()
        Prepares the data and runs the algorithm for a 2D image.
      • calc3D

        private void calc3D()
        Prepares the data and runs the algorithm for a 3D image.
      • makeKernels2D

        private void makeKernels2D()
        Makes 2D derivative kernels to be used in the calculation of the gradient magnitude.
      • makeKernels3D

        private void makeKernels3D()
        Makes 3D derivative kernels to be used in the calculation of the gradient magnitude.
      • propDown

        private void propDown​(VOIContour resultContour,
                              VOI resultVOI,
                              float baseEnergy,
                              int baseNPts)
      • propUp

        private void propUp​(VOIContour resultContour,
                            VOI resultVOI,
                            float baseEnergy,
                            int baseNPts)
      • runSnake

        private float runSnake​(float[] xPoints,
                               float[] yPoints,
                               float[] image,
                               java.awt.Polygon resultGon)
        Actual function that evolves the boundary.
        Parameters:
        xPoints - x coordinates that describe the contour
        yPoints - y coordinates that describe the contour
        image - image data
        resultGon - resultant polygon
        Returns:
        the sum of the energy along the boundary of the resultGon
      • runSnake

        private float runSnake​(float[] xPoints,
                               float[] yPoints,
                               float[] zPoints,
                               float[] image,
                               VOIBase result)
        Actual function that evolves the boundary.
        Parameters:
        xPoints - x coordinates that describe the contour
        yPoints - y coordinates that describe the contour
        image - image data
        resultGon - resultant polygon
        Returns:
        the sum of the energy along the boundary of the resultGon
      • setPoints

        private void setPoints​(float[] xPoints,
                               float[] yPoints,
                               java.awt.Polygon gon)
        Takes the polygon and forms two special arrays for use in the Bspline.
        Parameters:
        xPoints - storage location of array of x coord. points
        yPoints - storage location array of y coord. points
        gon - initial polygon
      • setPoints

        private void setPoints​(float[] xPoints,
                               float[] yPoints,
                               float[] zPoints,
                               VOIBase contour)
        Takes the polygon and forms two special arrays for use in the Bspline.
        Parameters:
        xPoints - storage location of array of x coord. points
        yPoints - storage location array of y coord. points
        gon - initial polygon