00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkRigid3DTransform_h
00018 #define __itkRigid3DTransform_h
00019
00020 #include <iostream>
00021 #include "itkTransform.h"
00022 #include "itkExceptionObject.h"
00023 #include "vnl/vnl_quaternion.h"
00024 #include "itkMatrix.h"
00025 #include "itkVersor.h"
00026
00027 namespace itk
00028 {
00029
00036 template < class TScalarType=double >
00037 class ITK_EXPORT Rigid3DTransform :
00038 public Transform< TScalarType, 3, 3>
00039 {
00040 public:
00042 typedef Rigid3DTransform Self;
00043 typedef Transform< TScalarType, 3, 3 > Superclass;
00044 typedef SmartPointer<Self> Pointer;
00045 typedef SmartPointer<const Self> ConstPointer;
00046
00048 itkTypeMacro( Rigid3DTransform, Transform );
00049
00051 itkNewMacro( Self );
00052
00054 itkStaticConstMacro(InputSpaceDimension, unsigned int, 3);
00055 itkStaticConstMacro(OutputSpaceDimension, unsigned int, 3);
00056 itkStaticConstMacro(ParametersDimension, unsigned int, 6);
00057
00059 typedef typename Superclass::ScalarType ScalarType;
00060
00062 typedef typename Superclass::ParametersType ParametersType;
00063
00065 typedef typename Superclass::JacobianType JacobianType;
00066
00068 typedef Matrix<ScalarType, itkGetStaticConstMacro(InputSpaceDimension), itkGetStaticConstMacro(InputSpaceDimension)> MatrixType;
00069
00071 typedef Vector<TScalarType, itkGetStaticConstMacro(InputSpaceDimension)> OffsetType;
00072
00074 typedef Vector<TScalarType, itkGetStaticConstMacro(InputSpaceDimension)> InputVectorType;
00075 typedef Vector<TScalarType, itkGetStaticConstMacro(OutputSpaceDimension)> OutputVectorType;
00076
00078 typedef CovariantVector<TScalarType, itkGetStaticConstMacro(InputSpaceDimension)> InputCovariantVectorType;
00079 typedef CovariantVector<TScalarType, itkGetStaticConstMacro(OutputSpaceDimension)> OutputCovariantVectorType;
00080
00082 typedef vnl_vector_fixed<TScalarType, itkGetStaticConstMacro(InputSpaceDimension)> InputVnlVectorType;
00083 typedef vnl_vector_fixed<TScalarType, itkGetStaticConstMacro(OutputSpaceDimension)> OutputVnlVectorType;
00084
00086 typedef Point<TScalarType, itkGetStaticConstMacro(InputSpaceDimension)> InputPointType;
00087 typedef Point<TScalarType, itkGetStaticConstMacro(OutputSpaceDimension)> OutputPointType;
00088
00090 typedef vnl_quaternion<TScalarType> VnlQuaternionType;
00091
00093 typedef Versor<TScalarType> VersorType;
00094
00095
00102 itkGetConstMacro( Offset, OffsetType );
00103
00110 itkGetConstMacro( RotationMatrix, MatrixType );
00111
00112
00119 itkSetMacro( Offset, OffsetType );
00120
00121
00131 void SetRotationMatrix(const MatrixType &matrix);
00132
00133
00138 void Compose(const Self *other, bool pre=false);
00139
00140
00148 void Translate(const OffsetType &offset, bool pre=false);
00149
00150
00158 OutputPointType TransformPoint(const InputPointType &point ) const;
00159 OutputVectorType TransformVector(const InputVectorType &vector) const;
00160 OutputVnlVectorType TransformVector(const InputVnlVectorType &vector) const;
00161
00162 OutputCovariantVectorType TransformCovariantVector(
00163 const InputCovariantVectorType &vector) const;
00164
00172 inline InputPointType BackTransform(const OutputPointType &point ) const;
00173 inline InputVectorType BackTransform(const OutputVectorType &vector) const;
00174 inline InputVnlVectorType BackTransform(const OutputVnlVectorType &vector) const;
00175
00176 inline InputCovariantVectorType BackTransform(
00177 const OutputCovariantVectorType &vector) const;
00178
00186 Pointer Inverse( void ) const;
00187
00189 virtual void SetIdentity(void);
00190
00192 virtual const JacobianType & GetJacobian(const InputPointType &point ) const;
00193
00194 protected:
00195 Rigid3DTransform();
00196 ~Rigid3DTransform();
00197
00198
00202 void PrintSelf(std::ostream &os, Indent indent) const;
00203
00204 Rigid3DTransform(unsigned int SpaceDimension, unsigned int ParametersDimension);
00205
00206
00207
00208
00209 MatrixType m_RotationMatrix;
00210
00211
00212 MatrixType m_InverseMatrix;
00213
00214 private:
00215 Rigid3DTransform(const Self&);
00216 void operator=(const Self&);
00217
00218
00219 OffsetType m_Offset;
00220
00221 };
00222
00223
00224 }
00225
00226
00227 #ifndef ITK_MANUAL_INSTANTIATION
00228 #include "itkRigid3DTransform.txx"
00229 #endif
00230
00231 #endif