Package gov.nih.mipav.model.algorithms
Class AlgorithmSnake
java.lang.Object
java.lang.Thread
gov.nih.mipav.model.algorithms.AlgorithmBase
gov.nih.mipav.model.algorithms.AlgorithmSnake
- All Implemented Interfaces:
ActionListener,WindowListener,Runnable,EventListener
Snake-like algorithm deriviative. The algorithm is supplied a polygon (VOI - contour) and that polygon is allowed to
evolve to the 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 the 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:
-
Nested Class Summary
Nested classes/interfaces inherited from class java.lang.Thread
Thread.Builder, Thread.State, Thread.UncaughtExceptionHandler -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intIndicates boundary can move in or out.private intMaximum number of snake iterations.private intIndicates boundary how the VOI boundary can move - in and/or out.private float[]Storage location of the first derivative of the Gaussian in the X direction.private float[]Storage location of the first derivative of the Gaussian in the Y direction.private float[]Storage location of the first derivative of the Gaussian in the Z direction.static final intIndicates boundary can move in.private int[]Dimensionality of the kernel.static final intIndicates boundary can move out.static final intPropagate the source VOI to slices above and below its current slice.static final intPropagate the source VOI to slices above its current slice in the volume.static final intPropagate the source VOI to slices below its current slice in the volume.static final intDo not propagate the VOI to any slices (2D).private static final floatThe maximum ratio of change in the energy under the VOI after propagation.private intThe VOI propagation mode to use.private VOIThe resultant polygon and the evolution has completed.private float[]Standard deviations of the gaussian used to calculate the kernels.private floatThe maximum angle we want to have between points in the result VOI.private ModelImageSource image.private VOIThe 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, threadStoppedFields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY -
Constructor Summary
ConstructorsConstructorDescriptionAlgorithmSnake(ModelImage _srcImg, float[] _sigmas, int _boundaryIterations, float _smoothness, VOI srcVOI, int boundDir) Set up the snake algorithm so that it can be run. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidcalc2D()Prepares the data and runs the algorithm for a 2D image.private voidcalc3D()Prepares the data and runs the algorithm for a 3D image.private Vector<WildMagic.LibFoundation.Mathematics.Vector2f> cleanLine(float[] xPts, float[] yPts) Removes points (vectors) that form sharp angles (i.e. smoothes boudnary) Also adds points separated by some distance and removes adjacent pointsprivate Vector<WildMagic.LibFoundation.Mathematics.Vector3f> cleanLine(float[] xPts, float[] yPts, float[] zPts) private doubledistance(float x1, float x2, float y1, float y2) Calculates the euclidian distance between two points.private doubledistance(int x1, int x2, int y1, int y2) Calculates the euclidian distance between two points.voidfinalize()Prepares this class for destruction.Returns the resultant VOI.private voidMakes derivative kernels to be used in the calculation of the gradient magnitude.private voidMakes derivative kernels to be used in the calculation of the gradient magnitude.private voidpropDown(VOIContour resultContour, VOI resultVOI, float baseEnergy, int baseNPts) private voidpropUp(VOIContour resultContour, VOI resultVOI, float baseEnergy, int baseNPts) voidrun - starts the snake algorithm.private floatprivate floatActual function that evolves the boundary by moving normal to the boundary.private voidprivate voidTakes the polygon and forms two special arrays for use in runSnake.voidsetPropagation(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, windowOpenedMethods 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, isVirtual, join, join, join, join, ofPlatform, ofVirtual, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, sleep, start, startVirtualThread, stop, suspend, threadId, toString, yield
-
Field Details
-
PROP_SINGLE
public static final int PROP_SINGLEDo not propagate the VOI to any slices (2D).- See Also:
-
PROP_NEXT
public static final int PROP_NEXTPropagate the source VOI to slices above its current slice in the volume.- See Also:
-
PROP_PREV
public static final int PROP_PREVPropagate the source VOI to slices below its current slice in the volume.- See Also:
-
PROP_ALL
public static final int PROP_ALLPropagate the source VOI to slices above and below its current slice.- See Also:
-
ANY_DIR
public static final int ANY_DIRIndicates boundary can move in or out.- See Also:
-
IN_DIR
public static final int IN_DIRIndicates boundary can move in.- See Also:
-
OUT_DIR
public static final int OUT_DIRIndicates boundary can move out.- See Also:
-
PROP_THRESHOLD
private static final float PROP_THRESHOLDThe maximum ratio of change in the energy under the VOI after propagation.- See Also:
-
boundaryIterations
private int boundaryIterationsMaximum number of snake iterations. -
evolveDirection
private int evolveDirectionIndicates boundary how the VOI boundary can move - in and/or out. -
GxData
private float[] GxDataStorage location of the first derivative of the Gaussian in the X direction. -
GyData
private float[] GyDataStorage location of the first derivative of the Gaussian in the Y direction. -
GzData
private float[] GzDataStorage location of the first derivative of the Gaussian in the Z direction. -
kExtents
private int[] kExtentsDimensionality of the kernel. -
propagationType
private int propagationTypeThe VOI propagation mode to use. -
resultVOI
The resultant polygon and the evolution has completed. -
sigmas
private float[] sigmasStandard deviations of the gaussian used to calculate the kernels. -
smoothness
private float smoothnessThe maximum angle we want to have between points in the result VOI. -
srcImage
Source image. -
srcVOI
The initial VOI to initialize the evolution process.
-
-
Constructor Details
-
AlgorithmSnake
public AlgorithmSnake(ModelImage _srcImg, float[] _sigmas, int _boundaryIterations, float _smoothness, VOI srcVOI, int boundDir) 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_smoothness- the boundary smoothness parametersrcVOI- VOI that is to be evolvedboundDir- indicates the boundary direction (in and/or out)
-
-
Method Details
-
finalize
public void finalize()Prepares this class for destruction.- Overrides:
finalizein classAlgorithmBase
-
getResultVOI
Returns the resultant VOI.- Returns:
- resultant VOI that has localized to the boundaries of the object
-
runAlgorithm
public void runAlgorithm()run - starts the snake algorithm.- Specified by:
runAlgorithmin 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 orginal 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. -
cleanLine
Removes points (vectors) that form sharp angles (i.e. smoothes boudnary) Also adds points separated by some distance and removes adjacent points- Parameters:
xPts- x coords of points that define a contouryPts- y coords of points that define a contour- Returns:
- an ordered list of the points along the cleaned-up line
-
cleanLine
private Vector<WildMagic.LibFoundation.Mathematics.Vector3f> cleanLine(float[] xPts, float[] yPts, float[] zPts) -
distance
private double distance(int x1, int x2, int y1, int y2) Calculates the euclidian distance between two points.- Parameters:
x1- first x coord.x2- seconde x coord.y1- first y1 coord.y2- seconde y2 coord.- Returns:
- the distance between the points
(x1,y1)and(x2,y2)
-
distance
private double distance(float x1, float x2, float y1, float y2) Calculates the euclidian distance between two points.- Parameters:
x1- first x coord.x2- seconde x coord.y1- first y1 coord.y2- seconde y2 coord.- Returns:
- the distance between the points
(x1,y1)and(x2,y2)
-
makeKernels2D
private void makeKernels2D()Makes derivative kernels to be used in the calculation of the gradient magnitude. -
makeKernels3D
private void makeKernels3D()Makes derivative kernels to be used in the calculation of the gradient magnitude. -
runSnake
Actual function that evolves the boundary by moving normal to 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 contour) -
propDown
-
propUp
-
setPoints
Takes the polygon and forms two special arrays for use in runSnake.- Parameters:
xPoints- storage location of array of x coord. pointsyPoints- storage location array of y coord. pointsgon- initial polygon
-
setPoints
-