Class AlgorithmConstELSUNCOpt3D

java.lang.Object
java.lang.Thread
gov.nih.mipav.model.algorithms.AlgorithmBase
gov.nih.mipav.model.algorithms.AlgorithmConstELSUNCOpt3D
All Implemented Interfaces:
ActionListener, WindowListener, Runnable, 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
  • Field Details

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

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

    • 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 class AlgorithmBase
    • 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.