de.unihalle.informatik.MiToBo.filters.vesselness
Class MPMFFilter2D

java.lang.Object
  extended by de.unihalle.informatik.Alida.operator.ALDOperator
      extended by de.unihalle.informatik.MiToBo.core.operator.MTBOperator
          extended by de.unihalle.informatik.MiToBo.filters.vesselness.MPMFFilter2D
All Implemented Interfaces:
de.unihalle.informatik.Alida.datatypes.ALDConfigurationValidator, de.unihalle.informatik.Alida.operator.events.ALDOperatorExecutionProgressEventListener, EventListener, loci.common.StatusReporter

@ALDAOperator(genericExecutionMode=ALL,
              level=APPLICATION)
public class MPMFFilter2D
extends MTBOperator
implements loci.common.StatusReporter

Multiscale Production of the Matched Filter (MPMF) implementation.

This operator applies matched filters on multiple scales. The results are then combined by pairwise multiplication followed by hysteresis thresholding of each resulting product. Finally, all binary images are combined into a single result map applying logical OR operations.

As matched filters a second order Gaussian derivative filter, i.e., a Mexican hat filter function is applied. Here we use MiToBo's implementation of such a filter which is to be found in class GaussPDxxFilter2D.

Related publication:
Q. Li, J. You, and D. Zhang, "Vessel Segmentation and Width Estimation in Retinal Images using Multiscale Production of Matched Filter Responses", Expert Systems with Applications, 39 (2012), pp. 7600-7610.

Here we assume vessels to exhibit a Gaussian profile (while in the paper a box profile is assumed). The width of the vessels is defined as two-times the standard deviation of the Gaussian kernel mask. To normalize the filter responses of different scales we follow the scheme proposed in

Sofka and Stewart, "Retinal Vessel Centerline Extraction Using Multiscale Matched Filters, Confidence and Edge Measures", IEEE TMI, vol. 25, no. 12, pp. 1531-1546, December 2006,

i.e. apply $(\sigma \cdot \sigma)^{\frac{3}{4}}$ as normalization factor at scale $\sigma$.

Author:
Birgit Moeller

Nested Class Summary
static class MPMFFilter2D.VesselMode
          Detection scenario mode.
 
Nested classes/interfaces inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
de.unihalle.informatik.Alida.operator.ALDOperator.HidingMode
 
Field Summary
protected  int angleSampling
          Sampling step size for orientations considered.
protected  MTBImage inputImg
          Input image to be processed.
protected  double maxWidth
          Expected width of thick vessels.
protected  double minWidth
          Expected width of thin vessels.
protected  MPMFFilter2D.VesselMode mode
          Scenario for detecting vessels, i.e. relation of foreground to background.
protected  MTBImageByte resultVesselMap
          Resulting binary vessel map.
protected  Vector<loci.common.StatusListener> statusListeners
          Vector of installed StatusListeners.
protected  double threshold
          Higher threshold for binarization.
 
Fields inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
completeDAG, name, operatorExecutionEventlistenerList, portHashAccess, verbose, versionProvider
 
Constructor Summary
MPMFFilter2D()
          Default constructor.
 
Method Summary
 void addStatusListener(loci.common.StatusListener statuslistener)
           
protected  double findMiddleScale(double minScale, double maxScale)
          Numerically finds the middle scale between to given scales.
 MTBImageByte getBinaryResultMap()
          Returns the final binary map.
 MTBImageDouble getResponseStack()
          Returns stack with intermediate (non-binary) results.
protected static double normalizedFilterResponse(double vScale, double fScale)
          Computes the (ideal) filter response to the Gaussian derivative kernel.
 void notifyListeners(loci.common.StatusEvent e)
           
protected  void operate()
           
protected  Object readResolve()
          Init function for deserialized objects.
 void removeStatusListener(loci.common.StatusListener statuslistener)
           
 void validateCustom()
           
 
