17 #ifndef __itkLevelSetFunction_h
18 #define __itkLevelSetFunction_h
21 #include "vnl/vnl_matrix_fixed.h"
63 template <
class TImageType>
81 itkStaticConstMacro(ImageDimension,
unsigned int,Superclass::ImageDimension);
111 itkGetStaticConstMacro(ImageDimension),
112 itkGetStaticConstMacro(ImageDimension)>
m_dxy;
126 {
return m_ZeroVectorConstant; }
133 {
return NumericTraits<ScalarValueType>::Zero; }
140 {
return NumericTraits<ScalarValueType>::One; }
147 {
return NumericTraits<ScalarValueType>::One; }
151 { m_AdvectionWeight = a; }
153 {
return m_AdvectionWeight; }
157 { m_PropagationWeight = p; }
159 {
return m_PropagationWeight; }
163 { m_CurvatureWeight = c; }
165 {
return m_CurvatureWeight; }
169 { m_LaplacianSmoothingWeight = c; }
171 {
return m_LaplacianSmoothingWeight; }
175 { m_EpsilonMagnitude = e; }
177 {
return m_EpsilonMagnitude; }
180 virtual PixelType ComputeUpdate(
const NeighborhoodType &neighborhood,
182 const FloatOffsetType& = FloatOffsetType(0.0));
190 virtual TimeStepType ComputeGlobalTimeStep(
void *GlobalData)
const;
199 virtual void *GetGlobalDataPointer()
const
211 virtual void Initialize(
const RadiusType &r);
217 virtual void ReleaseGlobalDataPointer(
void *GlobalData)
const
221 virtual ScalarValueType ComputeCurvatureTerm(
const NeighborhoodType &,
222 const FloatOffsetType &,
223 GlobalDataStruct *gd = 0
225 virtual ScalarValueType ComputeMeanCurvature(
const NeighborhoodType &,
226 const FloatOffsetType &,
227 GlobalDataStruct *gd = 0
230 virtual ScalarValueType ComputeMinimalCurvature(
const NeighborhoodType &,
231 const FloatOffsetType &,
232 GlobalDataStruct *gd = 0
235 virtual ScalarValueType Compute3DMinimalCurvature(
const NeighborhoodType &,
236 const FloatOffsetType &,
237 GlobalDataStruct *gd = 0
241 void SetUseMinimalCurvature(
bool b )
243 m_UseMinimalCurvature = b;
245 bool GetUseMinimalCurvature()
const
247 return m_UseMinimalCurvature;
249 void UseMinimalCurvatureOn()
251 this->SetUseMinimalCurvature(
true);
253 void UseMinimalCurvatureOff()
255 this->SetUseMinimalCurvature(
false);
262 static void SetMaximumCurvatureTimeStep(
double n)
266 static double GetMaximumCurvatureTimeStep()
275 static void SetMaximumPropagationTimeStep(
double n)
279 static double GetMaximumPropagationTimeStep()
288 m_AdvectionWeight = m_PropagationWeight
289 = m_CurvatureWeight = m_LaplacianSmoothingWeight
290 = NumericTraits<ScalarValueType>::Zero;
291 m_UseMinimalCurvature =
false;
294 void PrintSelf(std::ostream &s,
Indent indent)
const;
301 std::slice x_slice[itkGetStaticConstMacro(ImageDimension)];
307 ::size_t m_xStride[itkGetStaticConstMacro(ImageDimension)];
313 static VectorType InitializeZeroVectorConstant();
335 void operator=(
const Self&);
341 #define ITK_TEMPLATE_LevelSetFunction(_, EXPORT, x, y) namespace itk { \
342 _(1(class EXPORT LevelSetFunction< ITK_TEMPLATE_1 x >)) \
343 namespace Templates { typedef LevelSetFunction< ITK_TEMPLATE_1 x > \
344 LevelSetFunction##y; } \
347 #if ITK_TEMPLATE_EXPLICIT
348 # include "Templates/itkLevelSetFunction+-.h"