de.unihalle.informatik.MiToBo.segmentation.snakes.optimize
Class SnakeOptimizerSingleVarCalc

java.lang.Object
  extended by de.unihalle.informatik.Alida.operator.ALDOperator
      extended by de.unihalle.informatik.Alida.operator.ALDOperatorControllable
          extended by de.unihalle.informatik.MiToBo.core.operator.MTBOperatorControllable
              extended by de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizer
                  extended by de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizerSingle
                      extended by de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizerSingleVarCalc
All Implemented Interfaces:
de.unihalle.informatik.Alida.datatypes.ALDConfigurationValidator, de.unihalle.informatik.Alida.operator.events.ALDConfigurationEventListener, de.unihalle.informatik.Alida.operator.events.ALDConfigurationEventReporter, de.unihalle.informatik.Alida.operator.events.ALDControlEventListener, de.unihalle.informatik.Alida.operator.events.ALDControlEventReporter, java.util.EventListener

@ALDAOperator(genericExecutionMode=ALL,
              level=STANDARD)
@ALDDerivedClass
public class SnakeOptimizerSingleVarCalc
extends SnakeOptimizerSingle

 
 Image contour segmentation using parametric snakes.
 
 This class provides methods to segment contours in an image based on
 parametric active contour models, i.e. snakes. Note that we assume here a
 counter-clockwise ordering of the snake points. Pay attention if you deal
 with upper-left coordinates!
 

In this class snake optimization is done by solving PDEs like in the original Kass et al. paper. TODO correct handling of not closed snakes TODO adaptation of gamma for every single point TODO adaptation of segment length

Author:
moeller, misiak

Nested Class Summary
 
Nested classes/interfaces inherited from class de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizerSingle
SnakeOptimizerSingle.EnergyNormalizationMode, SnakeOptimizerSingle.IntensityNormalizationMode
 
Nested classes/interfaces inherited from class de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizer
SnakeOptimizer.Snake_status
 
Nested classes/interfaces inherited from class de.unihalle.informatik.Alida.operator.ALDOperatorControllable
de.unihalle.informatik.Alida.operator.ALDOperatorControllable.OperatorControlStatus
 
Nested classes/interfaces inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
de.unihalle.informatik.Alida.operator.ALDOperator.HidingMode
 
Field Summary
private  Jama.Matrix A
          Optimization matrix A, to be modified by snake energies in each iteration.
private  Jama.Matrix B
          External energy vector, to be modified by snake energies.
protected  MTBSet_SnakeEnergyDerivable energySet
          List of snake energies to be used in segmentation.
protected  double[] energyWeightsNormed
          List of normalized energy weights.
protected  double[][] gammaAdaptive
          Vector containing the current gamma values (step sizes).
protected  MTBGammaUpdate gammaUpdater
          Gamma update strategy.
protected  java.lang.Double initialGammas
          Initial step size in snake optimization.
private  Jama.Matrix memA
          Optimization matrix with values of last calculations.
protected  MTBTermination termCriterion
          Termination criterion.
 
Fields inherited from class de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizerSingle
dispImg, doResampling, energy, energyCalculationRequested, inImgOriginal, intNormMode, normMode, overlapMask, overlapMaskRequested, previousEnergy, previousSnake, resampleSegLength, scaleFactor, snake, timer
 
Fields inherited from class de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizer
counterClockwiseSnakePointOrderRequested, energyData, excludeMask, iHeight, inImg, initialSnakes, intermediateResults, itCounter, iWidth, outIntermediateResultsStack, outIntermediateResultsStackInterval, outIntermediateResultsStackWanted, outSnakes, outSnakesImg, sampleEnergyData, saveIntermediateResults, saveIntermediateResultsPath, showIntermediateResults, snakeNum
 
Fields inherited from class de.unihalle.informatik.Alida.operator.ALDOperatorControllable
configurationEventlistenerList, controlEventlistenerList, notifyListenersRecursively, operatorStatus, stepSize, stepWiseExecution
 
Fields inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
completeDAG, name, portHashAccess, verbose, versionProvider
 
Constructor Summary
SnakeOptimizerSingleVarCalc()
          Default constructor.
