00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkTransform_h
00018 #define __itkTransform_h
00019
00020 #include "itkObject.h"
00021 #include "itkPoint.h"
00022 #include "itkVector.h"
00023 #include "itkCovariantVector.h"
00024 #include "vnl/vnl_vector_fixed.h"
00025 #include "itkArray.h"
00026 #include "itkArray2D.h"
00027
00028 #include "itkObjectFactory.h"
00029
00030
00031 namespace itk
00032 {
00033
00063 template <class TScalarType,
00064 unsigned int NInputDimensions=3,
00065 unsigned int NOutputDimensions=3>
00066 class ITK_EXPORT Transform : public Object
00067 {
00068 public:
00070 typedef Transform Self;
00071 typedef Object Superclass;
00072 typedef SmartPointer< Self > Pointer;
00073 typedef SmartPointer< const Self > ConstPointer;
00074
00076 itkNewMacro(Self);
00077
00079 itkTypeMacro( Transform, Object );
00080
00082 itkStaticConstMacro(InputSpaceDimension, unsigned int, NInputDimensions);
00083 itkStaticConstMacro(OutputSpaceDimension, unsigned int, NOutputDimensions);
00084
00086 typedef TScalarType ScalarType;
00087
00089 typedef Array< double > ParametersType;
00090
00092 typedef Array2D< double > JacobianType;
00093
00095 typedef Vector<TScalarType, NInputDimensions> InputVectorType;
00096 typedef Vector<TScalarType, NOutputDimensions> OutputVectorType;
00097
00099 typedef CovariantVector<TScalarType, NInputDimensions> InputCovariantVectorType;
00100 typedef CovariantVector<TScalarType, NOutputDimensions> OutputCovariantVectorType;
00101
00103 typedef vnl_vector_fixed<TScalarType, NInputDimensions> InputVnlVectorType;
00104 typedef vnl_vector_fixed<TScalarType, NOutputDimensions> OutputVnlVectorType;
00105
00107 typedef Point<TScalarType, NInputDimensions> InputPointType;
00108 typedef Point<TScalarType, NOutputDimensions> OutputPointType;
00109
00111 virtual OutputPointType TransformPoint(const InputPointType & ) const
00112 { return OutputPointType(); }
00113
00115 virtual OutputVectorType TransformVector(const InputVectorType &) const
00116 { return OutputVectorType(); }
00117
00119 virtual OutputVnlVectorType TransformVector(const InputVnlVectorType &) const
00120 { return OutputVnlVectorType(); }
00121
00123 virtual OutputCovariantVectorType TransformCovariantVector(
00124 const InputCovariantVectorType &) const
00125 { return OutputCovariantVectorType(); }
00126
00128 virtual void SetParameters( const ParametersType & )
00129 { itkExceptionMacro( << "Subclasses should override this method" ) };
00130
00132 virtual const ParametersType& GetParameters(void) const
00133 { itkExceptionMacro( << "Subclasses should override this method" );
00134 return m_Parameters; };
00135
00163 virtual const JacobianType & GetJacobian(const InputPointType &) const
00164 { itkExceptionMacro( << "Subclass should override this method" );
00165 return m_Jacobian; };
00166
00167
00169 virtual unsigned int GetNumberOfParameters(void) const
00170 { return m_Parameters.Size(); }
00171
00172
00173 protected:
00174 Transform();
00175 Transform(unsigned int Dimension, unsigned int NumberOfParameters);
00176 virtual ~Transform() {};
00177
00178
00179 mutable ParametersType m_Parameters;
00180 mutable JacobianType m_Jacobian;
00181
00182 private:
00183 Transform(const Self&);
00184 void operator=(const Self&);
00185
00186
00187 };
00188
00189 }
00190
00191 #ifndef ITK_MANUAL_INSTANTIATION
00192 #include "itkTransform.txx"
00193 #endif
00194
00195 #endif
00196
00197
00198