Class AlgorithmConstrainedELSUNCOAR3D
- java.lang.Object
- 
- java.lang.Thread
- 
- gov.nih.mipav.model.algorithms.AlgorithmBase
- 
- gov.nih.mipav.model.algorithms.registration.AlgorithmConstrainedELSUNCOAR3D
 
 
 
- 
- All Implemented Interfaces:
- java.awt.event.ActionListener,- java.awt.event.WindowListener,- java.lang.Runnable,- java.util.EventListener
 
 public class AlgorithmConstrainedELSUNCOAR3D extends AlgorithmBase This is an automatic registration method based on FLIRT. FLIRT stands for FMRIB's Linear Image Registration Tool 1.3. For more information on FLIRT, visit their homepage at http://www.fmrib.ox.ac.uk/fsl/flirt/. Their main paper is:Jenkinson, M. and Smith, S. (2001a). 
 A global optimisation method for robust affine registration of brain images.
 Medical Image Analysis, 5(2):143-156.
 Our algorithm works as follows: 
 1.) We find the minimum resolution of the images and blur them if neccessary.
 2.) We transform the images into isotropic voxels.
 3.) We subsample the images by 2, 4, and 8, depending on the resolution.
 Subsampling can be performed for x, y, and z or for only x and y. 4.) With the images that were subsampled by 8, we call levelEight. This function will use the coarse sampling rate and optimize translations and global scale at the given rotation. So for example, if the coarse sampling range were -30 to 30 at every 15 degrees, we would optimize at rotations of (-30, -30, -30), (-30, -30, -15), (-30, -30, 0), etc. In this case there would be a total of 125 calls to the optimization method.
 5.) Still in levelEight, we now measure the cost at the fine sampling rate. We interpolate the translations and global scale to come up with a good guess as to what the optimized translation would be at that point.
 6.) We take the top 20% of the points and optimize them.
 7.) We now have a large multi-array of costs. 20% of those have been optimized and placed back into their original position in the multi-array. We look at the 9 neighbors of a point: +, =, or - one fine sample in each of the three directions. If our point has a cost greater than any of these, it is not a minima. Otherwise it is. We save it in a vector of minima.
 8.) We optimize the minima over rotations as well as translations and global scale. (Previously we had not optimized over rotations.) We return two vectors, one containing the minima before optimization, one containing the minima after optimization.
 9.) We now call levelFour with the images subsampled by 4 and the vectors of minima. We measure the costs of the minima on the new images and sort them. We take the top numMinima in each vector (pre-optimization and post-optimization) and optimize them. We put them all into one vector.
 10.) We perturb the rotations in each dimension by zero and plus-minus fineDelta. If it's not a rigid transformation, we then perturb the scaling by factors of 0.8, 0.9, 1.0, 1.1, and 1.2.
 11.) We optimize the perturbations. We return a vector of the perturbed, optimized minima.
 12.) We now call levelTwo with the images subsampled by 2. We measure the costs of the minima at the new images. We optimize the best minimum with 7 degrees of freedom, then 9, then 12. If the user has limited the degrees of freedom to 6, there will only be one optimization run, with 6 degrees of freedom. The function returns the best minimum after optimization.
 13.) We call levelOne with the un-subsampled images. At levelOne, one optimization run is performed, with the maximum allowable degrees of freedom, as specified by the user (the max is 12).
 14.) The best answer is returned from levelOne. The matrix from this answer is saved in a file and also accessed by the dialog that called this algorithm.
 Only subsample if 16 or more z slices are present so that the number of z slices will not be reduced below 8. - Author:
- Neva Cherniavsky, Matthew McAuliffe
 
- 
- 
Nested Class SummaryNested Classes Modifier and Type Class Description (package private) classAlgorithmConstrainedELSUNCOAR3D.MatrixListItemHelper class to make it easy to store the necessary information about a minimum.
 - 
