00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkLaplacianSegmentationLevelSetFunction_h_
00018 #define __itkLaplacianSegmentationLevelSetFunction_h_
00019
00020 #include "itkSegmentationLevelSetFunction.h"
00021
00022 namespace itk {
00023
00024
00030 template <class TImageType, class TFeatureImageType = TImageType>
00031 class ITK_EXPORT LaplacianSegmentationLevelSetFunction
00032 : public SegmentationLevelSetFunction<TImageType, TFeatureImageType>
00033 {
00034 public:
00036 typedef LaplacianSegmentationLevelSetFunction Self;
00037 typedef SegmentationLevelSetFunction<TImageType, TFeatureImageType> Superclass;
00038 typedef SmartPointer<Self> Pointer;
00039 typedef SmartPointer<const Self> ConstPointer;
00040 typedef TFeatureImageType FeatureImageType;
00041
00043 itkNewMacro(Self);
00044
00046 itkTypeMacro( LaplacianSegmentationLevelSetFunction, SegmentationLevelSetFunction );
00047
00049 typedef typename Superclass::ImageType ImageType;
00050 typedef typename Superclass::ScalarValueType ScalarValueType;
00051 typedef typename Superclass::FeatureScalarType FeatureScalarType;
00052 typedef typename Superclass::RadiusType RadiusType;
00053
00055 itkStaticConstMacro(ImageDimension, unsigned int,
00056 Superclass::ImageDimension);
00057
00058
00059 virtual void CalculateSpeedImage();
00060
00061 virtual void Initialize(const RadiusType &r)
00062 {
00063 Superclass::Initialize(r);
00064
00065 this->SetAdvectionWeight( NumericTraits<ScalarValueType>::Zero);
00066 this->SetPropagationWeight(-1.0 * NumericTraits<ScalarValueType>::One);
00067 this->SetCurvatureWeight(NumericTraits<ScalarValueType>::One);
00068 }
00069
00076 void SetAdvectionWeight(const ScalarValueType value)
00077 {
00078 if (value == NumericTraits<ScalarValueType>::Zero)
00079 {
00080 Superclass::SetAdvectionWeight(value);
00081 }
00082 }
00083
00084 protected:
00085
00086 LaplacianSegmentationLevelSetFunction()
00087 {
00088 this->SetAdvectionWeight(0.0);
00089 this->SetPropagationWeight(1.0);
00090 this->SetCurvatureWeight(1.0);
00091 }
00092 virtual ~LaplacianSegmentationLevelSetFunction() {}
00093
00094 LaplacianSegmentationLevelSetFunction(const Self&);
00095 void operator=(const Self&);
00096 };
00097
00098 }
00099
00100 #ifndef ITK_MANUAL_INSTANTIATION
00101 #include "itkLaplacianSegmentationLevelSetFunction.txx"
00102 #endif
00103
00104 #endif