00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __itkCenteredTransformInitializer_h
00019 #define __itkCenteredTransformInitializer_h
00020
00021 #include "itkObject.h"
00022 #include "itkObjectFactory.h"
00023 #include "itkImageMomentsCalculator.h"
00024
00025 #include <iostream>
00026
00027 namespace itk
00028 {
00029
00060 template < class TTransform,
00061 class TFixedImage,
00062 class TMovingImage >
00063 class ITK_EXPORT CenteredTransformInitializer : public Object
00064 {
00065 public:
00067 typedef CenteredTransformInitializer Self;
00068 typedef Object Superclass;
00069 typedef SmartPointer<Self> Pointer;
00070 typedef SmartPointer<const Self> ConstPointer;
00071
00073 itkNewMacro( Self );
00074
00076 itkTypeMacro( CenteredTransformInitializer, Object );
00077
00079 typedef TTransform TransformType;
00080 typedef typename TransformType::Pointer TransformPointer;
00081
00083 itkStaticConstMacro(InputSpaceDimension, unsigned int,
00084 TransformType::InputSpaceDimension);
00085 itkStaticConstMacro(OutputSpaceDimension, unsigned int,
00086 TransformType::OutputSpaceDimension);
00088
00090 typedef TFixedImage FixedImageType;
00091 typedef TMovingImage MovingImageType;
00092
00093 typedef typename FixedImageType::ConstPointer FixedImagePointer;
00094 typedef typename MovingImageType::ConstPointer MovingImagePointer;
00095
00097 typedef ImageMomentsCalculator< FixedImageType > FixedImageCalculatorType;
00098 typedef ImageMomentsCalculator< MovingImageType > MovingImageCalculatorType;
00099
00100 typedef typename FixedImageCalculatorType::Pointer
00101 FixedImageCalculatorPointer;
00102 typedef typename MovingImageCalculatorType::Pointer
00103 MovingImageCalculatorPointer;
00104
00105
00107 typedef typename TransformType::OffsetType OffsetType;
00108
00110 typedef typename TransformType::InputPointType InputPointType;
00111
00113 typedef typename TransformType::OutputVectorType OutputVectorType;
00114
00116 itkSetObjectMacro( Transform, TransformType );
00117
00119 itkSetConstObjectMacro( FixedImage, FixedImageType );
00120
00122 itkSetConstObjectMacro( MovingImage, MovingImageType );
00123
00124
00126 virtual void InitializeTransform() const;
00127
00130 void GeometryOn() { m_UseMoments = false; }
00131 void MomentsOn() { m_UseMoments = true; }
00133
00135 itkGetConstObjectMacro( FixedCalculator, FixedImageCalculatorType );
00136 itkGetConstObjectMacro( MovingCalculator, MovingImageCalculatorType );
00138
00139 protected:
00140 CenteredTransformInitializer();
00141 ~CenteredTransformInitializer(){};
00142
00143 void PrintSelf(std::ostream &os, Indent indent) const;
00144
00145 private:
00146 CenteredTransformInitializer(const Self&);
00147 void operator=(const Self&);
00148
00149 TransformPointer m_Transform;
00150
00151 FixedImagePointer m_FixedImage;
00152
00153 MovingImagePointer m_MovingImage;
00154
00155 bool m_UseMoments;
00156
00157 FixedImageCalculatorPointer m_FixedCalculator;
00158 MovingImageCalculatorPointer m_MovingCalculator;
00159
00160 };
00161
00162
00163 }
00164
00165
00166 #ifndef ITK_MANUAL_INSTANTIATION
00167 #include "itkCenteredTransformInitializer.txx"
00168 #endif
00169
00170 #endif
00171