25 #ifndef WSEGMENTATIONALGOWATERSHED_H
26 #define WSEGMENTATIONALGOWATERSHED_H
33 #include "itkWatershedImageFilter.h"
34 #include "itkGradientAnisotropicDiffusionImageFilter.h"
35 #include "itkCastImageFilter.h"
36 #include "itkGradientMagnitudeImageFilter.h"
38 #include "core/dataHandler/WITKImageConversion.h"
40 #include "WSegmentationAlgo.h"
54 WSegmentationAlgoWatershed();
59 virtual ~WSegmentationAlgoWatershed();
86 template<
typename T >
102 WPropDouble m_threshold;
111 WPropDouble m_conductance;
114 template<
typename T >
117 typedef itk::Image< T, 3 > ImgType;
118 typedef itk::Image< double, 3 > RealType;
119 typedef itk::Image< uint64_t, 3 > LabelType;
120 typedef itk::Image< float, 3 > FinalType;
122 typedef itk::GradientAnisotropicDiffusionImageFilter< ImgType, RealType > SmoothingType;
123 typedef itk::CastImageFilter< LabelType, FinalType > CastFilter;
124 typedef itk::GradientMagnitudeImageFilter< RealType, RealType > GradFilter;
125 typedef itk::WatershedImageFilter< RealType > WaterFilter;
127 typename ImgType::Pointer image = makeImageFromDataSet< T >( m_dataSet );
128 typename SmoothingType::Pointer smoothing = SmoothingType::New();
129 typename CastFilter::Pointer cast = CastFilter::New();
130 typename GradFilter::Pointer gradientMagnitude = GradFilter::New();
131 typename WaterFilter::Pointer watershed = WaterFilter::New();
133 smoothing->SetNumberOfIterations( m_iter->get(
true ) );
134 smoothing->SetTimeStep( 0.0625 );
135 smoothing->SetConductanceParameter( m_conductance->get(
true ) );
136 smoothing->SetInput( image );
137 gradientMagnitude->SetInput( smoothing->GetOutput() );
138 watershed->SetInput( gradientMagnitude->GetOutput() );
139 watershed->SetLevel( m_level->get(
true ) / 100.0 );
140 watershed->SetThreshold( m_threshold->get(
true ) / 100.0 );
141 cast->SetInput( watershed->GetOutput() );
143 return makeDataSetFromImage< float >( cast->GetOutput() );
A base class for segmentation alorithms.
virtual void properties()=0
Initialize your algorithms properties here.
virtual std::string getName()=0
Return the name of this algorithm.
std::shared_ptr< WDataSetScalar > DataSetPtr
A conveniant typedef.
virtual DataSetPtr applyOperation()=0
A virtual function that calls the correct segmentation operation.
virtual bool propChanged()=0
Checks if any properties were changed.
virtual std::string getDescription()=0
Return a description of this algorithm.
Base Class for all value set types.