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

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
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
Direct Known Subclasses:
SnakeOptimizerCoupled, SnakeOptimizerSingle

public abstract class SnakeOptimizer
extends MTBOperatorControllable

Image contour segmentation using parametric snakes.

This class defines a generic interface for segmenting contours in an image based on parametric active contour models, i.e. snakes. It supports thread-based optimization and interaction with a graphical user interface.

Author:
moeller

Nested Class Summary
static class SnakeOptimizer.Snake_status
          Indicates the current (internal) state of the snake calculations.
 
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
protected  boolean counterClockwiseSnakePointOrderRequested
          Flag to indicate if snakes are required to be sorted counter-clockwise.
protected  MTBTableModel energyData
           
protected  boolean[][] excludeMask
          Mask to exclude image pixels from calculations.
protected  int iHeight
          Image height.
protected  MTBImage inImg
          Input image to be segmented.
protected  MTBPolygon2DSet initialSnakes
          Set of initial snake contours.
protected  java.util.Vector<MTBPolygon2DSet> intermediateResults
          Set of intermediate segmentation results, required for stack generation.
protected  int itCounter
          Iteration counter.
protected  int iWidth
          Image width.
protected  MTBImageRGB outIntermediateResultsStack
          Image stack with intermediate result images.
protected  int outIntermediateResultsStackInterval
          Interval for saving intermediate results in stack.
protected  java.lang.Boolean outIntermediateResultsStackWanted
          Flag to request a stack of intermediate result images.
protected  MTBPolygon2DSet outSnakes
          Result contours.
protected  MTBImageRGB outSnakesImg
          Image with final snake contours overlayed.
protected  java.lang.Boolean sampleEnergyData
           
protected  java.lang.Boolean saveIntermediateResults
          Flag to enable/disable saving of intermediate results.
protected  de.unihalle.informatik.Alida.datatypes.ALDDirectoryString saveIntermediateResultsPath
          Path to where intermediate results should be stored.
protected  java.lang.Boolean showIntermediateResults
          Flag to enable/disable showing of intermediate results.
protected  int snakeNum
          Number of snakes currently managed.
 
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
SnakeOptimizer()
          Default constructor
 
Method Summary
abstract  SnakeOptimizer clone()
           
protected abstract  void closeWindows()
          Close all windows openened by this operator (for clean-up).
 void disableSaveIntermediateResults()
          Deactivates writing of intermediate results.
 void disableShowIntermediateResults()
          Deactivates display of intermediate results.
protected abstract  SnakeOptimizer.Snake_status doIteration()
          Here the main work should be done.
 void enableSaveIntermediateResults()
          Activates writing of intermediate results to disc.
 void enableShowIntermediateResults()
          Activates display of intermediate results.
private  void generateStackWithIntermediateResults()
          Generates a stack with intermediate results.
abstract  MTBPolygon2DSet getCurrentSnakes()
          Returns a copy of the current snake(s).
 boolean[][] getExcludeMask()
          Returns the current exclude mask.
 MTBPolygon2DSet getInitialSnakes()
          Returns initial snake.
 MTBImage getInputImage()
          Returns input image.
 int getIterationCount()
          Returns the current iteration count.
 MTBImageRGB getResultSnakeImage()
          Returns image with snakes contours.
 MTBPolygon2DSet getResultSnakes()
          Returns the set of result snakes.
 int getSnakeNumber()
          Returns the number of snakes currently managed.
 MTBImageRGB getStackWithIntermediateResults()
          Returns a stack with intermediate segmentation results.
protected abstract  void initOptimizer()
          Initializes the optimizer.
protected  void operate()
           
private  void plotSnakesToImage()
          Returns overlay of output snakes onto current input image.
private static MTBImageRGB plotSnakesToImage(MTBPolygon2DSet polyset, MTBImage image, int[] colors)
          Returns overlay of given snakes onto given image.
abstract  void printParams()
          Print current parameter settings to standard output device.
protected  java.lang.Object readResolve()
          Init function for deserialized objects.
 void requireCounterClockwiseSnakePointOrder()
          Request snakes ordered counter-clockwise.
protected abstract  void saveSnake()
          Save intermediate results.
 void setExcludeMask(boolean[][] mask)
          Set exclude mask.
 void setInitialSnakes(MTBPolygon2DSet inS)
          Specify initial snakes.
 void setInputImage(MTBImage img)
          Specify an input image for the segmentation.
 void setIntermediateResultPath(java.lang.String path)
          Set path for intermediate results.