Field SummaryFields Modifier and Type Field Description private booleanallowLevel16XYDOCUMENT ME!private booleanallowLevel16ZDOCUMENT ME!private booleanallowLevel2XYDOCUMENT ME!private booleanallowLevel2ZDOCUMENT ME!private booleanallowLevel4XYDOCUMENT ME!private booleanallowLevel4ZDOCUMENT ME!private booleanallowLevel8XYDOCUMENT ME!private booleanallowLevel8ZDOCUMENT ME!private AlgorithmConstrainedELSUNCOAR3D.MatrixListItemanswerFinal answer after registration.private intbaseNumIterAdvanced optimization settings maxIter in the call to ELSUNC will be an integer multiple of baseNumIter.private AlgorithmConstrainedELSUNCOAR3D.MatrixListItembestGuessLevel2DOCUMENT ME!private ModelImageblurredInputBlurred input image.private ModelImageblurredRefBlurred reference image.private intbracketBoundSets minimum and maximum limits as initial guess -+ unit_tolerance[i]*bracketBound.private booleancalcCOGIf true calculate the center of gravity (mass) and use the difference to intialize the translation.private intcoarseNumXNumber of passes that will be made in the coarse sampling and fine sampling.private intcoarseNumYDOCUMENT ME!private intcoarseNumZDOCUMENT ME!private floatcoarseRateXCoarse and fine sampling parameters.private floatcoarseRateYDOCUMENT ME!private floatcoarseRateZDOCUMENT ME!private intcostChoiceChoice of which cost function to use.private booleandoColorDOCUMENT ME!private intDOFMaximum degrees of freedom when running the optimization.private booleandoSubsampleIf true subsample for levelEight, levelFour and levelTwo analyses.private double[]dummyDummy initial values used to create a ELSUNC algorithm instance before setting initial.private booleanfastModeIf true this algorithm skips all subsample and goes directly to the level 1 optimization.private intfineNumXNumber of passes that will be made in the coarse sampling and fine sampling.private intfineNumYDOCUMENT ME!private intfineNumZDOCUMENT ME!private floatfineRateXCoarse and fine sampling parameters.private floatfineRateYDOCUMENT ME!private floatfineRateZDOCUMENT ME!private booleanfullAnalysisModeIf true this algorithm skips all subsample and goes directly to the level 1 optimization.private ModelImageimageInputIsoIsotropic input image.private ModelImageimageRefIsoIsotropic reference image.private ModelImageimageWeightInputIsoIsotropic weighted input image.private ModelImageimageWeightRefIsoIsotropic weighted reference image.(package private) doubleinitialCostDOCUMENT ME!private java.lang.StringinitialMessageDOCUMENT ME!private ModelImageinputImageThis image is to registered to the reference image.private ModelImageinputWeightThis gives weights for the input image - higher weights mean a greater impact in that area on the registration.private intinterpInterpolation method.private floatlevel1FactorXYMultiplication factor for level 1 - will be set based on subsampling.private floatlevel1FactorZDOCUMENT ME!private floatlevel2FactorXYMultiplication factor for level 2 - will be set based on subsampling.private floatlevel2FactorZDOCUMENT ME!private floatlevel4FactorXYMultiplication factor for level 4 - will be set based on subsampling.private floatlevel4FactorZDOCUMENT ME!private float[][]limitsTranslation limits.private float[][]limits_mmDOCUMENT ME!private intmaxDimDOCUMENT ME!private intmaxIterAdvanced optimization settings maxIter in the call to ELSUNC will be an integer multiple of baseNumIter.(package private) doublemaxPossibleCostDOCUMENT ME!private booleanmaxResolFlag to determine if the maximum of the minimum resolutions of the two datasets should be used.private static intminimumZForSubDOCUMENT ME!private intnumMinimaNumber of minima from level 8 to test at level 4.private ModelImagerefImageThe inputImage will be registered to this reference image.private ModelImagerefWeightThis gives weights for the reference image - higher weights mean a greater impact in that area on the registration.private booleanresampleInputDOCUMENT ME!private booleanresampleRefDOCUMENT ME!private float[]resInputThe voxel resolutions of the image to be registered to the reference image.private float[]resRefThe voxel resolutions of the reference image.private floatrotateBeginXCoarse and fine sampling parameters.private floatrotateBeginYDOCUMENT ME!private floatrotateBeginZDOCUMENT ME!private floatrotateRangeXCoarse and fine sampling parameters.private floatrotateRangeYDOCUMENT ME!private floatrotateRangeZDOCUMENT ME!private ModelSimpleImagesimpleInputSimple version of input image.private ModelSimpleImagesimpleInputSub2Simple version of input image, subsampled by 2.private ModelSimpleImagesimpleInputSub4Simple version of input image, subsampled by 4.private ModelSimpleImagesimpleInputSub8Simple version of input image, subsampled by 8.private ModelSimpleImagesimpleRefSimple version of reference image.private ModelSimpleImagesimpleRefSub2Simple version of reference image, subsampled by 2.private ModelSimpleImagesimpleRefSub4Simple version of reference image, subsampled by 4.private ModelSimpleImagesimpleRefSub8Simple version of reference image, subsampled by 8.private ModelSimpleImagesimpleWeightInputSimple version of weighted input image.private ModelSimpleImagesimpleWeightInputSub2Simple version of weighted input image, subsampled by 2.private ModelSimpleImagesimpleWeightInputSub4Simple version of weighted input image, subsampled by 4.private ModelSimpleImagesimpleWeightInputSub8Simple version of weighted input image, subsampled by 8.private ModelSimpleImagesimpleWeightRefSimple version of weighted reference image.private ModelSimpleImagesimpleWeightRefSub2Simple version of weighted reference image, subsampled by 2.private ModelSimpleImagesimpleWeightRefSub4Simple version of weighted reference image, subsampled by 4.private ModelSimpleImagesimpleWeightRefSub8Simple version of weighted reference image, subsampled by 8.(package private) longtimeElapsedDOCUMENT ME!(package private) longtimeLaterDOCUMENT ME!(package private) longtimeNowDOCUMENT ME!(package private) TransMatrixtMatrixDOCUMENT ME!private AlgorithmTransformtransformTransformation algorithm for creating an isotropic reference image.private AlgorithmTransformtransform2Transformation algorithm for creating an isotropic input image.private booleanweightedFlag to determine if there are weighted images or not.private intweightedInputPixelsDOCUMENT ME!private intweightedInputPixelsSub2DOCUMENT ME!private intweightedInputPixelsSub4DOCUMENT ME!private intweightedInputPixelsSub8DOCUMENT ME!private intweightedRefPixelsDOCUMENT ME!private intweightedRefPixelsSub2DOCUMENT ME!private intweightedRefPixelsSub4DOCUMENT ME!private intweightedRefPixelsSub8DOCUMENT ME!- 
Fields inherited from class gov.nih.mipav.model.algorithms.AlgorithmBasedestFlag, destImage, image25D, mask, maxProgressValue, minProgressValue, multiThreadingEnabled, nthreads, progress, progressModulus, progressStep, runningInSeparateThread, separable, srcImage, threadStopped
 
