00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkPointSetToImageRegistrationMethod_h
00018 #define __itkPointSetToImageRegistrationMethod_h
00019
00020 #include "itkProcessObject.h"
00021 #include "itkImage.h"
00022 #include "itkPointSetToImageMetric.h"
00023 #include "itkSingleValuedNonLinearOptimizer.h"
00024
00025 namespace itk
00026 {
00027
00061 template <typename TFixedPointSet, typename TMovingImage>
00062 class ITK_EXPORT PointSetToImageRegistrationMethod : public ProcessObject
00063 {
00064 public:
00066 typedef PointSetToImageRegistrationMethod Self;
00067 typedef ProcessObject Superclass;
00068 typedef SmartPointer<Self> Pointer;
00069 typedef SmartPointer<const Self> ConstPointer;
00070
00072 itkNewMacro(Self);
00073
00075 itkTypeMacro(PointSetToImageRegistrationMethod, ProcessObject);
00076
00078 typedef TFixedPointSet FixedPointSetType;
00079 typedef typename FixedPointSetType::ConstPointer FixedPointSetConstPointer;
00080
00082 typedef TMovingImage MovingImageType;
00083 typedef typename MovingImageType::ConstPointer MovingImageConstPointer;
00084
00086 typedef PointSetToImageMetric< FixedPointSetType,
00087 MovingImageType > MetricType;
00088 typedef typename MetricType::Pointer MetricPointer;
00089
00091 typedef typename MetricType::TransformType TransformType;
00092 typedef typename TransformType::Pointer TransformPointer;
00093
00095 typedef typename MetricType::InterpolatorType InterpolatorType;
00096 typedef typename InterpolatorType::Pointer InterpolatorPointer;
00097
00099 typedef SingleValuedNonLinearOptimizer OptimizerType;
00100
00103 typedef typename MetricType::TransformParametersType ParametersType;
00104
00106 void StartRegistration(void);
00107
00109 itkSetConstObjectMacro( FixedPointSet, FixedPointSetType );
00110 itkGetConstObjectMacro( FixedPointSet, FixedPointSetType );
00112
00114 itkSetConstObjectMacro( MovingImage, MovingImageType );
00115 itkGetConstObjectMacro( MovingImage, MovingImageType );
00117
00119 itkSetObjectMacro( Optimizer, OptimizerType );
00120 itkGetObjectMacro( Optimizer, OptimizerType );
00122
00124 itkSetObjectMacro( Metric, MetricType );
00125 itkGetObjectMacro( Metric, MetricType );
00127
00129 itkSetObjectMacro( Transform, TransformType );
00130 itkGetObjectMacro( Transform, TransformType );
00132
00134 itkSetObjectMacro( Interpolator, InterpolatorType );
00135 itkGetObjectMacro( Interpolator, InterpolatorType );
00137
00139 virtual void SetInitialTransformParameters( const ParametersType & param );
00140 itkGetConstReferenceMacro( InitialTransformParameters, ParametersType );
00142
00145 itkGetConstReferenceMacro( LastTransformParameters, ParametersType );
00146
00147
00149 void Initialize() throw (ExceptionObject);
00150
00151 protected:
00152 PointSetToImageRegistrationMethod();
00153 virtual ~PointSetToImageRegistrationMethod() {};
00154 void PrintSelf(std::ostream& os, Indent indent) const;
00155
00156 private:
00157 PointSetToImageRegistrationMethod(const Self&);
00158 void operator=(const Self&);
00159
00160 MetricPointer m_Metric;
00161 OptimizerType::Pointer m_Optimizer;
00162
00163 MovingImageConstPointer m_MovingImage;
00164 FixedPointSetConstPointer m_FixedPointSet;
00165
00166 TransformPointer m_Transform;
00167 InterpolatorPointer m_Interpolator;
00168
00169 ParametersType m_InitialTransformParameters;
00170 ParametersType m_LastTransformParameters;
00171
00172 };
00173
00174
00175 }
00176
00177
00178 #ifndef ITK_MANUAL_INSTANTIATION
00179 #include "itkPointSetToImageRegistrationMethod.txx"
00180 #endif
00181
00182 #endif
00183
00184
00185
00186