protected abstract  void showSnake()
          Display current result contour by overlaying the current snake result onto the input image.
 java.lang.String toString()
           
 void validateCustom()
           
 void wantStackWithIntermediateResults(boolean flag)
          Flag for turning on/off generation of stack with intermediate results.
 
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

counterClockwiseSnakePointOrderRequested

protected transient boolean counterClockwiseSnakePointOrderRequested
Flag to indicate if snakes are required to be sorted counter-clockwise.


energyData

@Parameter(label="Energy data",
           direction=OUT,
           required=false,
           dataIOOrder=10,
           description="Table of iteration-wise energies.")
protected transient MTBTableModel energyData

excludeMask

protected transient boolean[][] excludeMask
Mask to exclude image pixels from calculations.


iHeight

protected transient int iHeight
Image height.


inImg

@Parameter(label="Input Image",
           mode=STANDARD,
           direction=IN,
           required=true,
           description="Input Image.",
           dataIOOrder=0)
protected transient MTBImage inImg
Input image to be segmented.


initialSnakes

@Parameter(label="Initial Snake(s)",
           mode=STANDARD,
           direction=IN,
           required=true,
           description="Initial snakes.",
           dataIOOrder=1)
protected MTBPolygon2DSet initialSnakes
Set of initial snake contours.


intermediateResults

protected transient java.util.Vector<MTBPolygon2DSet> intermediateResults
Set of intermediate segmentation results, required for stack generation.


itCounter

protected transient int itCounter
Iteration counter.


iWidth

protected transient int iWidth
Image width.


outIntermediateResultsStack

@Parameter(label="Stack with Intermediate Results",
           direction=OUT,
           supplemental=true,
           description="Optional stack of intermediate segmentation results.")
protected transient MTBImageRGB outIntermediateResultsStack
Image stack with intermediate result images.


outIntermediateResultsStackInterval

@Parameter(label="Saving Interval for Stack",
           mode=ADVANCED,
           direction=IN,
           dataIOOrder=5,
           supplemental=true,
           description="Interval for saving results to stack.")
protected int outIntermediateResultsStackInterval
Interval for saving intermediate results in stack.

Note that memory issues might occur if number of iterations is high and the interval small...


outIntermediateResultsStackWanted

@Parameter(label="Show Intermediate Snakes Stack",
           mode=ADVANCED,
           direction=IN,
           dataIOOrder=4,
           supplemental=true,
           description="Flag to show stack with intermediate segmentations.")
protected java.lang.Boolean outIntermediateResultsStackWanted
Flag to request a stack of intermediate result images.


outSnakes

@Parameter(label="outSnakes",
           direction=OUT,
           description="Final snake(s).")
protected transient MTBPolygon2DSet outSnakes
Result contours.


outSnakesImg

@Parameter(label="Snake Plot",
           direction=OUT,
           description="Overlay with final snake(s).")
protected transient MTBImageRGB outSnakesImg
Image with final snake contours overlayed.


sampleEnergyData

@Parameter(label="Collect energy data",
           supplemental=true,
           direction=IN,
           required=false,
           dataIOOrder=15,
           description="Flag for collecting energy data in each iteration.")
protected java.lang.Boolean sampleEnergyData

saveIntermediateResults

@Parameter(label="Save Intermediate Results",
           mode=ADVANCED,
           direction=IN,
           dataIOOrder=2,
           supplemental=true,
           description="Save intermediate results to disc.")
protected java.lang.Boolean saveIntermediateResults
Flag to enable/disable saving of intermediate results.


saveIntermediateResultsPath

@Parameter(label="Save Intermediate Results To...",
           mode=ADVANCED,
           supplemental=true,
           direction=IN,
           dataIOOrder=3,
           description="Path for saving intermediate results.")
protected de.unihalle.informatik.Alida.datatypes.ALDDirectoryString saveIntermediateResultsPath
Path to where intermediate results should be stored.


showIntermediateResults

@Parameter(label="Show Intermediate Results",
           mode=STANDARD,
           direction=IN,
           dataIOOrder=1,
           supplemental=true,
           description="Show intermediate results to user.")
protected java.lang.Boolean showIntermediateResults
Flag to enable/disable showing of intermediate results.


snakeNum

protected transient int snakeNum
Number of snakes currently managed.

Constructor Detail

SnakeOptimizer

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

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

clone

public abstract SnakeOptimizer clone()
Overrides:
clone in class java.lang.Object

closeWindows