- 
 - 
Constructor SummaryConstructors Constructor Description AlgorithmConstrainedELSUNCOAR3D(ModelImage _imageA, ModelImage _imageB, int _costChoice, int _DOF, int _interp, float _rotateBeginX, float _rotateRangeX, float _rotateBeginY, float _rotateRangeY, float _rotateBeginZ, float _rotateRangeZ, int _nCoarseX, int _nCoarseY, int _nCoarseZ, float[][] _transLimits, boolean _maxResol, boolean _doSubsample, boolean _fastMode, boolean _calcCOG, int _bracketBound, int _baseNumIter, int _numMinima)Creates new automatic linear registration algorithm and sets necessary variables.AlgorithmConstrainedELSUNCOAR3D(ModelImage _imageA, ModelImage _imageB, ModelImage _refWeight, ModelImage _inputWeight, int _costChoice, int _DOF, int _interp, float _rotateBeginX, float _rotateRangeX, float _rotateBeginY, float _rotateRangeY, float _rotateBeginZ, float _rotateRangeZ, int _nCoarseX, int _nCoarseY, int _nCoarseZ, float[][] _transLimits, boolean _maxResol, boolean _doSubsample, boolean _fastMode, boolean _calcCOG, int _bracketBound, int _baseNumIter, int _numMinima)Creates new automatic linear registration algorithm and sets necessary variables.
 - 
Method SummaryAll Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static WildMagic.LibFoundation.Mathematics.Vector3fcalculateCenterOfMass3D(ModelSimpleImage image, ModelSimpleImage wgtImage, boolean isColor)Calculates the center of mass (gravity) of a 3D image.private booleancheckMinimum(AlgorithmConstrainedELSUNCOAR3D.MatrixListItem item)Check if the given minimum is within the translation and rotation bounds.voiddisposeLocal()Dispose of local variables that may be taking up lots of room.voidfinalize()Prepares this class for destruction.doublegetAnswer()Accessor that returns the final cost function.private java.lang.StringgetConstructionInfo()Creates a string with the parameters that the image was constructed with.private double[]getTolerance(int DOF)Gets the tolerance vector based on the degrees of freedom (the length of the tolerance is the degrees of freedom) and the level of subsampling (1, 2, 4, 8).double[]getTransArray()Access that returns an array containing the transformation parameters.TransMatrixgetTransform()Accessor that returns the matrix calculated in this algorithm.TransMatrixgetTransformHalf()Accessor that returns the matrix calculated in this algorithm divided by 2.TransMatrixgetTransformMigsagittal()Accessor that returns the z rot and x and y trans from the matrix calculated in this algorithm.private voidinterpolate(double x, double y, double z, double[] initial, double[][][][] tranforms, boolean scale)Performs a trilinear interpolation on points.private java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem>[]levelEight(ModelSimpleImage ref, ModelSimpleImage input)Takes two images that have been subsampled by a factor of eight.private java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem>levelFour(ModelSimpleImage ref, ModelSimpleImage input, java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem> minima, java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem> optMinima)Takes two images that have been subsampled by a factor of four, and two vectors of minima.private AlgorithmConstrainedELSUNCOAR3D.MatrixListItemlevelOne(ModelSimpleImage ref, ModelSimpleImage input, AlgorithmConstrainedELSUNCOAR3D.MatrixListItem item, int maxIter)Takes the two images, no subsampling, and the best minimum so far.private AlgorithmConstrainedELSUNCOAR3D.MatrixListItemlevelTwo(ModelSimpleImage ref, ModelSimpleImage input, java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem> minima)Takes two images that have been subsampled by a factor of 2 and a vector of minima.voidrunAlgorithm()Runs the image registration.private static ModelSimpleImagesubsampleBy2(ModelSimpleImage srcImage, boolean isColor)Takes a simple image and subsamples it by 2, interpolating so that the new values are averages.private static ModelSimpleImagesubsampleBy2XY(ModelSimpleImage srcImage, boolean isColor)Takes a simple image and subsamples XY by 2, interpolating so that the new XY values are averages.protected booleantestBounds3D(double[] point, java.lang.String message)DOCUMENT ME!- 
Methods inherited from class gov.nih.mipav.model.algorithms.AlgorithmBaseactionPerformed, 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.ThreadactiveCount, 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- 
minimumZForSubprivate static final int minimumZForSub DOCUMENT ME!- See Also:
- Constant Field Values
 
 - 
