00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _itkSymmetricForcesDemonsRegistrationFilter_h_
00018 #define _itkSymmetricForcesDemonsRegistrationFilter_h_
00019
00020 #include "itkPDEDeformableRegistrationFilter.h"
00021 #include "itkSymmetricForcesDemonsRegistrationFunction.h"
00022
00023 namespace itk {
00024
00067 template<class TFixedImage, class TMovingImage, class TDeformationField>
00068 class ITK_EXPORT SymmetricForcesDemonsRegistrationFilter :
00069 public PDEDeformableRegistrationFilter< TFixedImage, TMovingImage,
00070 TDeformationField>
00071 {
00072 public:
00074 typedef SymmetricForcesDemonsRegistrationFilter Self;
00075 typedef PDEDeformableRegistrationFilter<
00076 TFixedImage, TMovingImage,TDeformationField> Superclass;
00077 typedef SmartPointer<Self> Pointer;
00078 typedef SmartPointer<const Self> ConstPointer;
00079
00081 itkNewMacro(Self);
00082
00084 itkTypeMacro( SymmetricForcesDemonsRegistrationFilter,
00085 PDEDeformableRegistrationFilter );
00086
00088 typedef typename Superclass::FixedImageType FixedImageType;
00089 typedef typename Superclass::FixedImagePointer FixedImagePointer;
00090
00092 typedef typename Superclass::MovingImageType MovingImageType;
00093 typedef typename Superclass::MovingImagePointer MovingImagePointer;
00094
00096 typedef typename Superclass::DeformationFieldType
00097 DeformationFieldType;
00098 typedef typename Superclass::DeformationFieldPointer
00099 DeformationFieldPointer;
00100
00102 typedef typename Superclass::FiniteDifferenceFunctionType
00103 FiniteDifferenceFunctionType;
00104
00106 typedef typename FiniteDifferenceFunctionType::TimeStepType TimeStepType;
00107
00108
00110 typedef SymmetricForcesDemonsRegistrationFunction<FixedImageType,MovingImageType,
00111 DeformationFieldType> DemonsRegistrationFunctionType;
00112
00117 virtual double GetMetric() const;
00118 virtual const double &GetRMSChange() const;
00120
00125 virtual void SetIntensityDifferenceThreshold(double);
00126 virtual double GetIntensityDifferenceThreshold() const;
00128
00129 protected:
00130 SymmetricForcesDemonsRegistrationFilter();
00131 ~SymmetricForcesDemonsRegistrationFilter() {}
00132 void PrintSelf(std::ostream& os, Indent indent) const;
00133
00135 virtual void InitializeIteration();
00136
00138 virtual void ApplyUpdate(TimeStepType dt);
00139
00140 private:
00141 SymmetricForcesDemonsRegistrationFilter(const Self&);
00142 void operator=(const Self&);
00143
00144 };
00145
00146
00147 }
00148
00149 #ifndef ITK_MANUAL_INSTANTIATION
00150 #include "itkSymmetricForcesDemonsRegistrationFilter.txx"
00151 #endif
00152
00153 #endif
00154