#include <itkMorphologicalWatershedFromMarkersImageFilter.h>
Morphological watershed transform from markers.
The watershed transform is a tool for image segmentation that is fast and flexible and potentially fairly parameter free. It was originally derived from a geophysical model of rain falling on a terrain and a variety of more formal definitions have been devised to allow development of practical algorithms. If an image is considered as a terrain and divided into catchment basins then the hope is that each catchment basin would contain an object of interest.
The output is a label image. A label image, sometimes referred to as a categorical image, has unique values for each region. For example, if a watershed produces 2 regions, all pixels belonging to one region would have value A, and all belonging to the other might have value B. Unassigned pixels, such as watershed lines, might have the background value (0 by convention).
The simplest way of using the watershed is to preprocess the image we want to segment so that the boundaries of our objects are bright (e.g apply an edge detector) and compute the watershed transform of the edge image. Watershed lines will correspond to the boundaries and our problem will be solved. This is rarely useful in practice because there are always more regional minima than there are objects, either due to noise or natural variations in the object surfaces. Therefore, while many watershed lines do lie on significant boundaries, there are many that don't. Various methods can be used to reduce the number of minima in the image, like thresholding the smallest values, filtering the minima and/or smoothing the image.
This filter use another approach to avoid the problem of over segmentation: it let the user provide a marker image which mark the minima in the input image and give them a label. The minima are imposed in the input image by the markers. The labels of the output image are the label of the marker image.
The morphological watershed transform algorithm is described in [116].
This code was contributed in the Insight Journal paper: "The watershed transform in ITK - discussion and new developments" by Beare R., Lehmann G. https://doi.org/10.54294/lf8u75
Definition at line 80 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
Inheritance diagram for itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >:
Collaboration diagram for itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >:Public Member Functions | |
| virtual::itk::LightObject::Pointer | CreateAnother () const |
| const LabelImageType * | GetMarkerImage () const |
| virtual const char * | GetNameOfClass () const |
| void | SetInput1 (const TInputImage *input) |
| void | SetInput2 (const TLabelImage *input) |
| void | SetMarkerImage (const TLabelImage *input) |
| virtual void | SetFullyConnected (bool _arg) |
| virtual const bool & | GetFullyConnected () const |
| virtual void | FullyConnectedOn () |
| virtual void | FullyConnectedOff () |
| virtual void | SetMarkWatershedLine (bool _arg) |
| virtual const bool & | GetMarkWatershedLine () const |
| virtual void | MarkWatershedLineOn () |
| virtual void | MarkWatershedLineOff () |
Public Member Functions inherited from itk::ImageToImageFilter< TInputImage, TLabelImage > | |
| const InputImageType * | GetInput () const |
| const InputImageType * | GetInput () const |
| const InputImageType * | GetInput (unsigned int idx) const |
| const InputImageType * | GetInput (unsigned int idx) const |
| void | PopBackInput () override |
| void | PopBackInput () override |
| void | PopFrontInput () override |
| void | PopFrontInput () override |
| virtual void | PushBackInput (const InputImageType *input) |
| virtual void | PushBackInput (const InputImageType *input) |
| virtual void | PushFrontInput (const InputImageType *input) |
| virtual void | PushFrontInput (const InputImageType *input) |
| virtual void | SetInput (const InputImageType *input) |
| virtual void | SetInput (const InputImageType *input) |
| virtual void | SetInput (unsigned int, const TInputImage *image) |
| virtual void | SetInput (unsigned int, const TInputImage *image) |
| virtual void | SetCoordinateTolerance (double _arg) |
| virtual double | GetCoordinateTolerance () const |
| virtual void | SetCoordinateTolerance (double _arg) |
| virtual double | GetCoordinateTolerance () const |
| virtual void | SetDirectionTolerance (double _arg) |
| virtual double | GetDirectionTolerance () const |
| virtual void | SetDirectionTolerance (double _arg) |
| virtual double | GetDirectionTolerance () const |
Public Member Functions inherited from itk::ImageSource< TLabelImage > | |
| OutputImageType * | GetOutput (unsigned int idx) |
| virtual void | GraftNthOutput (unsigned int idx, DataObject *graft) |
| virtual void | GraftOutput (const DataObjectIdentifierType &key, DataObject *graft) |
| virtual void | GraftOutput (DataObject *graft) |
| OutputImageType * | GetOutput () |
| const OutputImageType * | GetOutput () const |
| ProcessObject::DataObjectPointer | MakeOutput (ProcessObject::DataObjectPointerArraySizeType idx) override |
| ProcessObject::DataObjectPointer | MakeOutput (const ProcessObject::DataObjectIdentifierType &) override |
Public Member Functions inherited from itk::ProcessObject | |
| virtual void | AbortGenerateDataOff () |
| virtual void | AbortGenerateDataOn () |
| virtual const bool & | GetAbortGenerateData () const |
| DataObjectPointerArray | GetIndexedInputs () |
| DataObjectPointerArray | GetIndexedOutputs () |
| NameArray | GetInputNames () const |
| DataObjectPointerArray | GetInputs () |
| MultiThreaderType * | GetMultiThreader () const |
| DataObjectPointerArraySizeType | GetNumberOfIndexedInputs () const |
| DataObjectPointerArraySizeType | GetNumberOfIndexedOutputs () const |
| DataObjectPointerArraySizeType | GetNumberOfInputs () const |
| DataObjectPointerArraySizeType | GetNumberOfOutputs () const |
| virtual DataObjectPointerArraySizeType | GetNumberOfValidRequiredInputs () const |
| NameArray | GetOutputNames () const |
| DataObjectPointerArray | GetOutputs () |
| virtual float | GetProgress () const |
| NameArray | GetRequiredInputNames () const |
| bool | HasInput (const DataObjectIdentifierType &key) const |
| bool | HasOutput (const DataObjectIdentifierType &key) const |
| void | IncrementProgress (float increment) |
| virtual void | PrepareOutputs () |
| virtual void | PropagateRequestedRegion (DataObject *output) |
| virtual void | ResetPipeline () |
| virtual void | SetAbortGenerateData (bool _arg) |
| void | SetMultiThreader (MultiThreaderType *threader) |
| virtual void | Update () |
| virtual void | UpdateLargestPossibleRegion () |
| virtual void | UpdateOutputData (DataObject *output) |
| virtual void | UpdateOutputInformation () |
| void | UpdateProgress (float progress) |
| virtual void | SetReleaseDataFlag (bool val) |
| virtual bool | GetReleaseDataFlag () const |
| void | ReleaseDataFlagOn () |
| void | ReleaseDataFlagOff () |
| virtual void | SetReleaseDataBeforeUpdateFlag (bool _arg) |
| virtual const bool & | GetReleaseDataBeforeUpdateFlag () const |
| virtual void | ReleaseDataBeforeUpdateFlagOn () |
| virtual void | ReleaseDataBeforeUpdateFlagOff () |
| virtual void | SetNumberOfWorkUnits (ThreadIdType _arg) |
| virtual const ThreadIdType & | GetNumberOfWorkUnits () const |
Public Member Functions inherited from itk::Object | |
| unsigned long | AddObserver (const EventObject &event, Command *cmd) const |
| unsigned long | AddObserver (const EventObject &event, std::function< void(const EventObject &)> function) const |
| LightObject::Pointer | CreateAnother () const override |
| virtual void | DebugOff () const |
| virtual void | DebugOn () const |
| Command * | GetCommand (unsigned long tag) |
| bool | GetDebug () const |
| MetaDataDictionary & | GetMetaDataDictionary () |
| const MetaDataDictionary & | GetMetaDataDictionary () const |
| virtual ModifiedTimeType | GetMTime () const |
| virtual const TimeStamp & | GetTimeStamp () const |
| bool | HasObserver (const EventObject &event) const |
| void | InvokeEvent (const EventObject &) |
| void | InvokeEvent (const EventObject &) const |
| virtual void | Modified () const |
| void | Register () const override |
| void | RemoveAllObservers () |
| void | RemoveObserver (unsigned long tag) const |
| void | SetDebug (bool debugFlag) const |
| void | SetReferenceCount (int) override |
| void | UnRegister () const noexcept override |
| void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
| void | SetMetaDataDictionary (MetaDataDictionary &&rrhs) |
| virtual void | SetObjectName (std::string _arg) |
| virtual const std::string & | GetObjectName () const |
Public Member Functions inherited from itk::LightObject | |
| Pointer | Clone () const |
| virtual void | Delete () |
| virtual int | GetReferenceCount () const |
| void | Print (std::ostream &os, Indent indent=0) const |
Static Public Member Functions | |
| static Pointer | New () |
Static Public Member Functions inherited from itk::ImageToImageFilter< TInputImage, TLabelImage > | |
| static double | GetGlobalDefaultCoordinateTolerance () |
| static double | GetGlobalDefaultCoordinateTolerance () |
| static double | GetGlobalDefaultDirectionTolerance () |
| static double | GetGlobalDefaultDirectionTolerance () |
| static void | SetGlobalDefaultCoordinateTolerance (double) |
| static void | SetGlobalDefaultCoordinateTolerance (double) |
| static void | SetGlobalDefaultDirectionTolerance (double) |
| static void | SetGlobalDefaultDirectionTolerance (double) |
Static Public Member Functions inherited from itk::Object | |
| static bool | GetGlobalWarningDisplay () |
| static void | GlobalWarningDisplayOff () |
| static void | GlobalWarningDisplayOn () |
| static Pointer | New () |
| static void | SetGlobalWarningDisplay (bool val) |
Static Public Member Functions inherited from itk::LightObject | |
| static void | BreakOnError () |
| static Pointer | New () |
Static Public Attributes | |
| static constexpr unsigned int | ImageDimension = TInputImage::ImageDimension |
Static Public Attributes inherited from itk::ImageToImageFilter< TInputImage, TLabelImage > | |
| static constexpr unsigned int | InputImageDimension |
| static constexpr unsigned int | InputImageDimension |
| static constexpr unsigned int | OutputImageDimension |
| static constexpr unsigned int | OutputImageDimension |
Static Public Attributes inherited from itk::ImageSource< TLabelImage > | |
| static constexpr unsigned int | OutputImageDimension |
Private Attributes | |
| bool | m_FullyConnected { false } |
| bool | m_MarkWatershedLine { true } |
Additional Inherited Members | |
Protected Types inherited from itk::ImageToImageFilter< TInputImage, TLabelImage > | |
| using | InputToOutputRegionCopierType |
| using | OutputToInputRegionCopierType |
Static Protected Member Functions inherited from itk::ImageSource< TLabelImage > | |
| static const ImageRegionSplitterBase * | GetGlobalDefaultSplitter () |
| static ITK_THREAD_RETURN_FUNCTION_CALL_CONVENTION | ThreaderCallback (void *arg) |
Static Protected Member Functions inherited from itk::ProcessObject | |
| template<typename TSourceObject> | |
| static void | MakeRequiredOutputs (TSourceObject &sourceObject, const DataObjectPointerArraySizeType numberOfRequiredOutputs) |
| static constexpr float | progressFixedToFloat (uint32_t fixed) |
| static uint32_t | progressFloatToFixed (float f) |
Protected Attributes inherited from itk::ImageSource< TLabelImage > | |
| bool | m_DynamicMultiThreading |
Protected Attributes inherited from itk::ProcessObject | |
| TimeStamp | m_OutputInformationMTime {} |
| bool | m_Updating {} |
Protected Attributes inherited from itk::LightObject | |
| std::atomic< int > | m_ReferenceCount {} |
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::ConstPointer = SmartPointer<const Self> |
Definition at line 90 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::IndexType = typename LabelImageType::IndexType |
Definition at line 104 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::InputImageConstPointer = typename InputImageType::ConstPointer |
Definition at line 96 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::InputImagePixelType = typename InputImageType::PixelType |
Definition at line 98 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::InputImagePointer = typename InputImageType::Pointer |
Definition at line 95 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::InputImageRegionType = typename InputImageType::RegionType |
Definition at line 97 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::InputImageType = TInputImage |
Some convenient type alias.
Definition at line 93 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::LabelImageConstPointer = typename LabelImageType::ConstPointer |
Definition at line 100 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::LabelImagePixelType = typename LabelImageType::PixelType |
Definition at line 102 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::LabelImagePointer = typename LabelImageType::Pointer |
Definition at line 99 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::LabelImageRegionType = typename LabelImageType::RegionType |
Definition at line 101 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::LabelImageType = TLabelImage |
Definition at line 94 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::Pointer = SmartPointer<Self> |
Definition at line 89 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::Self = MorphologicalWatershedFromMarkersImageFilter |
Standard class type aliases.
Definition at line 87 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
| using itk::MorphologicalWatershedFromMarkersImageFilter< TInputImage, TLabelImage >::Superclass = ImageToImageFilter<TInputImage, TLabelImage> |
Definition at line 88 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
|
protected |
Referenced by GetNameOfClass().
|
overrideprotecteddefault |
|
virtual |
Create an object from an instance, potentially deferring to a factory. This method allows you to create an instance of an object that is exactly the same type as the referring object. This is useful in cases where an object has been cast back to a base class.
Reimplemented from itk::LightObject.
|
overrideprotectedvirtual |
This filter will enlarge the output requested region to produce all of the output.
Reimplemented from itk::ProcessObject.
|
virtual |
Set/Get whether the connected components are defined strictly by face connectivity or by face+edge+vertex connectivity. Default is FullyConnectedOff. For objects that are 1 pixel wide, use FullyConnectedOn.
|
virtual |
Set/Get whether the connected components are defined strictly by face connectivity or by face+edge+vertex connectivity. Default is FullyConnectedOff. For objects that are 1 pixel wide, use FullyConnectedOn.
|
overrideprotectedvirtual |
The filter is single threaded.
Reimplemented from itk::ImageSource< TLabelImage >.
|
overrideprotectedvirtual |
MorphologicalWatershedFromMarkersImageFilter needs to request the entire input images.
Reimplemented from itk::ImageToImageFilter< TInputImage, TLabelImage >.
|
virtual |
Set/Get whether the connected components are defined strictly by face connectivity or by face+edge+vertex connectivity. Default is FullyConnectedOff. For objects that are 1 pixel wide, use FullyConnectedOn.
|
inline |
Get the marker image
Definition at line 125 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
References itk::ProcessObject::GetInput(), and itk::itkDynamicCastInDebugMode().
|
virtual |
Set/Get whether the watershed pixel must be marked or not. Default is true. Set it to false do not only avoid writing watershed pixels, it also decrease algorithm complexity.
|
virtual |
Reimplemented from itk::ImageToImageFilter< TInputImage, TLabelImage >.
References MorphologicalWatershedFromMarkersImageFilter().
|
virtual |
Set/Get whether the watershed pixel must be marked or not. Default is true. Set it to false do not only avoid writing watershed pixels, it also decrease algorithm complexity.
|
virtual |
Set/Get whether the watershed pixel must be marked or not. Default is true. Set it to false do not only avoid writing watershed pixels, it also decrease algorithm complexity.
|
static |
Standard New method.
|
overrideprotectedvirtual |
Methods invoked by Print() to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from itk::ImageToImageFilter< TInputImage, TLabelImage >.
|
virtual |
Set/Get whether the connected components are defined strictly by face connectivity or by face+edge+vertex connectivity. Default is FullyConnectedOff. For objects that are 1 pixel wide, use FullyConnectedOn.
|
inline |
Set the input image
Definition at line 132 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
References itk::ImageToImageFilter< TInputImage, TLabelImage >::SetInput().
|
inline |
Set the marker image
Definition at line 139 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
References SetMarkerImage().
|
inline |
Set the marker image
Definition at line 117 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
References itk::ProcessObject::SetNthInput().
Referenced by SetInput2().
|
virtual |
Set/Get whether the watershed pixel must be marked or not. Default is true. Set it to false do not only avoid writing watershed pixels, it also decrease algorithm complexity.
|
staticconstexpr |
ImageDimension constants
Definition at line 107 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
|
private |
Definition at line 188 of file itkMorphologicalWatershedFromMarkersImageFilter.h.
|
private |
Definition at line 190 of file itkMorphologicalWatershedFromMarkersImageFilter.h.