00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef __itkGeodesicActiveContourLevelSetFunction_h_
00018
#define __itkGeodesicActiveContourLevelSetFunction_h_
00019
00020
#include "itkSegmentationLevelSetFunction.h"
00021
00022
namespace itk {
00023
00074
template <
class TImageType,
class TFeatureImageType = TImageType>
00075 class ITK_EXPORT GeodesicActiveContourLevelSetFunction
00076 :
public SegmentationLevelSetFunction<TImageType, TFeatureImageType>
00077 {
00078
public:
00080 typedef GeodesicActiveContourLevelSetFunction
Self;
00081 typedef SegmentationLevelSetFunction<TImageType, TFeatureImageType> Superclass;
00082 typedef SmartPointer<Self> Pointer;
00083 typedef SmartPointer<const Self> ConstPointer;
00084 typedef TFeatureImageType
FeatureImageType;
00085
00087
itkNewMacro(
Self);
00088
00090
itkTypeMacro( GeodesicActiveContourLevelSetFunction,
SegmentationLevelSetFunction );
00091
00093 typedef typename Superclass::ImageType
ImageType;
00094 typedef typename Superclass::NeighborhoodType
NeighborhoodType;
00095 typedef typename Superclass::ScalarValueType
ScalarValueType;
00096 typedef typename Superclass::FeatureScalarType
FeatureScalarType;
00097 typedef typename Superclass::RadiusType
RadiusType;
00098 typedef typename Superclass::FloatOffsetType
FloatOffsetType;
00099 typedef typename Superclass::VectorImageType
VectorImageType;
00100 typedef typename Superclass::GlobalDataStruct
GlobalDataStruct;
00101
00103
itkStaticConstMacro(ImageDimension,
unsigned int,
00104 Superclass::ImageDimension);
00105
00107
virtual void CalculateSpeedImage();
00108
00110
virtual void CalculateAdvectionImage();
00111
00113 virtual ScalarValueType CurvatureSpeed(
const NeighborhoodType & neighborhood,
00114
const FloatOffsetType & offset,
GlobalDataStruct *gd )
const
00115
{
return PropagationSpeed( neighborhood, offset, gd ); }
00116
00119 void SetDerivativeSigma(
const double v )
00120 { m_DerivativeSigma = v; }
00121 double GetDerivativeSigma()
00122 {
return m_DerivativeSigma; };
00123
00124
virtual void Initialize(
const RadiusType &r)
00125 {
00126 Superclass::Initialize(r);
00127
00128 this->SetAdvectionWeight(
NumericTraits<ScalarValueType>::One );
00129 this->SetPropagationWeight(
NumericTraits<ScalarValueType>::One );
00130 this->SetCurvatureWeight(
NumericTraits<ScalarValueType>::One );
00131 }
00132
00133
protected:
00134 GeodesicActiveContourLevelSetFunction()
00135 {
00136 this->SetAdvectionWeight(
NumericTraits<ScalarValueType>::One );
00137 this->SetPropagationWeight(
NumericTraits<ScalarValueType>::One );
00138 this->SetCurvatureWeight(
NumericTraits<ScalarValueType>::One );
00139
00140 m_DerivativeSigma = 1.0;
00141 }
00142
virtual ~GeodesicActiveContourLevelSetFunction() {}
00143
00144 GeodesicActiveContourLevelSetFunction(
const Self&);
00145
void operator=(
const Self&);
00146
00147
void PrintSelf(std::ostream& os,
Indent indent)
const
00148 {
00149
Superclass::PrintSelf(os, indent );
00150 os << indent <<
"DerivativeSigma: " << m_DerivativeSigma << std::endl;
00151 }
00152
00153
private:
00154
00155
double m_DerivativeSigma;
00156
00157 };
00158
00159 }
00160
00161
#ifndef ITK_MANUAL_INSTANTIATION
00162
#include "itkGeodesicActiveContourLevelSetFunction.txx"
00163
#endif
00164
00165
#endif