initialCostdouble initialCost DOCUMENT ME!
 - 
maxPossibleCostdouble maxPossibleCost DOCUMENT ME!
 - 
timeElapsedlong timeElapsed DOCUMENT ME!
 - 
timeLaterlong timeLater DOCUMENT ME!
 - 
timeNowlong timeNow DOCUMENT ME!
 - 
tMatrixTransMatrix tMatrix DOCUMENT ME!
 - 
allowLevel16XYprivate boolean allowLevel16XY DOCUMENT ME!
 - 
allowLevel16Zprivate boolean allowLevel16Z DOCUMENT ME!
 - 
allowLevel2XYprivate boolean allowLevel2XY DOCUMENT ME!
 - 
allowLevel2Zprivate boolean allowLevel2Z DOCUMENT ME!
 - 
allowLevel4XYprivate boolean allowLevel4XY DOCUMENT ME!
 - 
allowLevel4Zprivate boolean allowLevel4Z DOCUMENT ME!
 - 
allowLevel8XYprivate boolean allowLevel8XY DOCUMENT ME!
 - 
allowLevel8Zprivate boolean allowLevel8Z DOCUMENT ME!
 - 
answerprivate AlgorithmConstrainedELSUNCOAR3D.MatrixListItem answer Final answer after registration.
 - 
bestGuessLevel2private AlgorithmConstrainedELSUNCOAR3D.MatrixListItem bestGuessLevel2 DOCUMENT ME!
 - 
blurredInputprivate ModelImage blurredInput Blurred input image.
 - 
blurredRefprivate ModelImage blurredRef Blurred reference image.
 - 
bracketBoundprivate int bracketBound Sets minimum and maximum limits as initial guess -+ unit_tolerance[i]*bracketBound.
 - 
calcCOGprivate boolean calcCOG If true calculate the center of gravity (mass) and use the difference to intialize the translation. If false, images are pretty much aligned then don't calculated COG.
 - 
coarseNumXprivate int coarseNumX Number of passes that will be made in the coarse sampling and fine sampling.
 - 
fineNumXprivate int fineNumX Number of passes that will be made in the coarse sampling and fine sampling.
 - 
coarseNumYprivate int coarseNumY DOCUMENT ME!
 - 
fineNumYprivate int fineNumY DOCUMENT ME!
 - 
coarseNumZprivate int coarseNumZ DOCUMENT ME!
 - 
fineNumZprivate int fineNumZ DOCUMENT ME!
 - 
costChoiceprivate int costChoice Choice of which cost function to use.
 - 
doColorprivate boolean doColor DOCUMENT ME!
 - 
DOFprivate int DOF Maximum degrees of freedom when running the optimization.
 - 
doSubsampleprivate boolean doSubsample If true subsample for levelEight, levelFour and levelTwo analyses.
 - 
dummyprivate double[] dummy Dummy initial values used to create a ELSUNC algorithm instance before setting initial.
 - 
fastModeprivate boolean fastMode If true this algorithm skips all subsample and goes directly to the level 1 optimization. This assumes that images are fairly well aligned to begin with and therefore no sophisticated search is needed.
 - 
fullAnalysisModeprivate boolean fullAnalysisMode If true this algorithm skips all subsample and goes directly to the level 1 optimization. This assumes that images are fairly well aligned to begin with and therefore no sophisticated search is needed.
 - 
imageInputIsoprivate ModelImage imageInputIso Isotropic input image.
 - 
imageRefIsoprivate ModelImage imageRefIso Isotropic reference image.
 - 
imageWeightInputIsoprivate ModelImage imageWeightInputIso Isotropic weighted input image.
 - 
imageWeightRefIsoprivate ModelImage imageWeightRefIso Isotropic weighted reference image.
 - 
initialMessageprivate java.lang.String initialMessage DOCUMENT ME!
 - 
inputImageprivate ModelImage inputImage This image is to registered to the reference image.
 - 
inputWeightprivate ModelImage inputWeight This gives weights for the input image - higher weights mean a greater impact in that area on the registration.
 - 
interpprivate int interp Interpolation method.
 - 
level1FactorXYprivate float level1FactorXY Multiplication factor for level 1 - will be set based on subsampling.
 - 
level1FactorZprivate float level1FactorZ DOCUMENT ME!
 - 
level2FactorXYprivate float level2FactorXY Multiplication factor for level 2 - will be set based on subsampling.
 - 
level2FactorZprivate float level2FactorZ DOCUMENT ME!
 - 
level4FactorXYprivate float level4FactorXY Multiplication factor for level 4 - will be set based on subsampling.
 - 
level4FactorZprivate float level4FactorZ DOCUMENT ME!
 - 
limitsprivate float[][] limits Translation limits.
 - 
limits_mmprivate float[][] limits_mm DOCUMENT ME!
 - 
