@ALDDerivedClass @ALDAOperator(genericExecutionMode=ALL, level=APPLICATION) public class ChaudhuriMatchedFilter2D extends OrientedFilter2D
This filter is mainly used for segmenting vessel-like structures, e.g., refer to
Chaudhuri, S., Chatterjee, S., Katz, N., Nelson, M., and Goldbaum, M.,
"Detection of Blood Vessels in Retinal Images Using 2D Matched Filters",
IEEE Trans. on Medical Imaging, vol. 8, no. 3, September 1989
Target structures are assumed to exhibit a Gaussian-shaped cross-section. This is modeled by a Gaussian kernel with standard deviation $\sigma$.
Contrary to the paper this operator always uses square kernels, i.e. the
maximum of the kernel height and $2 \cdot 3 \cdot \sigma$
is used as kernel size.
In addition, the calculations are done in double
precision while the original paper uses integer precision only.
OrientedFilter2D.ApplicationMode
Modifier and Type | Field and Description |
---|---|
protected Double |
gaussStdDev
Standard deviation of the Gaussian.
|
protected Integer |
height
Height of the filter mask.
|
protected boolean |
invertMask
Flag to invert filter mask.
|
protected boolean |
normalizeMask
Flag to normalize sum of kernel elements to zero.
|
angle, inputImg, mode, resultImg, statusListeners
Constructor and Description |
---|
ChaudhuriMatchedFilter2D()
Default constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
disableNormalization()
Disable kernel normalization.
|
void |
enableNormalization()
Enable kernel normalization.
|
MTBImageDouble |
getKernel(double _angle)
Calculates kernel for given angle and pre-defined sigma and length.
|
protected Object |
readResolve()
Init function for deserialized objects.
|
void |
setHeight(int h)
Specify height of filter mask.
|
void |
setInvertMask(boolean b)
Enable/disable inversion of mask.
|
void |
setStandardDeviation(double s)
Specify standard deviation of Gaussian.
|
void |
validateCustom() |
addStatusListener, getApplicationMode, getResultImage, notifyListeners, operate, removeStatusListener, setAngle, setInputImage
addOperatorExecutionProgressEventListener, addParameter, addParameter, addParameterUnconditioned, fieldContained, fireOperatorExecutionProgressEvent, getALDPortHashAccessKey, getConstructionMode, getDocumentation, getHidingMode, getInactiveParameterNames, getInInoutNames, getInInoutNames, getInNames, getInOutNames, getMissingRequiredInputs, getName, getNumParameters, getOutInoutNames, getOutNames, getParameter, getParameterDescriptor, getParameterDescriptorUnconditioned, getParameterNames, getParameterUnconditioned, getSupplementalNames, getVerbose, getVersion, handleOperatorExecutionProgressEvent, hasInOutParameters, hasParameter, isAnnotatedParameter, isConfigured, print, print, print, printInterface, printInterface, readHistory, reinitializeParameterDescriptors, removeOperatorExecutionProgressEventListener, removeParameter, runOp, runOp, runOp, setConstructionMode, setConstructionMode, setConstructionMode, setHidingMode, setName, setParameter, setParameterUnconditioned, setVerbose, toStringVerbose, unconfiguredItems, validate, validateGeneric, writeHistory, writeHistory, writeHistory
@Parameter(label="\u03c3 of Gaussian", required=false, dataIOOrder=2, direction=IN, mode=STANDARD, description="Std. deviation of Gaussian.") protected Double gaussStdDev
The mask width is derived from the standard deviation of the Gaussian,
i.e. the width is given by
$w = 2 \cdot 3 \cdot (int)(\sigma+0.5)+1$.
Note that the minimum width is 3.
@Parameter(label="Mask Height", required=false, dataIOOrder=3, direction=IN, mode=STANDARD, description="Height of the filter mask.") protected Integer height
Note that the height of the mask must not be smaller than 3.
@Parameter(label="Invert Mask", required=false, dataIOOrder=5, direction=IN, mode=STANDARD, description="If true, filter mask is inverted.") protected boolean invertMask
As defined in the original paper the filter targets at filtering dark
structures on bright background.
To detect bright structures on dark
background the mask needs to be inverted.
@Parameter(label="Normalize Mask", required=false, dataIOOrder=4, direction=IN, mode=STANDARD, description="If true, mask is normalized to a sum of zero.") protected boolean normalizeMask
public ChaudhuriMatchedFilter2D() throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
protected Object readResolve()
MTBOperator
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.
readResolve
in class OrientedFilter2D
public void validateCustom() throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
validateCustom
in class de.unihalle.informatik.Alida.operator.ALDOperator
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
public MTBImageDouble getKernel(double _angle)
getKernel
in class OrientedFilter2D
_angle
- Rotation angle in degrees.public void setStandardDeviation(double s)
s
- Standard deviation $\sigma$.public void setHeight(int h)
h
- Height of mask.public void setInvertMask(boolean b)
b
- Flag for inversion.public void enableNormalization()
public void disableNormalization()
Copyright © 2010–2020 Martin Luther University Halle-Wittenberg, Institute of Computer Science, Pattern Recognition and Bioinformatics. All rights reserved.