de.unihalle.informatik.MiToBo.apps.cytoplasm2D
Class CytoplasmAnalyzer2D

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.apps.cytoplasm2D.CytoplasmAnalyzer2D
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=APPLICATION)
public class CytoplasmAnalyzer2D
extends MTBOperatorControllable

Operator to segment cell contours from a given single-layer image.

This operator allows to iteratively segment cell membrane and cytoplasm, respectively. It basically relies on snakes applying them either in an iterative fashion or without iterative levels. In the first case between the different snake runs the segmented cell regions are expanded by voronoi dilation and their internal areas are masked to enforce further region growth by decreasing the regions' average intensity values.

Further details about the iterative method can be found in the paper: B. Möller, N. Stöhr, S. Hüttelmaier and S. Posch, "Cascaded Segmentation of Grained Cell Tissue with Active Contour Models". In Proc. of Int. Conf. on Pattern Recognition (ICPR '10), August 2010.

Details about the non-iterative approach can be found in: B. Möller and S. Posch, "MiCA - Easy Cell Image Analysis with Normalized Snakes". In Proc. of Workshop on Microscopic Image Analysis with Applications in Biology (MIAAB '11), Heidelberg, Germany, Sep. 2011.

Author:
moeller

Nested Class Summary
static class CytoplasmAnalyzer2D.DetectMode
          Operator mode.
 
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[] activeSnakes
          Array with active snakes.
protected  int[] colorArray
          Array with colors for visualization.
protected  MTBPolygon2DSet currentSnakes
          Current set of snakes.
protected  CytoplasmAnalyzer2D.DetectMode detectionMode
          Operator mode to run.
private  int height
           
protected  MTBImage inImg
          Single-layer input image to be processed.
protected  MTBPolygon2DSet initialSnakes
          Initial snakes for cells, e.g. nuclei contours.
private  MTBImageByte labelImg
           
protected  int maxExpansion
          Maximum expansion by Voronoi dilation.
protected  int maxLevels
          Maximum number of levels to perform.
protected  double minAreaGrowth
          Lower threshold for region growth.
protected  double minIntensityVariance
          Minimum admissible variance in new snake interior fractions..
private static int MinSnakePointNum
          Minimum number of points acceptable for snakes.
protected  SegResult_Cytoplasm resultData
          Result data object.
protected  MTBImageRGB resultImage
          Result segmentation image.
protected  MTBPolygon2DSet resultSnakes
           
protected  boolean saveIntermediateResults
          Flag for saving intermediate results.
protected  java.lang.String saveIntermediateResultsPath
          Path where to save intermediate results.
protected  boolean showIntermediateResults
          Flag for displaying intermediate results.
private  int[] snakeArea
           
private  int snakeNum
          Number of snakes.
protected  SnakeOptimizerCoupled snakeOpter
          Snake optimizer.
private  int width
           
 
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
CytoplasmAnalyzer2D()
          Default constructor.
CytoplasmAnalyzer2D(MTBImage img, MTBPolygon2DSet initS, SnakeOptimizerCoupled snakeObj, CytoplasmAnalyzer2D.DetectMode m, int _maxLevels)
          Default constructor.
 
Method Summary
 void disableSaveIntermediateResults()
          Do not save intermediate results.
 void disableShowIntermediateResults()
          Disable display of intermediate results.
 void enableSaveIntermediateResults()
          Save intermediate results.
 void enableShowIntermediateResults()
          Enable display of intermediate results.
 int getMaxLevels()
          Returns maximum number of levels in iterative mode.
 SegResult_Cytoplasm getResultData()
          Returns result data object.
protected  void operate()
           
private  void runIterativeMode()
          Cell tissue segmentation in an iterative fashion.
private  void runMeanVarMode()
          Deprecated. 
 void setDetectionMode(CytoplasmAnalyzer2D.DetectMode m)
          Specify detection mode.
 void setInitialSnakes(MTBPolygon2DSet snakes)
          Specify initial snakes.
 void setInputImage(MTBImage img)
          Specify input image.
 void setIntermediateResultDirectory(java.lang.String dir)
          Set intermediate result directory.
 void setMaxLevels(int maxL)
          Specify maximum number of levels for iterative mode.
 
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, readResolve, reinitializeParameterDescriptors, runOp, runOp, runOp, serializeToXmlFile, setConstructionMode, setName, setParameter, setParametersFromXml, setParametersFromXml, setVerbose, toStringVerbose, unconfiguredItems, validate, validateCustom, validateGeneric, writeHistory, writeHistory, writeHistory, writeParametersToXml
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

activeSnakes

protected transient boolean[] activeSnakes
Array with active snakes.


colorArray

protected transient int[] colorArray
Array with colors for visualization.


currentSnakes

protected transient MTBPolygon2DSet currentSnakes
Current set of snakes.


detectionMode

@Parameter(label="Operation mode",
           required=false,
           direction=IN,
           description="Mode of operation.",
           dataIOOrder=-15,
           mode=ADVANCED)
protected CytoplasmAnalyzer2D.DetectMode detectionMode
Operator mode to run.


height

private transient int height

inImg

@Parameter(label="Input image",
           required=true,
           direction=IN,
           description="Input Image.",
           dataIOOrder=-20,
           mode=STANDARD)
protected transient MTBImage inImg
Single-layer input image to be processed.


initialSnakes

@Parameter(label="Initial snake(s)",
           required=true,
           direction=IN,
           description="Initial snakes.",
           dataIOOrder=-19,
           mode=STANDARD)
protected MTBPolygon2DSet initialSnakes
Initial snakes for cells, e.g. nuclei contours.


labelImg

private transient MTBImageByte labelImg

maxExpansion

@Parameter(label="Max. distance in voronoi expansion",
           required=false,
           direction=IN,
           description="Maximum expansion during Voronoi dilation.",
           dataIOOrder=-13,
           mode=ADVANCED)
protected int maxExpansion
Maximum expansion by Voronoi dilation.


maxLevels

@Parameter(label="Max. level count",
           required=false,
           direction=IN,
           description="Maximum levels in iterative mode.",
           dataIOOrder=-14,
           mode=ADVANCED)
protected int maxLevels
Maximum number of levels to perform.


minAreaGrowth

@Parameter(label="Min. area growth",
           required=false,
           direction=IN,
           description="Minimum admissible area growth between iterations.",
           dataIOOrder=-12,
           mode=ADVANCED)
protected double minAreaGrowth
Lower threshold for region growth.


minIntensityVariance

@Parameter(label="Min. intensity variance",
           required=false,
           direction=IN,
           description="Minimum admissible area growth between iterations.",
           dataIOOrder=-11,
           mode=ADVANCED)
protected double minIntensityVariance
Minimum admissible variance in new snake interior fractions..


MinSnakePointNum

private static final int MinSnakePointNum
Minimum number of points acceptable for snakes.

See Also:
Constant Field Values

resultData

@Parameter(label="Result Statistics",
           required=true,
           direction=OUT,
           description="Result data object.")
protected transient SegResult_Cytoplasm resultData
Result data object.


resultImage

@Parameter(label="Result image",
           required=true,
           direction=OUT,
           description="Result image showing snakes in overlay.")
protected transient MTBImageRGB resultImage
Result segmentation image.


resultSnakes

@Parameter(label="Result snakes",
           direction=OUT,
           description="Final snakes.",
           required=false)
protected transient MTBPolygon2DSet resultSnakes

saveIntermediateResults

@Parameter(label="Save intermediate results",
           supplemental=true,
           direction=IN,
           dataIOOrder=-2,
           description="Save intermediate results to disc.")
protected boolean saveIntermediateResults
Flag for saving intermediate results.


saveIntermediateResultsPath

@Parameter(label="Save intermediate results path",
           supplemental=true,
           direction=IN,
           dataIOOrder=-1,
           description="Path for saving (intermediate) results.")
protected java.lang.String saveIntermediateResultsPath
Path where to save intermediate results.


showIntermediateResults

@Parameter(label="Show intermediate results",
           supplemental=true,
           direction=IN,
           dataIOOrder=-3,
           description="Show intermediate results to user.")
protected boolean showIntermediateResults
Flag for displaying intermediate results.


snakeArea

private transient int[] snakeArea

snakeNum

private transient int snakeNum
Number of snakes.


snakeOpter

@Parameter(label="Snake optimizer",
           required=true,
           direction=IN,
           description="Snake optimizer object.",
           dataIOOrder=-18,
           mode=STANDARD)
protected SnakeOptimizerCoupled snakeOpter
Snake optimizer.


width

private transient int width
Constructor Detail

CytoplasmAnalyzer2D

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

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

CytoplasmAnalyzer2D

public CytoplasmAnalyzer2D(MTBImage img,
                           MTBPolygon2DSet initS,
                           SnakeOptimizerCoupled snakeObj,
                           CytoplasmAnalyzer2D.DetectMode m,
                           int _maxLevels)
                    throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Default constructor.

Parameters:
inImg - Image to work on.
initS - Set of initial contours.
snakeObj - Snake parameter configuration object.
m - Detection mode.
maxLevels - Maximum number of levels.
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Method Detail

disableSaveIntermediateResults

public void disableSaveIntermediateResults()
Do not save intermediate results.


disableShowIntermediateResults

public void disableShowIntermediateResults()
Disable display of intermediate results.


enableSaveIntermediateResults

public void enableSaveIntermediateResults()
Save intermediate results.


enableShowIntermediateResults

public void enableShowIntermediateResults()
Enable display of intermediate results.


getMaxLevels

public int getMaxLevels()
Returns maximum number of levels in iterative mode.


getResultData

public SegResult_Cytoplasm getResultData()
Returns result data object.


operate

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

runIterativeMode

private void runIterativeMode()
                       throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException,
                              de.unihalle.informatik.Alida.exceptions.ALDProcessingDAGException
Cell tissue segmentation in an iterative fashion.

Initial contours are first expanded by dilation and then iteratively optimized using snakes. After each iteration region growth is assessed, and if it gets too small, segmentation terminates. If not, contours are again expanded and segmentation continues.

For details see:

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

runMeanVarMode

@Deprecated
private void runMeanVarMode()
                     throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException,
                            de.unihalle.informatik.Alida.exceptions.ALDProcessingDAGException
Deprecated. 

Cell tissue segmentation in an iterative fashion.

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

setDetectionMode

public void setDetectionMode(CytoplasmAnalyzer2D.DetectMode m)
Specify detection mode.


setInitialSnakes

public void setInitialSnakes(MTBPolygon2DSet snakes)
Specify initial snakes.


setInputImage

public void setInputImage(MTBImage img)
Specify input image.


setIntermediateResultDirectory

public void setIntermediateResultDirectory(java.lang.String dir)
Set intermediate result directory.


setMaxLevels

public void setMaxLevels(int maxL)
Specify maximum number of levels for iterative mode.