maxDimprivate int maxDim DOCUMENT ME!
 - 
maxIterprivate int maxIter Advanced optimization settings maxIter in the call to ELSUNC will be an integer multiple of baseNumIter.
 - 
baseNumIterprivate int baseNumIter Advanced optimization settings maxIter in the call to ELSUNC will be an integer multiple of baseNumIter.
 - 
maxResolprivate boolean maxResol Flag to determine if the maximum of the minimum resolutions of the two datasets should be used. If true use the maximum resolution of the two dataset. Throws away information some image information but is faster. If false the algorithms uses the minimum of the resolutions when resampling the images. Can be slower but does not "lose" informaton.
 - 
numMinimaprivate int numMinima Number of minima from level 8 to test at level 4.
 - 
refImageprivate ModelImage refImage The inputImage will be registered to this reference image.
 - 
refWeightprivate ModelImage refWeight This gives weights for the reference image - higher weights mean a greater impact in that area on the registration.
 - 
resampleInputprivate boolean resampleInput DOCUMENT ME!
 - 
resampleRefprivate boolean resampleRef DOCUMENT ME!
 - 
resInputprivate float[] resInput The voxel resolutions of the image to be registered to the reference image.
 - 
resRefprivate float[] resRef The voxel resolutions of the reference image.
 - 
rotateBeginXprivate float rotateBeginX Coarse and fine sampling parameters.
 - 
rotateRangeXprivate float rotateRangeX Coarse and fine sampling parameters.
 - 
coarseRateXprivate float coarseRateX Coarse and fine sampling parameters.
 - 
fineRateXprivate float fineRateX Coarse and fine sampling parameters.
 - 
rotateBeginYprivate float rotateBeginY DOCUMENT ME!
 - 
rotateRangeYprivate float rotateRangeY DOCUMENT ME!
 - 
coarseRateYprivate float coarseRateY DOCUMENT ME!
 - 
fineRateYprivate float fineRateY DOCUMENT ME!
 - 
rotateBeginZprivate float rotateBeginZ DOCUMENT ME!
 - 
rotateRangeZprivate float rotateRangeZ DOCUMENT ME!
 - 
coarseRateZprivate float coarseRateZ DOCUMENT ME!
 - 
fineRateZprivate float fineRateZ DOCUMENT ME!
 - 
simpleInputprivate ModelSimpleImage simpleInput Simple version of input image.
 - 
simpleInputSub2private ModelSimpleImage simpleInputSub2 Simple version of input image, subsampled by 2.
 - 
simpleInputSub4private ModelSimpleImage simpleInputSub4 Simple version of input image, subsampled by 4.
 - 
simpleInputSub8private ModelSimpleImage simpleInputSub8 Simple version of input image, subsampled by 8.
 - 
simpleRefprivate ModelSimpleImage simpleRef Simple version of reference image.
 - 
simpleRefSub2private ModelSimpleImage simpleRefSub2 Simple version of reference image, subsampled by 2.
 - 
simpleRefSub4private ModelSimpleImage simpleRefSub4 Simple version of reference image, subsampled by 4.
 - 
simpleRefSub8private ModelSimpleImage simpleRefSub8 Simple version of reference image, subsampled by 8.
 - 
simpleWeightInputprivate ModelSimpleImage simpleWeightInput Simple version of weighted input image.
 - 
simpleWeightInputSub2private ModelSimpleImage simpleWeightInputSub2 Simple version of weighted input image, subsampled by 2.
 - 
simpleWeightInputSub4private ModelSimpleImage simpleWeightInputSub4 Simple version of weighted input image, subsampled by 4.
 - 
simpleWeightInputSub8private ModelSimpleImage simpleWeightInputSub8 Simple version of weighted input image, subsampled by 8.
 - 
simpleWeightRefprivate ModelSimpleImage simpleWeightRef Simple version of weighted reference image.
 - 
simpleWeightRefSub2private ModelSimpleImage simpleWeightRefSub2 Simple version of weighted reference image, subsampled by 2.
 - 
simpleWeightRefSub4private ModelSimpleImage simpleWeightRefSub4 Simple version of weighted reference image, subsampled by 4.
 - 
simpleWeightRefSub8private ModelSimpleImage simpleWeightRefSub8 Simple version of weighted reference image, subsampled by 8.
 - 
transformprivate AlgorithmTransform transform Transformation algorithm for creating an isotropic reference image.
 - 
transform2private AlgorithmTransform transform2 Transformation algorithm for creating an isotropic input image.
 - 
weightedprivate boolean weighted Flag to determine if there are weighted images or not.
 - 
weightedInputPixelsprivate int weightedInputPixels DOCUMENT ME!
 - 
weightedInputPixelsSub2private int weightedInputPixelsSub2 DOCUMENT ME!
 - 
weightedInputPixelsSub4private int weightedInputPixelsSub4 DOCUMENT ME!
 - 
weightedInputPixelsSub8private int weightedInputPixelsSub8 DOCUMENT ME!
 - 
weightedRefPixelsprivate int weightedRefPixels DOCUMENT ME!
 - 
