de.unihalle.informatik.MiToBo.segmentation.snakes.energies
Class MTBSnakeEnergyCD_OverlapPenalty

java.lang.Object
  extended by de.unihalle.informatik.MiToBo.segmentation.snakes.energies.MTBSnakeEnergyCD_OverlapPenalty
All Implemented Interfaces:
MTBActiveContourEnergy, MTBActiveContourEnergyDerivable, MTBSnakeEnergyComputable, MTBSnakeEnergyCoupled, MTBSnakeEnergyDerivable

@ALDDerivedClass
@ALDParametrizedClass
public class MTBSnakeEnergyCD_OverlapPenalty
extends Object
implements MTBSnakeEnergyDerivable, MTBSnakeEnergyComputable, MTBSnakeEnergyCoupled

Energy to avoid overlaps of snakes in joint optimization of multiple snakes.

This energy is defined as follows for a set of N snakes:

%preamble{\usepackage{amssymb}}
It basically calculates for each pair of snakes the area of overlap of their interiors. The overall energy value is given by the sum of all pairwise overlap areas. Rho is a weighting factor.

Note that using this energy with a single snake is not reasonable. The energy does not cause a single snake to move anyway, i.e., it strictly requires interaction of multiple snakes.

Paper: C. Zimmer and J.-C. Olivo-Marin, Coupled Parametric Active Contours, IEEE Trans. on PAMI, vol. 27, no. 11, pp. 1838-1842, 2005.

Author:
moeller

Field Summary
protected  int[][] currentOverlapMask
          Overlap mask of current snake configuration, updated in each iteration.
protected static int[] factorialVals
          Pre-computed factorial values.
protected  double maxEnergyVal
          Maxmimum value of energy, dependent on number of snakes and rho.
protected  double scaleFactor
          Scaling factor to rescale image coordinates in range [0,1] or several ranges to the original coordinates range like [1000, 1000] in a image of size 1000 x 1000.
protected  int snakeNum
          Number of snakes to be optimized.
 
Fields inherited from interface de.unihalle.informatik.MiToBo.segmentation.snakes.energies.MTBSnakeEnergyDerivable
targetEnergyRange
 
Constructor Summary
MTBSnakeEnergyCD_OverlapPenalty()
          Default constructor.
MTBSnakeEnergyCD_OverlapPenalty(double _rho, int snakes)
          Default constructor.
 
Method Summary
 double calcEnergy(SnakeOptimizerSingle opt)
          Calculates the current energy of the snake.
 Jama.Matrix getDerivative_MatrixPart(SnakeOptimizerSingleVarCalc opt)
          Updates the region coupling energy term in matrix A.
 Jama.Matrix getDerivative_VectorPart(SnakeOptimizerSingleVarCalc opt)
          Returns the vector part of this energy for snake optimization.
 double getScaleFactor()
          Get scaling factor.
 boolean initEnergy(SnakeOptimizerCoupled opt)
          Init routine which is called once before the energy is actually used.
 boolean initEnergy(SnakeOptimizerSingle opt)
          Init routine which is called once before the energy is actually used.
 boolean requiresCounterClockwiseContourSorting()
          Ask energy if contour points need to sorted counter-clockwise.
 boolean requiresOverlapMask()
          Ask energy if an overlap mask for all snakes jointly optimized is required.
 void setScaleFactor(double s)
          Set the scaling factor.
 String toString()
          Get an identifier string for the energy object.
 void updateStatus(SnakeOptimizerCoupled o)
          Update internal state of energy object prior to querying derivatives and so on.
 void updateStatus(SnakeOptimizerSingle o)
          Update internal state of energy object prior to usaging it.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

snakeNum

protected transient int snakeNum
Number of snakes to be optimized.


maxEnergyVal

protected transient double maxEnergyVal
Maxmimum value of energy, dependent on number of snakes and rho.


scaleFactor

protected double scaleFactor
Scaling factor to rescale image coordinates in range [0,1] or several ranges to the original coordinates range like [1000, 1000] in a image of size 1000 x 1000. Default scaling factor is 1.


currentOverlapMask

protected int[][] currentOverlapMask
Overlap mask of current snake configuration, updated in each iteration.


factorialVals

protected static int[] factorialVals
Pre-computed factorial values.

At position n in this array the following value is stored:

%preamble{\usepackage{amssymb}}
Here N is the number of snakes simultaneously optimized.

Constructor Detail

MTBSnakeEnergyCD_OverlapPenalty

public MTBSnakeEnergyCD_OverlapPenalty()
Default constructor.


MTBSnakeEnergyCD_OverlapPenalty

public MTBSnakeEnergyCD_OverlapPenalty(double _rho,
                                       int snakes)
Default constructor.

Parameters:
_rho - Overlap penalty coefficient.
Method Detail

setScaleFactor

public void setScaleFactor(double s)
Set the scaling factor.

Specified by:
setScaleFactor in interface MTBSnakeEnergyComputable
Specified by:
setScaleFactor in interface MTBSnakeEnergyDerivable
Parameters:
s - new scaling factor.