SnakeOptimizerSingleVarCalc(MTBImage img, MTBPolygon2DSet initSnake, MTBSet_SnakeEnergyDerivable energs, MTBGammaUpdate gamUpdater, java.lang.Double gammas, MTBTermination tc, java.lang.Boolean resample, java.lang.Double segLength)
          Default constructor with parameters.
 
Method Summary
protected  double calcSnakeEnergy()
          Calculates total snake energy.
 SnakeOptimizerSingleVarCalc clone()
           
protected  SnakeOptimizer.Snake_status doIteration()
          Performs one single optimization step.
 double[][] getCurGamma()
          Returns current gamma vector.
 java.util.Vector<MTBSnakeEnergyDerivable> getEnergies()
          Returns a reference to the list of energies.
 Jama.Matrix getMemorizedMatrixA()
          Returns matrix carrying always the values of the last iteration, or null before first run.
protected  void initOptimizer()
          Initializes the optimizer.
 void printParams()
          Print important parameters to standard output stream.
protected  java.lang.Object readResolve()
          Function for proper initialization of deserialized objects.
 void resizeMatrices()
          Resize parameter matrices.
protected  void saveSnake()
          Save intermediate results.
protected  void setupEnergyTable()
          Inits the table for sampled energy values.
 java.lang.String toString()
           
 
Methods inherited from class de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizerSingle
closeWindows, disableEnergyCalculation, doesRequireOverlapMask, doResampleSnake, enableEnergyCalculation, getCurrentSnake, getCurrentSnakes, getEnergyValue, getIntensityNormalizationMode, getNormalizationMode, getOverlapMask, getPreviousEnergyValue, getPreviousSnake, getSegmentLength, normalizeInputImage, requireOverlapMask, resampleSnake, setOverlapMask, showSnake
 
Methods inherited from class de.unihalle.informatik.MiToBo.segmentation.snakes.optimize.SnakeOptimizer
disableSaveIntermediateResults, disableShowIntermediateResults, enableSaveIntermediateResults, enableShowIntermediateResults, getExcludeMask, getInitialSnakes, getInputImage, getIterationCount, getResultSnakeImage, getResultSnakes, getSnakeNumber, getStackWithIntermediateResults, operate, requireCounterClockwiseSnakePointOrder, setExcludeMask, setInitialSnakes, setInputImage, setIntermediateResultPath, validateCustom, wantStackWithIntermediateResults
 
Methods inherited from class de.unihalle.informatik.Alida.operator.ALDOperatorControllable
addALDConfigurationEventListener, addALDControlEventListener, fireALDConfigurationEvent, fireALDControlEvent, handleALDConfigurationEvent, handleALDControlEvent, removeALDConfigurationEventListener, removeALDControlEventListener, setNotifyRecursiveFlag
 
Methods inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
deserializeFromXmlFile, fieldContained, getALDPortHashAccessKey, getConstructionMode, getInInoutNames, getInInoutNames, getInNames, getInOutNames, getMissingRequiredInputs, getName, getNumParameters, getOutInoutNames, getOutNames, getParameter, getParameterDescriptor, getParameterNames, getSupplementalNames, getVerbose, getVersion, isConfigured, parametersToXmlObject, print, print, print, printInterface, printInterface, readHistory, reinitializeParameterDescriptors, runOp, runOp, runOp, serializeToXmlFile, setConstructionMode, setName, setParameter, setParametersFromXml, setParametersFromXml, setVerbose, toStringVerbose, unconfiguredItems, validate, validateGeneric, writeHistory, writeHistory, writeHistory, writeParametersToXml
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

A

private transient Jama.Matrix A
Optimization matrix A, to be modified by snake energies in each iteration.


B

private transient Jama.Matrix B
External energy vector, to be modified by snake energies.


energySet

@Parameter(label="List of Energies",
           mode=STANDARD,
           direction=IN,
           required=true,
           description="List of snake energies.",
           dataIOOrder=3)
protected MTBSet_SnakeEnergyDerivable energySet
List of snake energies to be used in segmentation.


energyWeightsNormed

protected transient double[] energyWeightsNormed
List of normalized energy weights.


gammaAdaptive

protected transient double[][] gammaAdaptive
Vector containing the current gamma values (step sizes).

Note that the array is two-dimensional, however, the number of columns is always one! This is mainly for compatibility reasons as we need to convert the double array to Jama matrices which require two-dimensional arrays.


gammaUpdater