weightedRefPixelsSub2private int weightedRefPixelsSub2 DOCUMENT ME!
 - 
weightedRefPixelsSub4private int weightedRefPixelsSub4 DOCUMENT ME!
 - 
weightedRefPixelsSub8private int weightedRefPixelsSub8 DOCUMENT ME!
 
- 
 - 
Constructor Detail- 
AlgorithmConstrainedELSUNCOAR3Dpublic AlgorithmConstrainedELSUNCOAR3D(ModelImage _imageA, ModelImage _imageB, int _costChoice, int _DOF, int _interp, float _rotateBeginX, float _rotateRangeX, float _rotateBeginY, float _rotateRangeY, float _rotateBeginZ, float _rotateRangeZ, int _nCoarseX, int _nCoarseY, int _nCoarseZ, float[][] _transLimits, boolean _maxResol, boolean _doSubsample, boolean _fastMode, boolean _calcCOG, int _bracketBound, int _baseNumIter, int _numMinima) Creates new automatic linear registration algorithm and sets necessary variables.- Parameters:
- _imageA- Reference image (register input image to reference image).
- _imageB- Input image (register input image to reference image).
- _costChoice- Choice of cost functions, like correlation ratio or mutual information.
- _DOF- Degrees of freedom for registration
- _interp- Interpolation method used in transformations.
- _rotateBeginX- Beginning of coarse sampling range (i.e., -60 degrees).
- _rotateRangeX- DOCUMENT ME!
- _rotateBeginY- Beginning of coarse sampling range (i.e., -60 degrees).
- _rotateRangeY- DOCUMENT ME!
- _rotateBeginZ- Beginning of coarse sampling range (i.e., -60 degrees).
- _rotateRangeZ- DOCUMENT ME!
- _nCoarseX- DOCUMENT ME!
- _nCoarseY- DOCUMENT ME!
- _nCoarseZ- DOCUMENT ME!
- _transLimits- Limitations on translations.
- _maxResol- If true is the maximum of the minimum resolution of the two datasets when resampling.
- _doSubsample- If true then subsample
- _fastMode- If true then searching the parameter space is not conducted and the algorithm proceeds to level one immediately
- _calcCOG- If true calculate the center of gravity (mass) to initialize registration.
- _bracketBound- Sets minimum and maximum limits as initial guess -+ unit_tolerance[i]*bracketBound.
- _baseNumIter- Limits the number of iterations of Powell's algorithm. maxIter in the call to Powell's will be an integer multiple of baseNumIter
- _numMinima- Number of minima from level 8 to test at level 4
 
 - 
AlgorithmConstrainedELSUNCOAR3Dpublic AlgorithmConstrainedELSUNCOAR3D(ModelImage _imageA, ModelImage _imageB, ModelImage _refWeight, ModelImage _inputWeight, int _costChoice, int _DOF, int _interp, float _rotateBeginX, float _rotateRangeX, float _rotateBeginY, float _rotateRangeY, float _rotateBeginZ, float _rotateRangeZ, int _nCoarseX, int _nCoarseY, int _nCoarseZ, float[][] _transLimits, boolean _maxResol, boolean _doSubsample, boolean _fastMode, boolean _calcCOG, int _bracketBound, int _baseNumIter, int _numMinima) Creates new automatic linear registration algorithm and sets necessary variables.- Parameters:
- _imageA- Reference image (register input image to reference image).
- _imageB- Input image (register input image to reference image).
- _refWeight- Reference weighted image, used to give certain areas of the image greater impact on the registration.
- _inputWeight- Input weighted image, used to give certain areas of the image greater impact on the registration.
- _costChoice- Choice of cost functions, like correlation ratio or mutual information.
- _DOF- Degrees of freedom for registration
- _interp- Interpolation method used in transformations.
- _rotateBeginX- Beginning of coarse sampling range (i.e., -60 degrees).
- _rotateRangeX- DOCUMENT ME!
- _rotateBeginY- Beginning of coarse sampling range (i.e., -60 degrees).
- _rotateRangeY- DOCUMENT ME!
- _rotateBeginZ- Beginning of coarse sampling range (i.e., -60 degrees).
- _rotateRangeZ- DOCUMENT ME!
- _nCoarseX- DOCUMENT ME!
- _nCoarseY- DOCUMENT ME!
- _nCoarseZ- DOCUMENT ME!
- _transLimits- DOCUMENT ME!
- _maxResol- If true is the maximum of the minimum resolution of the two datasets when resampling.
- _doSubsample- If true then subsample
- _fastMode- If true then searching the parameter space is not conducted and the algorithm proceeds to level one immediately
- _calcCOG- If true calculate the center of gravity (mass) to initialize registration.
- _bracketBound- Sets minimum and maximum limits as initial guess -+ unit_tolerance[i]*bracketBound.
- _baseNumIter- Limits the number of iterations of Powell's algorithm. maxIter in the call to Powell's will be an integer multiple of baseNumIter
- _numMinima- Number of minima from level 8 to test at level 4
 
 
- 
 - 