protected abstract void closeWindows()
Close all windows openened by this operator (for clean-up).


disableSaveIntermediateResults

public final void disableSaveIntermediateResults()
Deactivates writing of intermediate results.


disableShowIntermediateResults

public final void disableShowIntermediateResults()
Deactivates display of intermediate results.


doIteration

protected abstract SnakeOptimizer.Snake_status doIteration()
                                                    throws MTBException
Here the main work should be done.

Returns:
Indicates if the iteration was successful.
Throws:
MTBException

enableSaveIntermediateResults

public final void enableSaveIntermediateResults()
Activates writing of intermediate results to disc.


enableShowIntermediateResults

public final void enableShowIntermediateResults()
Activates display of intermediate results.


generateStackWithIntermediateResults

private void generateStackWithIntermediateResults()
Generates a stack with intermediate results.


getCurrentSnakes

public abstract MTBPolygon2DSet getCurrentSnakes()
Returns a copy of the current snake(s).

If the optimizer deals with a single snake, the set contains only a single snake polygon.

Returns:
Current set of snake contours.

getExcludeMask

public final boolean[][] getExcludeMask()
Returns the current exclude mask.

Returns:
Mask array, indicating which image pixels to exclude from calcs.

getInitialSnakes

public final MTBPolygon2DSet getInitialSnakes()
Returns initial snake.

Returns:
Set of initial snakes.
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException

getInputImage

public final MTBImage getInputImage()
Returns input image.

Returns:
Input image of operator.

getIterationCount

public final int getIterationCount()
Returns the current iteration count.


getResultSnakeImage

public MTBImageRGB getResultSnakeImage()
Returns image with snakes contours.

Returns:
Image with colored result snake contour overlay.
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException

getResultSnakes

public final MTBPolygon2DSet getResultSnakes()
Returns the set of result snakes.

Returns:
Set of snakes, object may be null!

getSnakeNumber

public final int getSnakeNumber()
Returns the number of snakes currently managed.

Returns:
Number of snakes currently handled by the optimizer.

getStackWithIntermediateResults

public final MTBImageRGB getStackWithIntermediateResults()
Returns a stack with intermediate segmentation results.

Returns:
Stack of intermediate segmentation results.

initOptimizer

protected abstract void initOptimizer()
                               throws de.unihalle.informatik.Alida.exceptions.ALDException
Initializes the optimizer.

Needs to be implemented by any derived class. This routine is automatically called on invoking the local operate routine.

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

operate

protected final void operate()
                      throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Overrides:
operate in class de.unihalle.informatik.Alida.operator.ALDOperatorControllable
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException

plotSnakesToImage

private void plotSnakesToImage()
Returns overlay of output snakes onto current input image.


plotSnakesToImage

private static MTBImageRGB plotSnakesToImage(MTBPolygon2DSet polyset,
                                             MTBImage image,
                                             int[] colors)
Returns overlay of given snakes onto given image.

Parameters:
polyset - Set of snakes.
image - Input image where to plot the snakes.
Returns:
Color image overlayed with snakes.

printParams

public abstract void printParams()
Print current parameter settings to standard output device.


readResolve

protected java.lang.Object readResolve()
Init function for 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 de.unihalle.informatik.Alida.operator.ALDOperator
Returns:

requireCounterClockwiseSnakePointOrder

public final void requireCounterClockwiseSnakePointOrder()
Request snakes ordered counter-clockwise.

This function is intended for energies which require a certain sorting of the snake points.


saveSnake

protected abstract void saveSnake()
Save intermediate results.


setExcludeMask

public final void setExcludeMask(boolean[][] mask)
Set exclude mask.


setInitialSnakes

public final void setInitialSnakes(MTBPolygon2DSet inS)
Specify initial snakes.

Parameters:
inS - Initial snakes.

setInputImage

public final void setInputImage(MTBImage img)
Specify an input image for the segmentation.

Parameters:
img - Input image.

setIntermediateResultPath

public final void setIntermediateResultPath(java.lang.String path)
Set path for intermediate results.


showSnake

protected abstract void showSnake()
Display current result contour by overlaying the current snake result onto the input image.


toString

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

validateCustom

public void validateCustom()
                    throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Overrides:
validateCustom in class de.unihalle.informatik.Alida.operator.ALDOperator
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException

wantStackWithIntermediateResults

public final void wantStackWithIntermediateResults(boolean flag)
Flag for turning on/off generation of stack with intermediate results.