Package gov.nih.mipav.model.algorithms
Class AlgorithmBSnake
- java.lang.Object
-
- java.lang.Thread
-
- gov.nih.mipav.model.algorithms.AlgorithmBase
-
- gov.nih.mipav.model.algorithms.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 Summary
Fields Modifier and Type Field Description private int
boundaryIterations
Maximum number of snake iterations.private float[]
GxData
Storage location of the first derivative of the Gaussian in the X direction.private float[]
GyData
Storage location of the first derivative of the Gaussian in the Y direction.private float[]
GzData
Storage location of the first derivative of the Gaussian in the Z direction.private int[]
kExtents
Dimensionality of the kernel.static int
PROP_ALL
Propagate the source VOI to slices above and below its current slice.static int
PROP_NEXT
Propagate the source VOI to slices above its current slice in the volume.static int
PROP_PREV
Propagate the source VOI to slices below its current slice in the volume.static int
PROP_SINGLE
Do not propagate the source VOI to any slices (2D).private static float
PROP_THRESHOLD
The maximum ratio of change in the energy under the VOI after propagation.private int
propagationType
The VOI propagation mode to use.private VOI
resultVOI
The resultant polygon and the evolution has completed.private float[]
sigmas
Standard deviations of the Gaussian used to calculate the kernels.private ModelImage
srcImage
Source image.private VOI
srcVOI
The initial VOI to initialize the evolution process.-
Fields inherited from class gov.nih.mipav.model.algorithms.AlgorithmBase
destFlag, destImage, image25D, mask, maxProgressValue, minProgressValue, multiThreadingEnabled, nthreads, progress, progressModulus, progressStep, runningInSeparateThread, separable, threadStopped
-
-
Constructor Summary
Constructors Constructor Description AlgorithmBSnake(ModelImage srcImg, float[] sigmas, int boundaryIterations, VOI srcVOI)
Set up the snake algorithm so that it can be run.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
calc2D()
Prepares the data and runs the algorithm for a 2D image.private void
calc3D()
Prepares the data and runs the algorithm for a 3D image.void
finalize()
Prepares this class for destruction.VOI
getResultVOI()
Accessor that returns the resultant VOI.private void
makeKernels2D()
Makes 2D derivative kernels to be used in the calculation of the gradient magnitude.private void
makeKernels3D()
Makes 3D derivative kernels to be used in the calculation of the gradient magnitude.private void
propDown(VOIContour resultContour, VOI resultVOI, float baseEnergy, int baseNPts)
private void
propUp(VOIContour resultContour, VOI resultVOI, float baseEnergy, int baseNPts)
void
runAlgorithm()
Starts the snake algorithm.private float
runSnake(float[] xPoints, float[] yPoints, float[] zPoints, float[] image, VOIBase result)
Actual function that evolves the boundary.private float
runSnake(float[] xPoints, float[] yPoints, float[] image, java.awt.Polygon resultGon)
Actual function that evolves the boundary.private void
setPoints(float[] xPoints, float[] yPoints, float[] zPoints, VOIBase contour)
Takes the polygon and forms two special arrays for use in the Bspline.private void
setPoints(float[] xPoints, float[] yPoints, java.awt.Polygon gon)
Takes the polygon and forms two special arrays for use in the Bspline.void
setPropagation(int type)
Sets the propagation type.-
Methods inherited from class gov.nih.mipav.model.algorithms.AlgorithmBase
actionPerformed, addListener, addProgressChangeListener, calculateImageSize, calculatePrincipleAxis, computeElapsedTime, computeElapsedTime, convertIntoFloat, delinkProgressToAlgorithm, delinkProgressToAlgorithmMulti, displayError, errorCleanUp, fireProgressStateChanged, fireProgressStateChanged, fireProgressStateChanged, fireProgressStateChanged, fireProgressStateChanged, generateProgressValues, getDestImage, getElapsedTime, getMask, getMaxProgressValue, getMinProgressValue, getNumberOfThreads, getProgress, getProgressChangeListener, getProgressChangeListeners, getProgressModulus, getProgressStep, getProgressValues, getSrcImage, isCompleted, isImage25D, isMultiThreadingEnabled, isRunningInSeparateThread, isThreadStopped, linkProgressToAlgorithm, linkProgressToAlgorithm, makeProgress, notifyListeners, removeListener, removeProgressChangeListener, run, setCompleted, setImage25D, setMask, setMaxProgressValue, setMinProgressValue, setMultiThreadingEnabled, setNumberOfThreads, setProgress, setProgressModulus, setProgressStep, setProgressValues, setProgressValues, setRunningInSeparateThread, setSrcImage, setStartTime, setThreadStopped, startMethod, windowActivated, windowClosed, windowClosing, windowDeactivated, windowDeiconified, windowIconified, windowOpened
-
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield
-
-
-
-
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 imagesigmas
- describe the scale of the Gaussian in each dimensionboundaryIterations
- maximum number of snake iterationssrcVOI
- VOI that is to be evolved
-
-
Method Detail
-
finalize
public void finalize()
Prepares this class for destruction.- Overrides:
finalize
in classAlgorithmBase
-
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 classAlgorithmBase
-
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 contouryPoints
- y coordinates that describe the contourimage
- image dataresultGon
- 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 contouryPoints
- y coordinates that describe the contourimage
- image dataresultGon
- 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. pointsyPoints
- storage location array of y coord. pointsgon
- 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. pointsyPoints
- storage location array of y coord. pointsgon
- initial polygon
-
-