Method Detail- 
calculateCenterOfMass3Dpublic static WildMagic.LibFoundation.Mathematics.Vector3f calculateCenterOfMass3D(ModelSimpleImage image, ModelSimpleImage wgtImage, boolean isColor) Calculates the center of mass (gravity) of a 3D image. In image space where the upper left hand corner of the image is 0,0. The x axis goes left to right, y axis goes top to bottom and z axis goes into the screen. (i.e. the right hand rule). One could simply multiply by voxel resolutions.- Parameters:
- image- the center of mass will be calculated from this image data
- wgtImage- DOCUMENT ME!
- isColor- DOCUMENT ME!
- Returns:
- the center of mass as a 3D point
 
 - 
disposeLocalpublic void disposeLocal() Dispose of local variables that may be taking up lots of room.
 - 
finalizepublic void finalize() Prepares this class for destruction.- Overrides:
- finalizein class- AlgorithmBase
 
 - 
getAnswerpublic double getAnswer() Accessor that returns the final cost function.- Returns:
- Matrix found at the end of algorithm.
 
 - 
getTransArraypublic double[] getTransArray() Access that returns an array containing the transformation parameters.- Returns:
- transformation array (0-2 rot, 3-5 trans, 6-9 scale, 9-12 skew)
 
 - 
getTransformpublic TransMatrix getTransform() Accessor that returns the matrix calculated in this algorithm.- Returns:
- Matrix found at the end of algorithm.
 
 - 
getTransformHalfpublic TransMatrix getTransformHalf() Accessor that returns the matrix calculated in this algorithm divided by 2.- Returns:
- Matrix found at the end of algorithm with the compoents halved.
 
 - 
getTransformMigsagittalpublic TransMatrix getTransformMigsagittal() Accessor that returns the z rot and x and y trans from the matrix calculated in this algorithm.- Returns:
- z rotation and x and y translations from the matrix found at the end of algorithm.
 
 - 
runAlgorithmpublic void runAlgorithm() Runs the image registration. Blurs the images based on what their minimum resolutions are. The reference image is blurred if one of the input image resolutions is 50% or more bigger than the corresponding resolution in the reference image; likewise, the input image is blurred if one of the reference resolutions is 50% or more bigger than the corresponding resolution in the input image. Thus, it is unlikely, though not impossible, that both images will be blurred. The images are then transformed into isotropic voxels. The resolutions of the two images after the isotropic transformation will be the same in all dimensions. If maxResol is true, that resolution will equal the maximum of the minimums of each image's resolutions: Max( Min (resolutions of ref image, resolutions of input image) ). If the images are weighted, the weight images are blurred and transformed into isotropic voxels in the same manner as the originals. Then the images are subsampled by 2, 4, and 8. If the images are too small they will not be subsampled down to the smallest level; if they are too big, they will be subsampled to 16. The same is done with the weight images if necessary. The function levelEight is called with the images subsampled by 8; it returns two vectors with minima. Then the function levelFour is called with images subsampled by 4 and the two vectors; it returns one vector of minima. The function levelTwo is called with images subsampled by 2 and the vector; it returns an "answer" in the form of a MatrixListItem, which is a convenient way of storing the point, the matrix, and the cost of the minimum. Then the function levelOne is called with the minimum; it returns a final "answer", or minimum, which will then be accessed by the dialog that called this algorithm.- Specified by:
- runAlgorithmin class- AlgorithmBase
 
 - 
testBounds3Dprotected boolean testBounds3D(double[] point, java.lang.String message)DOCUMENT ME!- Parameters:
- point- DOCUMENT ME!
- message- DOCUMENT ME!
- Returns:
- DOCUMENT ME!
 
 - 
subsampleBy2private static ModelSimpleImage subsampleBy2(ModelSimpleImage srcImage, boolean isColor) Takes a simple image and subsamples it by 2, interpolating so that the new values are averages.- Parameters:
- srcImage- Image to subsample.
- isColor- DOCUMENT ME!
- Returns:
- Subsampled image.
 
 - 
subsampleBy2XYprivate static ModelSimpleImage subsampleBy2XY(ModelSimpleImage srcImage, boolean isColor) Takes a simple image and subsamples XY by 2, interpolating so that the new XY values are averages.- Parameters:
- srcImage- Image to subsample.
- isColor- DOCUMENT ME!
- Returns:
- Subsampled image.
 
 - 
checkMinimumprivate boolean checkMinimum(AlgorithmConstrainedELSUNCOAR3D.MatrixListItem item) Check if the given minimum is within the translation and rotation bounds.- Parameters:
- item- MatrixListItem
- Returns:
- good true if minimum is in bounds.
 
 - 
getConstructionInfoprivate java.lang.String getConstructionInfo() Creates a string with the parameters that the image was constructed with.- Returns:
- Construction info.
 
 - 
