25 #ifndef WSEGMENTATIONALGOLEVELSETCANNY_H
26 #define WSEGMENTATIONALGOLEVELSETCANNY_H
33 #include "itkCannySegmentationLevelSetImageFilter.h"
34 #include "itkGradientAnisotropicDiffusionImageFilter.h"
35 #include "itkCastImageFilter.h"
37 #include "core/dataHandler/WITKImageConversion.h"
39 #include "WSegmentationAlgo.h"
52 WSegmentationAlgoLevelSetCanny();
57 virtual ~WSegmentationAlgoLevelSetCanny();
84 template<
typename T >
100 WPropInt m_smoothingIter;
103 WPropDouble m_conductance;
109 WPropDouble m_variance;
112 WPropDouble m_threshold;
115 template<
typename T >
118 typedef itk::Image< T, 3 > ImgType;
119 typedef itk::Image< float, 3 > RealType;
121 typedef itk::GradientAnisotropicDiffusionImageFilter< ImgType, RealType > SmoothingType;
122 typedef itk::CannySegmentationLevelSetImageFilter< RealType, RealType > CannyLSFilter;
123 typedef itk::CastImageFilter< ImgType, RealType > CastFilter;
125 typename ImgType::Pointer image = makeImageFromDataSet< T >( m_dataSet );
126 typename SmoothingType::Pointer smoothing = SmoothingType::New();
127 typename CannyLSFilter::Pointer levelset = CannyLSFilter::New();
128 typename CastFilter::Pointer cast = CastFilter::New();
130 smoothing->SetNumberOfIterations( m_smoothingIter->get(
true ) );
131 smoothing->SetTimeStep( 0.0625 );
132 smoothing->SetConductanceParameter( m_conductance->get(
true ) );
133 smoothing->SetInput( image );
135 cast->SetInput( image );
137 levelset->SetAdvectionScaling( 1.0 );
138 levelset->SetCurvatureScaling( 1.0 );
139 levelset->SetPropagationScaling( 0.0 );
140 levelset->SetMaximumRMSError( 0.01 );
141 levelset->SetNumberOfIterations( 10 );
142 levelset->SetThreshold( m_threshold->get(
true ) / 100.0 );
143 levelset->SetVariance( m_variance->get(
true ) );
144 levelset->SetIsoSurfaceValue( m_level->get(
true ) );
145 levelset->SetInput( cast->GetOutput() );
146 levelset->SetFeatureImage( smoothing->GetOutput() );
154 throw WException(
"Problem in Level Set Segmentation 1" );
156 return makeDataSetFromImage< float >( levelset->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.