Package gov.nih.mipav.model.algorithms
Class AlgorithmConstELSUNCOpt3D
- java.lang.Object
-
- java.lang.Thread
-
- gov.nih.mipav.model.algorithms.AlgorithmBase
-
- gov.nih.mipav.model.algorithms.AlgorithmConstELSUNCOpt3D
-
- All Implemented Interfaces:
java.awt.event.ActionListener
,java.awt.event.WindowListener
,java.lang.Runnable
,java.util.EventListener
public class AlgorithmConstELSUNCOpt3D extends AlgorithmBase
Runs ELSUNC for a 3D image.
Based on ELSUNC allowed by the author with acknowledgement:
Gauss-Newton Based Algorithms For Constrained Nonlinear Least Squares Problems by Per Lindstrom and Per-Ake Wedin, Institute of Information Processing, University of Umea, S-901 87 Umea, Sweden This can be downleaded from http://www.cs.umu.se/~perl/reports/alg.ps.gz
- Version:
- 0.1 March 19, 2012
- Author:
- William Gandler
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) class
AlgorithmConstELSUNCOpt3D.FitOAR3DConstrainedModel
-
Field Summary
Fields Modifier and Type Field Description private int
bracketBound
The initial bracket size for first iteration of ELSUNC.private AlgorithmOptimizeFunctionBase
costFunction
Cost function called to measure cost - 1D.(package private) AlgorithmConstELSUNCOpt3D.FitOAR3DConstrainedModel
dModel
private double[]
finalPoint
Final point when optimization is complete.private TransMatrixd
fromOrigin
The transformation matrix from the origin of the input image.private double
functionAtBest
The cost of the function at the best minimum.private int
maxIterations
The maximum number of iterations the optimization allows.private double
minFunctionAtBest
private ViewJProgressBar
myProgressBar
Progress bar that may be set for long optimization runs.private int
nDims
Degress of freedom.private double[]
OARTolerance
Array of tolerances for each dimension.private AlgorithmBase
parent
Parent algorithm that called this optimization.private double[]
point
Point that is currently being optimized.private int
progressBegin
Where progress is when sent in.private int
progressMax
The max the progress can go to.private double[]
start
Point that was initially passed into function.private int
status
private boolean
success
Indicates whether the ELSUNC algorithm succeeded in finding a minimum.protected TransMatrixd
toOrigin
The transformation matrix to the origin of the input image.private float[][]
trLimits
Array of translation and rotation limits for each dimension.-
Fields inherited from class gov.nih.mipav.model.algorithms.AlgorithmBase
destFlag, destImage, image25D, mask, maxProgressValue, minProgressValue, multiThreadingEnabled, nthreads, progress, progressModulus, progressStep, runningInSeparateThread, separable, srcImage, threadStopped
-
-
Constructor Summary
Constructors Constructor Description AlgorithmConstELSUNCOpt3D(AlgorithmBase parent, WildMagic.LibFoundation.Mathematics.Vector3f com, int degreeOfFreedom, AlgorithmOptimizeFunctionBase costFunc, double[] initial, double[] tols, int maxIter, int bracketBound)
Constructs a new algorithm with the given centers of mass (needed for setting the transformations), the given cost function (which was constructed with the proper images), the initial point we're looking at, some tolerance within that point to look for the minimum, and the maximum number of iterations.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description TransMatrixd
convertToMatrix(double[] vector)
Helper method to take the "point" we've been working with as a vector, and convert it into a transformation matrix.TransMatrixd
convertToMatrixHalf(double[] vector)
Helper method to take the "point" we've been working with as a vector, and convert it into a transformation matrix.TransMatrixd
convertToMatrixMidsagittal(double[] vector)
Helper method to take the "point" we've been working with as a vector, and convert it into a transformation matrix.boolean
didSucceed()
Returns whether or not a minimum was found.void
disposeLocal()
Sets everything to null and prepares this class for destruction.double
getCost()
Returns the cost of the best transformation.double[]
getFinal()
Accessor that returns the final point with translations, rotations, scales, and skews representing the best tranformation.double[]
getFinal(double[] point)
Accessor that returns the final point with translations, rotations, scales, and skews representing the best tranformation.double[]
getFinal(float sample)
Accessor that returns the final point with translations, rotations, scales, and skews representing the best tranformation.TransMatrixd
getMatrix()
Accessor that returns the matrix representing the best transformation.TransMatrixd
getMatrix(float sample)
Accessor that returns the matrix representing the best transformation.TransMatrixd
getMatrixHalf()
Accessor that returns the matrix representing the best tranformation.TransMatrixd
getMatrixHalf(float sample)
Accessor that returns the matrix representing the best tranformation.TransMatrixd
getMatrixMidsagittal()
Accessor that returns the matrix representing the best tranformation.TransMatrixd
getMatrixMidsagittal(float sample)
Accessor that returns the matrix representing the best tranformation.double[]
getPoint()
Returns the optimized point, with length == degrees of freedom.void
measureCost()
Calls cost function with point and saves result in functionAtBest.void
runAlgorithm()
Runs ELSUNC along one dimension at a time as long as the costFunction improves during one cycle of runs along every dimension.void
setInitialPoint(double[] initial)
Sets the initial point to the value passed in.void
setLimits(float[][] limits)
Sets the limits on rotation and translation.void
setMaxIterations(int max)
Sets the maximum number of iterations.void
setProgressBar(ViewJProgressBar progress, int begin, int max)
Accessor that sets the progress bar so it can be updated from here.-
Methods inherited from class gov.nih.mipav.model.algorithms.AlgorithmBase
actionPerformed, addListener, addProgressChangeListener, calculateImageSize, calculatePrincipleAxis, computeElapsedTime, computeElapsedTime, convertIntoFloat, delinkProgressToAlgorithm, delinkProgressToAlgorithmMulti, displayError, errorCleanUp, finalize, 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
-
dModel
AlgorithmConstELSUNCOpt3D.FitOAR3DConstrainedModel dModel
-
bracketBound
private int bracketBound
The initial bracket size for first iteration of ELSUNC.
-
costFunction
private AlgorithmOptimizeFunctionBase costFunction
Cost function called to measure cost - 1D.
-
finalPoint
private double[] finalPoint
Final point when optimization is complete.
-
fromOrigin
private TransMatrixd fromOrigin
The transformation matrix from the origin of the input image.
-
functionAtBest
private double functionAtBest
The cost of the function at the best minimum.
-
minFunctionAtBest
private double minFunctionAtBest
-
maxIterations
private int maxIterations
The maximum number of iterations the optimization allows.
-
myProgressBar
private ViewJProgressBar myProgressBar
Progress bar that may be set for long optimization runs.
-
nDims
private int nDims
Degress of freedom.
-
parent
private AlgorithmBase parent
Parent algorithm that called this optimization.
-
point
private double[] point
Point that is currently being optimized.
-
progressBegin
private int progressBegin
Where progress is when sent in.
-
progressMax
private int progressMax
The max the progress can go to.
-
start
private double[] start
Point that was initially passed into function.
-
success
private boolean success
Indicates whether the ELSUNC algorithm succeeded in finding a minimum.
-
OARTolerance
private double[] OARTolerance
Array of tolerances for each dimension.
-
toOrigin
protected TransMatrixd toOrigin
The transformation matrix to the origin of the input image.
-
trLimits
private float[][] trLimits
Array of translation and rotation limits for each dimension.
-
status
private int status
-
-
Constructor Detail
-
AlgorithmConstELSUNCOpt3D
public AlgorithmConstELSUNCOpt3D(AlgorithmBase parent, WildMagic.LibFoundation.Mathematics.Vector3f com, int degreeOfFreedom, AlgorithmOptimizeFunctionBase costFunc, double[] initial, double[] tols, int maxIter, int bracketBound)
Constructs a new algorithm with the given centers of mass (needed for setting the transformations), the given cost function (which was constructed with the proper images), the initial point we're looking at, some tolerance within that point to look for the minimum, and the maximum number of iterations.- Parameters:
parent
- Algorithm that called this optimization.com
- Center of Mass of the input image.degreeOfFreedom
- Degree of freedom for transformation (must be 3, 4, 6, 7, 9, or 12).costFunc
- Cost function to use.initial
- Initial point to start from, length of 12.tols
- Tolerance for each dimension (tols.length == degreeOfFreedom).maxIter
- Maximum number of iterations.bracketBound
- DOCUMENT ME!
-
-
Method Detail
-
disposeLocal
public void disposeLocal()
Sets everything to null and prepares this class for destruction.
-
convertToMatrix
public TransMatrixd convertToMatrix(double[] vector)
Helper method to take the "point" we've been working with as a vector, and convert it into a transformation matrix. The length of the vector should be equal to the global variable nDims, which in turn was initialized by the degrees of freedom originally sent to this algorithm. Therefore, if there are 3 degrees of freedom, we set only the translations; 4 means translation and global scaling; 6 means rotation and translation; 7 means rotation, translation, and global scaling; 9 means rotation, translation, and scaling; and 12 means rotation, translation, scaling, and skewing.- Parameters:
vector
- Vector that represented a "point" in the algorithm which needs to be converted to a matrix.- Returns:
- The transformation matrix created from the vector.
-
convertToMatrixHalf
public TransMatrixd convertToMatrixHalf(double[] vector)
Helper method to take the "point" we've been working with as a vector, and convert it into a transformation matrix. The length of the vector should be equal to the global variable nDims, which in turn was initialized by the degrees of freedom originally sent to this algorithm. Therefore, if there are 3 degrees of freedom, we set only the translations; 4 means translation and global scaling; 6 means rotation and translation; 7 means rotation, translation, and global scaling; 9 means rotation, translation, and scaling; and 12 means rotation, translation, scaling, and skewing.- Parameters:
vector
- Vector that represented a "point" in the algorithm which needs to be converted to a matrix.- Returns:
- The transformation matrix created from the vector.
-
convertToMatrixMidsagittal
public TransMatrixd convertToMatrixMidsagittal(double[] vector)
Helper method to take the "point" we've been working with as a vector, and convert it into a transformation matrix. The length of the vector should be equal to the global variable nDims, which in turn was initialized by the degrees of freedom originally sent to this algorithm. Therefore, if there are 3 degrees of freedom, we set only the translations; 4 means translation and global scaling; 6 means rotation and translation; 7 means rotation, translation, and global scaling; 9 means rotation, translation, and scaling; and 12 means rotation, translation, scaling, and skewing.- Parameters:
vector
- Vector that represented a "point" in the algorithm which needs to be converted to a matrix.- Returns:
- The transformation matrix created from the vector.
-
getFinal
public double[] getFinal()
Accessor that returns the final point with translations, rotations, scales, and skews representing the best tranformation.- Returns:
- vector representing the best transformation in terms of translations, rotations, scales, and skews.
-
getFinal
public double[] getFinal(double[] point)
Accessor that returns the final point with translations, rotations, scales, and skews representing the best tranformation.- Returns:
- vector representing the best transformation in terms of translations, rotations, scales, and skews.
-
getFinal
public double[] getFinal(float sample)
Accessor that returns the final point with translations, rotations, scales, and skews representing the best tranformation.- Parameters:
sample
- the voxel resolution- Returns:
- vector representing the best transformation in terms of translations, rotations, scales, and skews.
-
getMatrix
public TransMatrixd getMatrix()
Accessor that returns the matrix representing the best transformation.- Returns:
- matrix representing the best transformation.
-
getMatrix
public TransMatrixd getMatrix(float sample)
Accessor that returns the matrix representing the best transformation. The passed in parameter represents the resolution (same in all directions and for both input and reference images, since resampled isotropically). Since the optimization was done in pixel space, not millimeter space, the translation parameters need to be scaled by the sample value.- Parameters:
sample
- the voxel resolution- Returns:
- matrix representing the best transformation.
-
getMatrixHalf
public TransMatrixd getMatrixHalf()
Accessor that returns the matrix representing the best tranformation. All of the components of the transformation are halved from the 'best transformation' matrix.- Returns:
- matrix representing the best transformation with its components halved.
-
getMatrixHalf
public TransMatrixd getMatrixHalf(float sample)
Accessor that returns the matrix representing the best tranformation. The passed in parameter represents the resolution (same in all directions and for both input and reference images, since resampled isotropically). Since the optimization was done in pixel space, not millimeter space, the translation parameters need to be scaled by the sample value. All of the components of the transformation are halved from the 'best transformation' matrix.- Parameters:
sample
- the voxel resolution- Returns:
- matrix representing the best transformation with its components halved.
-
getMatrixMidsagittal
public TransMatrixd getMatrixMidsagittal()
Accessor that returns the matrix representing the best tranformation. This transformation contains only the z rotation and the x and y translation, to be used in the midsagittal alignment algorithm.- Returns:
- matrix representing the best transformation's z rot and x and y trans.
-
getMatrixMidsagittal
public TransMatrixd getMatrixMidsagittal(float sample)
Accessor that returns the matrix representing the best tranformation. The passed in parameter represents the resolution (same in all directions and for both input and reference images, since resampled isotropically). Since the optimization was done in pixel space, not millimeter space, the translation parameters need to be scaled by the sample value. This transformation contains only the z rotation and the x and y translation, to be used in the midsagittal alignment algorithm.- Parameters:
sample
- the voxel resolution- Returns:
- matrix representing the best transformation's z rot and x and y trans.
-
measureCost
public void measureCost()
Calls cost function with point and saves result in functionAtBest.
-
runAlgorithm
public void runAlgorithm()
Runs ELSUNC along one dimension at a time as long as the costFunction improves during one cycle of runs along every dimension.- Specified by:
runAlgorithm
in classAlgorithmBase
-
setInitialPoint
public void setInitialPoint(double[] initial)
Sets the initial point to the value passed in.- Parameters:
initial
- Initial point.
-
setLimits
public void setLimits(float[][] limits)
Sets the limits on rotation and translation.- Parameters:
limits
- limits
-
getCost
public double getCost()
Returns the cost of the best transformation.- Returns:
- The cost of the best transformation.
-
getPoint
public double[] getPoint()
Returns the optimized point, with length == degrees of freedom.- Returns:
- The optimized point.
-
setMaxIterations
public void setMaxIterations(int max)
Sets the maximum number of iterations.- Parameters:
max
- The max number of iterations.
-
didSucceed
public boolean didSucceed()
Returns whether or not a minimum was found.- Returns:
- whether or not a minimum was found.
-
setProgressBar
public void setProgressBar(ViewJProgressBar progress, int begin, int max)
Accessor that sets the progress bar so it can be updated from here.- Parameters:
progress
- DOCUMENT ME!begin
- Value of progress bar when sent here.max
- Maximum value allowed.
-
-