getToleranceprivate double[] getTolerance(int DOF) Gets the tolerance vector based on the degrees of freedom (the length of the tolerance is the degrees of freedom) and the level of subsampling (1, 2, 4, 8).- Parameters:
- DOF- Degrees of freedom, will be length of vector.
- Returns:
- New tolerance vector to send to optimization.
          Based on FLIRT paper: let n=pixel dimension (in one dimension) R=brain radius, here assumed to be half of field-of-view Translation tolerance = n/2 Rotation tolerance = (180/PI)*n/(2R) (converted to degrees because AlgorithmConstELSUNC works in degrees) Scaling tolerance = n/(2R) Skewing tolerance = n/(2R) 
 
 - 
interpolateprivate void interpolate(double x, double y, double z, double[] initial, double[][][][] tranforms, boolean scale)Performs a trilinear interpolation on points. Takes 3 initial points, a vector of values to set, and an array in which to look at neighbors of those points. Sets the appropriate values in the vector. Does not set scale if the scale parameter isfalse.- Parameters:
- x- X rotation initial index into array.
- y- Y rotation initial index into array.
- z- Z rotation initial index into array.
- initial- Vector to set; if scale is- true, set three translations and a scale. Otherwise just set translations.
- tranforms- DOCUMENT ME!
- scale-- truemeans set the scale in the vector.
 
 - 
levelEightprivate java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem>[] levelEight(ModelSimpleImage ref, ModelSimpleImage input) Takes two images that have been subsampled by a factor of eight. Sets up the cost function with the images and the weighted images, if necessary. Uses the coarse sampling rate and optimizes translations and global scale at the given rotation. So for example, if the coarse sampling range were -30 to 30 at every 15 degrees, we would optimize at rotations of (-30, -30, -30), (-30, -30, -15), (-30, -30, 0), etc. In this case there would be a total of 125 calls to the optimization method. Measures the cost at the fine sampling rate. Interpolates the translations and global scale to come up with a good guess as to what the optimized translation would be at that point. Takes the top 20% of the points and optimizes them. Now have a large multi-array of costs. 20% of those have been optimized and placed back into their original position in the multi-array. Removes those items that are outisde the rotation begin and end limits. Looks at the 8 neighbors of a point: +, =, or - one fine sample in each of the three directions. If the point has a cost greater than any of these, it is not a minima. Otherwise it is. Saves it in a vector of minima. Optimizes the minima over rotations as well as translations and global scale. (Previously had not optimized over rotations.) Returns two vectors, one containing the minima before optimization, one containing the minima after optimization.- Parameters:
- ref- Subsampled by 8 reference image.
- input- Subsampled by 8 input image.
- Returns:
- List of preoptimized and optimized points.
 
 - 
levelFourprivate java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem> levelFour(ModelSimpleImage ref, ModelSimpleImage input, java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem> minima, java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem> optMinima) Takes two images that have been subsampled by a factor of four, and two vectors of minima. Sets up the cost function with the images and the weighted images, if necessary. Adds the level4Factor determined during subsampling. Measures the costs of the minima on the images and sort them. Takes the top three in each vector (pre-optimization and post-optimization) and optimizes them. Puts them all into one vector. Perturbs the rotations in each dimension by zero and plus-minus fineDelta. If it's not a rigid transformation, perturbs the scales by factors of 0.8, 0.9, 1.0, 1.1, and 1.2. Optimize the perturbations. Returns a vector of the perturbed, optimized minima.- Parameters:
- ref- Reference image, subsampled by 4.
- input- Input image, subsampled by 4.
- minima- Preoptimized minima.
- optMinima- Optimized minima.
- Returns:
- A vector of perturbed, optimized minima.
 
 - 
levelOneprivate AlgorithmConstrainedELSUNCOAR3D.MatrixListItem levelOne(ModelSimpleImage ref, ModelSimpleImage input, AlgorithmConstrainedELSUNCOAR3D.MatrixListItem item, int maxIter) Takes the two images, no subsampling, and the best minimum so far. Sets up the cost function with the images and the weighted images, if necessary. Adds the level1Factor determined during subsampling. Performs one optimization run, with the maximum allowable degrees of freedom as specified by the user (the max is 12). Returns the best minimum.- Parameters:
- ref- Reference image.
- input- Input image.
- item- Best minimum so far.
- maxIter- DOCUMENT ME!
- Returns:
- Best minimum after optimization.
 
 - 
levelTwoprivate AlgorithmConstrainedELSUNCOAR3D.MatrixListItem levelTwo(ModelSimpleImage ref, ModelSimpleImage input, java.util.Vector<AlgorithmConstrainedELSUNCOAR3D.MatrixListItem> minima) Takes two images that have been subsampled by a factor of 2 and a vector of minima. Sets up the cost function with the images and the weighted images, if necessary. Adds the level2Factor determined during subsampling. Measures the costs of the minima at the images. Optimizes the best minimum with 7 degrees of freedom, then 9, then 12. If the user has limited the degrees of freedom to 6, there will only be one optimization run, with 6 degrees of freedom. Returns the best minimum after optimization.- Parameters:
- ref- Reference image, subsampled by 2.
- input- Input image, subsampled by 2.
- minima- Minima.
- Returns:
- The optimized minimum.
 
 
- 
 
-