getScaleFactor

public double getScaleFactor()
Get scaling factor.

Specified by:
getScaleFactor in interface MTBSnakeEnergyComputable
Specified by:
getScaleFactor in interface MTBSnakeEnergyDerivable
Returns:
Scaling factor.

initEnergy

public boolean initEnergy(SnakeOptimizerCoupled opt)
Description copied from interface: MTBSnakeEnergyCoupled
Init routine which is called once before the energy is actually used.

In this routine global parameter settings can be handled or other initialization stuff be done. Snake optimizers are supposed to call this routine once before they actual use of the energy. If no stuff needs to be done in advance the routine should at least return true.

Specified by:
initEnergy in interface MTBSnakeEnergyCoupled
Parameters:
opt - Calling snake optimizer.
Returns:
true if init was successful

initEnergy

public boolean initEnergy(SnakeOptimizerSingle opt)
Description copied from interface: MTBSnakeEnergyDerivable
Init routine which is called once before the energy is actually used.

In this routine global parameter settings can be handled or other initialization stuff be done. The SnakeOptimizer will call this routine once before the actual use of the energy. If no stuff needs to be done in advance the routine should at least return true.

Specified by:
initEnergy in interface MTBSnakeEnergyComputable
Specified by:
initEnergy in interface MTBSnakeEnergyDerivable
Parameters:
opt - Calling snake optimizer.
Returns:
True if init was successful, otherwise false.

updateStatus

public void updateStatus(SnakeOptimizerCoupled o)
Description copied from interface: MTBSnakeEnergyCoupled
Update internal state of energy object prior to querying derivatives and so on.

Specified by:
updateStatus in interface MTBSnakeEnergyCoupled

updateStatus

public void updateStatus(SnakeOptimizerSingle o)
Description copied from interface: MTBSnakeEnergyDerivable
Update internal state of energy object prior to usaging it.

Specified by:
updateStatus in interface MTBSnakeEnergyComputable
Specified by:
updateStatus in interface MTBSnakeEnergyDerivable

getDerivative_MatrixPart

public Jama.Matrix getDerivative_MatrixPart(SnakeOptimizerSingleVarCalc opt)
Updates the region coupling energy term in matrix A.

Specified by:
getDerivative_MatrixPart in interface MTBSnakeEnergyDerivable
Parameters:
opt - Calling snake optimizer.
Returns:
Optimization matrix for this energy object.

getDerivative_VectorPart

public Jama.Matrix getDerivative_VectorPart(SnakeOptimizerSingleVarCalc opt)
Description copied from interface: MTBSnakeEnergyDerivable
Returns the vector part of this energy for snake optimization.

Specified by:
getDerivative_VectorPart in interface MTBSnakeEnergyDerivable
Parameters:
opt - Calling snake optimizer.
Returns:
Optimization vector for this energy object.

calcEnergy

public double calcEnergy(SnakeOptimizerSingle opt)
Calculates the current energy of the snake.

The energy is calculated based on the overlap mask of the current configuration of all snakes. In this overlap mask at each pixel position the absolute number of snakes covering that position is stored. For extracting the absolute energy value from this data it is, thus, necessary to derive the number of pairwise overlaps at a certain position. This count is given by the binomial of the number of snakes overlapping at a certain location over 2.

Specified by:
calcEnergy in interface MTBSnakeEnergyComputable
Parameters:
opt - Calling snake optimizer.
Returns:
Energy of complete snake.

toString

public String toString()
Description copied from interface: MTBSnakeEnergyDerivable
Get an identifier string for the energy object.

When meta parameters are saved to a file, configuration objects need to be converted to strings. Consequently, each snake energy should be associated with a unique and descriptive string for later reference.

Specified by:
toString in interface MTBSnakeEnergyComputable
Specified by:
toString in interface MTBSnakeEnergyDerivable
Overrides:
toString in class Object
Returns:
Identifier string.

requiresCounterClockwiseContourSorting

public boolean requiresCounterClockwiseContourSorting()
Description copied from interface: MTBSnakeEnergyDerivable
Ask energy if contour points need to sorted counter-clockwise.

Specified by:
requiresCounterClockwiseContourSorting in interface MTBSnakeEnergyComputable
Specified by:
requiresCounterClockwiseContourSorting in interface MTBSnakeEnergyCoupled
Specified by:
requiresCounterClockwiseContourSorting in interface MTBSnakeEnergyDerivable
Returns:
If true, counter-clockwise sorting is expected.

requiresOverlapMask

public boolean requiresOverlapMask()
Description copied from interface: MTBSnakeEnergyDerivable
Ask energy if an overlap mask for all snakes jointly optimized is required.

Specified by:
requiresOverlapMask in interface MTBSnakeEnergyComputable
Specified by:
requiresOverlapMask in interface MTBSnakeEnergyCoupled
Specified by:
requiresOverlapMask in interface MTBSnakeEnergyDerivable
Returns:
If true, the energy expects an overlap mask to be available.


Copyright © 2010–2015 Martin Luther University Halle-Wittenberg. All rights reserved.