Class AlgorithmBSnake

All Implemented Interfaces:
ActionListener, WindowListener, Runnable, 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:
  • Field Details

    • PROP_SINGLE

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

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

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

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

      private static final float PROP_THRESHOLD
      The maximum ratio of change in the energy under the VOI after propagation.
      See Also:
    • 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 Details

    • 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 Details

    • 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
    • runAlgorithm

      public void runAlgorithm()
      Starts the snake algorithm.
      Specified by:
      runAlgorithm in class AlgorithmBase
    • 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, 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, 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