@Parameter(label="Gamma Update Strategy",
           mode=ADVANCED,
           direction=IN,
           required=false,
           dataIOOrder=22,
           description="Gamma update object.")
protected MTBGammaUpdate gammaUpdater
Gamma update strategy.


initialGammas

@Parameter(label="Initial Gamma Value",
           mode=STANDARD,
           direction=IN,
           required=false,
           dataIOOrder=21,
           description="Initial step sizes.")
protected java.lang.Double initialGammas
Initial step size in snake optimization.


memA

private transient Jama.Matrix memA
Optimization matrix with values of last calculations.


termCriterion

@Parameter(label="Termination Criterion",
           mode=ADVANCED,
           direction=IN,
           required=false,
           dataIOOrder=20,
           description="Termination criterion for optimization.")
protected MTBTermination termCriterion
Termination criterion.

Constructor Detail

SnakeOptimizerSingleVarCalc

public SnakeOptimizerSingleVarCalc()
                            throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Default constructor.

Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException

SnakeOptimizerSingleVarCalc

public SnakeOptimizerSingleVarCalc(MTBImage img,
                                   MTBPolygon2DSet initSnake,
                                   MTBSet_SnakeEnergyDerivable energs,
                                   MTBGammaUpdate gamUpdater,
                                   java.lang.Double gammas,
                                   MTBTermination tc,
                                   java.lang.Boolean resample,
                                   java.lang.Double segLength)
                            throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Default constructor with parameters.

Parameters:
img - Gray-scale input image.
initSnake - Array of initial snake polygon(s).
energs - Vector of energy objects.
gamUpdater - Object for gamma adaptation.
gammas - Initial value(s) for step size.
tc - Termination checker.
opStepWise - Enables step-through optimization (requires GUI).
stepsize - Number of iterations per step-through step.
normalize - Flag for enabling snake/image normalization.
resample - Flag for activating snake resampling.
segLength - Desired length of segments are resampling.
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
SnakeAlgosRegionException
Method Detail

calcSnakeEnergy

protected double calcSnakeEnergy()
Calculates total snake energy.

Returns:
Value of local energy, -1 if error during calculation.

clone

public SnakeOptimizerSingleVarCalc clone()
Specified by:
clone in class SnakeOptimizer

doIteration

protected SnakeOptimizer.Snake_status doIteration()
                                           throws MTBException
Performs one single optimization step.

Specified by:
doIteration in class SnakeOptimizer
Returns:
Status of the optimization process.
Throws:
MTBException

getCurGamma

public double[][] getCurGamma()
Returns current gamma vector.


getEnergies

public java.util.Vector<MTBSnakeEnergyDerivable> getEnergies()
Returns a reference to the list of energies.


getMemorizedMatrixA

public Jama.Matrix getMemorizedMatrixA()
Returns matrix carrying always the values of the last iteration, or null before first run.


initOptimizer

protected void initOptimizer()
                      throws MTBSnakeException,
                             de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Initializes the optimizer.

Here internal member variables are initialized according to the given parameters, and memory for intermediate results and debug data is allocated.

Overrides:
initOptimizer in class SnakeOptimizerSingle
Throws:
MTBSnakeException
de.unihalle.informatik.Alida.exceptions.ALDOperatorException

printParams

public void printParams()
Print important parameters to standard output stream.

Overrides:
printParams in class SnakeOptimizerSingle
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException

readResolve

protected java.lang.Object readResolve()
Function for proper initialization of deserialized objects.

This function is called on an instance of this class being deserialized from file, prior to handing the instance over to the user. It takes care of a proper initialization of transient member variables as they are not initialized to the default values during deserialization.

Overrides:
readResolve in class SnakeOptimizerSingle
Returns:

resizeMatrices

public void resizeMatrices()
Resize parameter matrices.

The size of the matrices depends on the number of points used to represent the snake. This methods resizes the snake, if the given point number does not coincide with the current size of the matrices. After resizing the matrices, entries are set to zero.


saveSnake

protected void saveSnake()
Description copied from class: SnakeOptimizerSingle
Save intermediate results.

Specified by:
saveSnake in class SnakeOptimizerSingle

setupEnergyTable

protected void setupEnergyTable()
Inits the table for sampled energy values.


toString

public java.lang.String toString()
Overrides:
toString in class SnakeOptimizerSingle