00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef __itkGeodesicActiveContourShapePriorLevelSetFunction_h_
00018
#define __itkGeodesicActiveContourShapePriorLevelSetFunction_h_
00019
00020
#include "itkShapePriorSegmentationLevelSetFunction.h"
00021
00022
namespace itk {
00023
00090
template <
class TImageType,
class TFeatureImageType = TImageType>
00091 class ITK_EXPORT GeodesicActiveContourShapePriorLevelSetFunction
00092 :
public ShapePriorSegmentationLevelSetFunction<TImageType, TFeatureImageType>
00093 {
00094
public:
00096 typedef GeodesicActiveContourShapePriorLevelSetFunction
Self;
00097 typedef ShapePriorSegmentationLevelSetFunction<TImageType,TFeatureImageType> Superclass;
00098 typedef SmartPointer<Self> Pointer;
00099 typedef SmartPointer<const Self> ConstPointer;
00100 typedef TFeatureImageType
FeatureImageType;
00101
00103
itkNewMacro(
Self);
00104
00106
itkTypeMacro( GeodesicActiveContourShapePriorLevelSetFunction,
00107
ShapePriorSegmentationLevelSetFunction );
00108
00110 typedef typename Superclass::ImageType
ImageType;
00111 typedef typename Superclass::NeighborhoodType
NeighborhoodType;
00112 typedef typename Superclass::ScalarValueType
ScalarValueType;
00113 typedef typename Superclass::FeatureScalarType
FeatureScalarType;
00114 typedef typename Superclass::RadiusType
RadiusType;
00115 typedef typename Superclass::FloatOffsetType
FloatOffsetType;
00116 typedef typename Superclass::VectorImageType
VectorImageType;
00117 typedef typename Superclass::GlobalDataStruct
GlobalDataStruct;
00118
00120
itkStaticConstMacro(ImageDimension,
unsigned int,
00121 Superclass::ImageDimension);
00122
00124
virtual void CalculateSpeedImage();
00125
00127
virtual void CalculateAdvectionImage();
00128
00130 virtual ScalarValueType CurvatureSpeed(
const NeighborhoodType & neighborhood,
00131
const FloatOffsetType & offset,
GlobalDataStruct *gd )
const
00132
{
return PropagationSpeed( neighborhood, offset, gd ); }
00133
00136 void SetDerivativeSigma(
const double v )
00137 { m_DerivativeSigma = v; }
00138 double GetDerivativeSigma()
00139 {
return m_DerivativeSigma; };
00140
00141
virtual void Initialize(
const RadiusType &r)
00142 {
00143 Superclass::Initialize(r);
00144
00145 this->SetAdvectionWeight(
NumericTraits<ScalarValueType>::One );
00146 this->SetPropagationWeight(
NumericTraits<ScalarValueType>::One );
00147 this->SetCurvatureWeight(
NumericTraits<ScalarValueType>::One );
00148 this->SetShapePriorWeight(
NumericTraits<ScalarValueType>::One );
00149 }
00150
00151
protected:
00152 GeodesicActiveContourShapePriorLevelSetFunction()
00153 {
00154 this->SetAdvectionWeight(
NumericTraits<ScalarValueType>::One );
00155 this->SetPropagationWeight(
NumericTraits<ScalarValueType>::One );
00156 this->SetCurvatureWeight(
NumericTraits<ScalarValueType>::One );
00157 this->SetShapePriorWeight(
NumericTraits<ScalarValueType>::One );
00158
00159 m_DerivativeSigma = 1.0;
00160 }
00161
00162
virtual ~GeodesicActiveContourShapePriorLevelSetFunction() {}
00163
00164 GeodesicActiveContourShapePriorLevelSetFunction(
const Self&);
00165
void operator=(
const Self&);
00166
00167
void PrintSelf(std::ostream& os,
Indent indent)
const
00168 {
00169
Superclass::PrintSelf(os, indent );
00170 os << indent <<
"DerivativeSigma: " << m_DerivativeSigma << std::endl;
00171 }
00172
00173
private:
00174
00175
double m_DerivativeSigma;
00176
00177 };
00178
00179 }
00180
00181
#ifndef ITK_MANUAL_INSTANTIATION
00182
#include "itkGeodesicActiveContourShapePriorLevelSetFunction.txx"
00183
#endif
00184
00185
#endif