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 #include "itkDataObjectDecorator.h"
00025
00026 namespace itk
00027 {
00028
00062 template <typename TFixedPointSet, typename TMovingImage>
00063 class ITK_EXPORT PointSetToImageRegistrationMethod : public ProcessObject
00064 {
00065 public:
00067 typedef PointSetToImageRegistrationMethod Self;
00068 typedef ProcessObject Superclass;
00069 typedef SmartPointer<Self> Pointer;
00070 typedef SmartPointer<const Self> ConstPointer;
00071
00073 itkNewMacro(Self);
00074
00076 itkTypeMacro(PointSetToImageRegistrationMethod, ProcessObject);
00077
00079 typedef TFixedPointSet FixedPointSetType;
00080 typedef typename FixedPointSetType::ConstPointer FixedPointSetConstPointer;
00081
00083 typedef TMovingImage MovingImageType;
00084 typedef typename MovingImageType::ConstPointer MovingImageConstPointer;
00085
00087 typedef PointSetToImageMetric< FixedPointSetType,
00088 MovingImageType > MetricType;
00089 typedef typename MetricType::Pointer MetricPointer;
00090
00092 typedef typename MetricType::TransformType TransformType;
00093 typedef typename TransformType::Pointer TransformPointer;
00094
00097 typedef DataObjectDecorator< TransformType > TransformOutputType;
00098 typedef typename TransformOutputType::Pointer TransformOutputPointer;
00099 typedef typename TransformOutputType::ConstPointer TransformOutputConstPointer;
00100
00102 typedef typename MetricType::InterpolatorType InterpolatorType;
00103 typedef typename InterpolatorType::Pointer InterpolatorPointer;
00104
00106 typedef SingleValuedNonLinearOptimizer OptimizerType;
00107
00110 typedef typename MetricType::TransformParametersType ParametersType;
00111
00113 typedef typename DataObject::Pointer DataObjectPointer;
00114
00116 void StartRegistration(void);
00117
00119 itkSetConstObjectMacro( FixedPointSet, FixedPointSetType );
00120 itkGetConstObjectMacro( FixedPointSet, FixedPointSetType );
00122
00124 itkSetConstObjectMacro( MovingImage, MovingImageType );
00125 itkGetConstObjectMacro( MovingImage, MovingImageType );
00127
00129 itkSetObjectMacro( Optimizer, OptimizerType );
00130 itkGetObjectMacro( Optimizer, OptimizerType );
00132
00134 itkSetObjectMacro( Metric, MetricType );
00135 itkGetObjectMacro( Metric, MetricType );
00137
00139 itkSetObjectMacro( Transform, TransformType );
00140 itkGetObjectMacro( Transform, TransformType );
00142
00144 itkSetObjectMacro( Interpolator, InterpolatorType );
00145 itkGetObjectMacro( Interpolator, InterpolatorType );
00147
00149 virtual void SetInitialTransformParameters( const ParametersType & param );
00150 itkGetConstReferenceMacro( InitialTransformParameters, ParametersType );
00152
00155 itkGetConstReferenceMacro( LastTransformParameters, ParametersType );
00156
00157
00159 void Initialize() throw (ExceptionObject);
00160
00162 const TransformOutputType * GetOutput() const;
00163
00166 virtual DataObjectPointer MakeOutput(unsigned int idx);
00167
00170 unsigned long GetMTime() const;
00171
00172 protected:
00173 PointSetToImageRegistrationMethod();
00174 virtual ~PointSetToImageRegistrationMethod() {};
00175 void PrintSelf(std::ostream& os, Indent indent) const;
00176
00179 void GenerateData ();
00180
00181 private:
00182 PointSetToImageRegistrationMethod(const Self&);
00183 void operator=(const Self&);
00184
00185 MetricPointer m_Metric;
00186 OptimizerType::Pointer m_Optimizer;
00187
00188 MovingImageConstPointer m_MovingImage;
00189 FixedPointSetConstPointer m_FixedPointSet;
00190
00191 TransformPointer m_Transform;
00192 InterpolatorPointer m_Interpolator;
00193
00194 ParametersType m_InitialTransformParameters;
00195 ParametersType m_LastTransformParameters;
00196
00197 };
00198
00199
00200 }
00201
00202
00203 #ifndef ITK_MANUAL_INSTANTIATION
00204 #include "itkPointSetToImageRegistrationMethod.txx"
00205 #endif
00206
00207 #endif
00208
00209
00210
00211