Methods inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
addOperatorExecutionProgressEventListener, fieldContained, fireOperatorExecutionProgressEvent, getALDPortHashAccessKey, getConstructionMode, getHidingMode, getInInoutNames, getInInoutNames, getInNames, getInOutNames, getMissingRequiredInputs, getName, getNumParameters, getOutInoutNames, getOutNames, getParameter, getParameterDescriptor, getParameterNames, getSupplementalNames, getVerbose, getVersion, handleOperatorExecutionProgressEvent, isConfigured, print, print, print, printInterface, printInterface, readHistory, reinitializeParameterDescriptors, removeOperatorExecutionProgressEventListener, runOp, runOp, runOp, setConstructionMode, setHidingMode, setName, setParameter, setVerbose, toStringVerbose, unconfiguredItems, validate, validateGeneric, writeHistory, writeHistory, writeHistory
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

statusListeners

protected transient Vector<loci.common.StatusListener> statusListeners
Vector of installed StatusListeners.


inputImg

@Parameter(label="Input Image",
           required=true,
           dataIOOrder=-10,
           direction=IN,
           mode=STANDARD,
           description="Input image.")
protected transient MTBImage inputImg
Input image to be processed.


mode

@Parameter(label="Scenario",
           required=true,
           dataIOOrder=1,
           direction=IN,
           mode=STANDARD,
           description="Relation of vessels to background.")
protected MPMFFilter2D.VesselMode mode
Scenario for detecting vessels, i.e. relation of foreground to background.


minWidth

@Parameter(label="Thin Vessel Width",
           required=true,
           dataIOOrder=2,
           direction=IN,
           mode=STANDARD,
           description="Expected width of thin vessels.")
protected double minWidth
Expected width of thin vessels.


maxWidth

@Parameter(label="Thick Vessel Width",
           required=true,
           dataIOOrder=3,
           direction=IN,
           mode=STANDARD,
           description="Expected width of thick vessels.")
protected double maxWidth
Expected width of thick vessels.


angleSampling

@Parameter(label="Angular Sampling Steps",
           required=true,
           direction=IN,
           mode=ADVANCED,
           description="Angular sampling step size (in degrees).",
           dataIOOrder=5)
protected int angleSampling
Sampling step size for orientations considered.


threshold

@Parameter(label="(Upper) Threshold",
           required=false,
           dataIOOrder=0,
           direction=IN,
           mode=ADVANCED,
           description="Binarization threshold, if set to -1 a threshold is determined automatically.")
protected double threshold
Higher threshold for binarization.


resultVesselMap

@Parameter(label="Result Map",
           dataIOOrder=0,
           direction=OUT,
           description="Resulting vessel map.")
protected transient MTBImageByte resultVesselMap
Resulting binary vessel map.

Constructor Detail

MPMFFilter2D

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

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

getBinaryResultMap

public MTBImageByte getBinaryResultMap()
Returns the final binary map.

Returns:
Binary result map.

getResponseStack

public MTBImageDouble getResponseStack()
Returns stack with intermediate (non-binary) results.

Note that the stack is only created if the verbose mode is activated.

Returns:
Stack with intermediate results.

readResolve

protected Object readResolve()
Description copied from class: MTBOperator
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 MTBOperator
Returns:
Updated deserialized 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

operate

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

findMiddleScale

protected double findMiddleScale(double minScale,
                                 double maxScale)
Numerically finds the middle scale between to given scales.

Parameters:
minScale - Scale of thin vessels (given as standard deviation).
maxScale - Scale of thick vessels (given as standard deviation).
Returns:
Standard deviation of middle scale.

addStatusListener

public void addStatusListener(loci.common.StatusListener statuslistener)
Specified by:
addStatusListener in interface loci.common.StatusReporter

notifyListeners

public void notifyListeners(loci.common.StatusEvent e)
Specified by:
notifyListeners in interface loci.common.StatusReporter

removeStatusListener

public void removeStatusListener(loci.common.StatusListener statuslistener)
Specified by:
removeStatusListener in interface loci.common.StatusReporter

normalizedFilterResponse

protected static double normalizedFilterResponse(double vScale,
                                                 double fScale)
Computes the (ideal) filter response to the Gaussian derivative kernel.

The function returns the result of convolving a Gaussian function centered at $x=0$ and having a standard deviation of %preamble{\usepackage{amssymb, amsmath}} (defining the model of a vessel) with a second derivative Gaussian matched filter with standard deviation %preamble{\usepackage{amssymb, amsmath}} .The result is normalized as proposed in Sofka et al.

Parameters:
vScale - Standard deviation of the Gaussian vessel function.
fScale - Standard deviation of the matched filter kernel.
Returns:
Normalized filter response.


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