00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkPointSetToPointSetRegistrationMethod_h
00018 #define __itkPointSetToPointSetRegistrationMethod_h
00019
00020 #include "itkProcessObject.h"
00021 #include "itkPointSetToPointSetMetric.h"
00022 #include "itkMultipleValuedNonLinearOptimizer.h"
00023 #include "itkDataObjectDecorator.h"
00024
00025 namespace itk
00026 {
00027
00061 template <typename TFixedPointSet, typename TMovingPointSet>
00062 class ITK_EXPORT PointSetToPointSetRegistrationMethod : public ProcessObject
00063 {
00064 public:
00066 typedef PointSetToPointSetRegistrationMethod Self;
00067 typedef ProcessObject Superclass;
00068 typedef SmartPointer<Self> Pointer;
00069 typedef SmartPointer<const Self> ConstPointer;
00070
00072 itkNewMacro(Self);
00073
00075 itkTypeMacro(PointSetToPointSetRegistrationMethod, ProcessObject);
00076
00078 typedef TFixedPointSet FixedPointSetType;
00079 typedef typename FixedPointSetType::ConstPointer FixedPointSetConstPointer;
00080
00082 typedef TMovingPointSet MovingPointSetType;
00083 typedef typename MovingPointSetType::ConstPointer MovingPointSetConstPointer;
00084
00086 typedef PointSetToPointSetMetric< FixedPointSetType,
00087 MovingPointSetType > MetricType;
00088 typedef typename MetricType::Pointer MetricPointer;
00089
00091 typedef typename MetricType::TransformType TransformType;
00092 typedef typename TransformType::Pointer TransformPointer;
00093
00096 typedef DataObjectDecorator< TransformType > TransformOutputType;
00097 typedef typename TransformOutputType::Pointer TransformOutputPointer;
00098 typedef typename TransformOutputType::ConstPointer TransformOutputConstPointer;
00099
00101 typedef MultipleValuedNonLinearOptimizer OptimizerType;
00102
00105 typedef typename MetricType::TransformParametersType ParametersType;
00106
00108 typedef typename DataObject::Pointer DataObjectPointer;
00109
00111 void StartRegistration(void);
00112
00114 itkSetConstObjectMacro( FixedPointSet, FixedPointSetType );
00115 itkGetConstObjectMacro( FixedPointSet, FixedPointSetType );
00117
00119 itkSetConstObjectMacro( MovingPointSet, MovingPointSetType );
00120 itkGetConstObjectMacro( MovingPointSet, MovingPointSetType );
00122
00124 itkSetObjectMacro( Optimizer, OptimizerType );
00125 itkGetObjectMacro( Optimizer, OptimizerType );
00127
00129 itkSetObjectMacro( Metric, MetricType );
00130 itkGetObjectMacro( Metric, MetricType );
00132
00134 itkSetObjectMacro( Transform, TransformType );
00135 itkGetObjectMacro( Transform, TransformType );
00137
00139 virtual void SetInitialTransformParameters( const ParametersType & param );
00140 itkGetConstReferenceMacro( InitialTransformParameters, ParametersType );
00142
00145 itkGetConstReferenceMacro( LastTransformParameters, ParametersType );
00146
00148 void Initialize() throw (ExceptionObject);
00149
00151 const TransformOutputType * GetOutput() const;
00152
00155 virtual DataObjectPointer MakeOutput(unsigned int idx);
00156
00159 unsigned long GetMTime() const;
00160
00161 protected:
00162 PointSetToPointSetRegistrationMethod();
00163 virtual ~PointSetToPointSetRegistrationMethod() {};
00164 void PrintSelf(std::ostream& os, Indent indent) const;
00165
00168 void GenerateData ();
00169
00170 private:
00171 PointSetToPointSetRegistrationMethod(const Self&);
00172 void operator=(const Self&);
00173
00174 MetricPointer m_Metric;
00175 OptimizerType::Pointer m_Optimizer;
00176
00177 MovingPointSetConstPointer m_MovingPointSet;
00178 FixedPointSetConstPointer m_FixedPointSet;
00179
00180 TransformPointer m_Transform;
00181
00182 ParametersType m_InitialTransformParameters;
00183 ParametersType m_LastTransformParameters;
00184
00185 };
00186
00187
00188 }
00189
00190
00191 #ifndef ITK_MANUAL_INSTANTIATION
00192 #include "itkPointSetToPointSetRegistrationMethod.txx"
00193 #endif
00194
00195 #endif
00196