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