go home Home | Main Page | Topics | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
itk::AffineDTI3DTransform< TScalarType > Class Template Reference

#include <itkAffineDTI3DTransform.h>

Detailed Description

template<typename TScalarType = double>
class itk::AffineDTI3DTransform< TScalarType >

AffineDTI3DTransform of a vector space (e.g. space coordinates).

This transform applies an affine transformation, but is parameterized by angles, shear factors, scales, and translation, instead of by the affine matrix. It is meant for registration of MR diffusion weighted images, but could be used for other images as well of course.

The affine model is adopted from the following paper: [1] A. Leemans and D.K. Jones. "The B-matrix must be rotated when correcting for subject motion in DTI data". Magnetic Resonance in Medicine, Volume 61, Issue 6, pages 1336 - 1349, 2009.

The model is as follows:
T(x) = R G S (x-c) + t + c
with:

  • R = Rx Ry Rz (rotation matrices)
  • G = Gx Gy Gz (shear matrices)
  • S = diag( [sx sy sz] ) (scaling matrix)
  • c = center of rotation
  • t = translation See [1] for exact expressions for Rx, Gx etc.

Using this model, the rotation components can be easily extracted an applied to the B-matrix.

The parameters are ordered as follows: in 2D: [ Angle ShearX ShearY ScaleX ScaleY TranslationX TranslationY ] in 3D: [ AngleX AngleY AngleZ ShearX ShearY ShearZ ScaleX ScaleY ScaleZ TranslationX TranslationY TranslationZ ]

The serialization of the fixed parameters is an array of 2 elements defining the center of rotation.

This transform applies an affine transformation, but is parameterized by angles, shear factors, scales, and translation, instead of by the affine matrix. It is meant for registration of MR diffusion weighted images, but could be used for other images as well of course.

The affine model is adopted from the following paper: [1] A. Leemans and D.K. Jones. "The B-matrix must be rotated when correcting for subject motion in DTI data". Magnetic Resonance in Medicine, Volume 61, Issue 6, pages 1336 - 1349, 2009.

The model is as follows:
T(x) = R G S (x-c) + t + c
with:

  • R = Rx Ry Rz (rotation matrices)
  • G = Gx Gy Gz (shear matrices)
  • S = diag( [sx sy sz] ) (scaling matrix)
  • c = center of rotation
  • t = translation See [1] for exact expressions for Rx, Gx etc.

Using this model, the rotation components can be easily extracted an applied to the B-matrix.

The parameters are ordered as follows: [ AngleX AngleY AngleZ ShearX ShearY ShearZ ScaleX ScaleY ScaleZ TranslationX TranslationY TranslationZ ]

The serialization of the fixed parameters is an array of 3 elements defining the center of rotation.

Definition at line 78 of file itkAffineDTI3DTransform.h.

Inheritance diagram for itk::AffineDTI3DTransform< TScalarType >:

Public Types

using AngleType = typename Superclass::ScalarType
using ConstPointer = SmartPointer<const Self>
typedef typename SpatialJacobianType::InternalMatrixType InternalMatrixType
typedef std::vector< SpatialHessianTypeJacobianOfSpatialHessianType
typedef std::vector< SpatialJacobianTypeJacobianOfSpatialJacobianType
typedef std::vector< uint64_t > NonZeroJacobianIndicesType
using Pointer = SmartPointer<Self>
using ScalarArrayType = FixedArray<ScalarType>
using Self = AffineDTI3DTransform
typedef FixedArray< Matrix< ScalarType, InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType
typedef Matrix< ScalarType, OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType
using Superclass = AdvancedMatrixOffsetTransformBase<TScalarType, 3, 3>
Public Types inherited from itk::AdvancedMatrixOffsetTransformBase< double, 3, 3 >
using CenterType
using ConstPointer
typedef typename SpatialJacobianType::InternalMatrixType InternalMatrixType
using InverseMatrixType
typedef std::vector< SpatialHessianTypeJacobianOfSpatialHessianType
typedef std::vector< SpatialJacobianTypeJacobianOfSpatialJacobianType
using MatrixType
typedef std::vector< uint64_t > NonZeroJacobianIndicesType
using OffsetType
using Pointer
using Self
typedef FixedArray< Matrix< ScalarType, InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType
typedef Matrix< ScalarType, OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType
using Superclass
using TranslationType
Public Types inherited from itk::AdvancedTransform< double, NInputDimensions, NOutputDimensions >
using ConstPointer
using InternalMatrixType
using InverseTransformBaseType
using JacobianOfSpatialHessianType
using JacobianOfSpatialJacobianType
using MovingImageGradientType
using MovingImageGradientValueType
using NonZeroJacobianIndicesType
using Pointer
using Self
using SpatialHessianType
using SpatialJacobianType
using Superclass
using TransformType
using TransformTypeConstPointer
using TransformTypePointer

Public Member Functions

void GetJacobian (const InputPointType &, JacobianType &, NonZeroJacobianIndicesType &) const override
const ParametersType & GetParameters () const override
 ITK_DISALLOW_COPY_AND_MOVE (AffineDTI3DTransform)
 itkOverrideGetNameOfClassMacro (AffineDTI3DTransform)
 itkStaticConstMacro (InputSpaceDimension, unsigned int, 3)
 itkStaticConstMacro (OutputSpaceDimension, unsigned int, 3)
 itkStaticConstMacro (ParametersDimension, unsigned int, 12)
 itkStaticConstMacro (SpaceDimension, unsigned int, 3)
void SetIdentity () override
void SetParameters (const ParametersType &parameters) override
Public Member Functions inherited from itk::AdvancedMatrixOffsetTransformBase< double, 3, 3 >
const InputPointType & GetCenter () const
const FixedParametersType & GetFixedParameters () const override
void GetJacobianOfSpatialHessian (const InputPointType &, JacobianOfSpatialHessianType &, NonZeroJacobianIndicesType &) const override
void GetJacobianOfSpatialJacobian (const InputPointType &, JacobianOfSpatialJacobianType &, NonZeroJacobianIndicesType &) const override
const MatrixTypeGetMatrix () const
const ParametersType & GetParameters () const override
void GetSpatialHessian (const InputPointType &, SpatialHessianType &) const override
void GetSpatialJacobian (const InputPointType &, SpatialJacobianType &) const override
TransformCategoryEnum GetTransformCategory () const override
const OutputVectorType & GetTranslation () const
bool IsLinear () const override
 itkOverrideGetNameOfClassMacro (AdvancedMatrixOffsetTransformBase)
 itkStaticConstMacro (InputSpaceDimension, unsigned int, NInputDimensions)
void SetCenter (const InputPointType &center)
void SetFixedParameters (const FixedParametersType &) override
virtual void SetMatrix (const MatrixType &matrix)
void SetParameters (const ParametersType &parameters) override
void SetTranslation (const OutputVectorType &translation)
OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType &vector) const override
OutputPointType TransformPoint (const InputPointType &point) const override
OutputVectorType TransformVector (const InputVectorType &vector) const override
Public Member Functions inherited from itk::AdvancedTransform< double, NInputDimensions, NOutputDimensions >
void ComputeJacobianWithRespectToParameters (const InputPointType &, JacobianType &) const override
virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType &inputPoint, const MovingImageGradientType &movingImageGradient, DerivativeType &imageJacobian, NonZeroJacobianIndicesType &nonZeroJacobianIndices) const
virtual bool GetHasNonZeroJacobianOfSpatialHessian () const
virtual bool GetHasNonZeroSpatialHessian () const
virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices () const
 ITK_DISALLOW_COPY_AND_MOVE (AdvancedTransform)
 itkOverrideGetNameOfClassMacro (AdvancedTransform)
 itkStaticConstMacro (InputSpaceDimension, unsigned int, NInputDimensions)

Static Public Member Functions

static Pointer New ()
Static Public Member Functions inherited from itk::AdvancedMatrixOffsetTransformBase< double, 3, 3 >
static Pointer New ()

Protected Member Functions

 AffineDTI3DTransform ()
 AffineDTI3DTransform (const MatrixType &matrix, const OutputPointType &offset)
 AffineDTI3DTransform (unsigned int outputSpaceDims, unsigned int paramsSpaceDims)
void ComputeMatrix () override
void ComputeMatrixParameters () override
virtual void PrecomputeJacobianOfSpatialJacobian ()
void PrintSelf (std::ostream &os, Indent indent) const override
void SetVarAngleScaleShear (ScalarArrayType angle, ScalarArrayType shear, ScalarArrayType scale)
 ~AffineDTI3DTransform () override=default
Protected Member Functions inherited from itk::AdvancedMatrixOffsetTransformBase< double, 3, 3 >
 AdvancedMatrixOffsetTransformBase (const unsigned int paramDims=ParametersDimension)
virtual void ComputeOffset ()
void ComputeTranslation ()
const OutputVectorType & GetOffset () const
void PrintSelf (std::ostream &s, Indent indent) const override
void SetVarMatrix (const MatrixType &matrix)
void SetVarTranslation (const OutputVectorType &translation)
 ~AdvancedMatrixOffsetTransformBase () override=default
Protected Member Functions inherited from itk::AdvancedTransform< double, NInputDimensions, NOutputDimensions >
 AdvancedTransform ()=default
 ~AdvancedTransform () override=default

Private Attributes

ScalarArrayType m_Angle {}
ScalarArrayType m_Scale {}
ScalarArrayType m_Shear {}

Additional Inherited Members

Protected Attributes inherited from itk::AdvancedMatrixOffsetTransformBase< double, 3, 3 >
JacobianOfSpatialHessianType m_JacobianOfSpatialHessian
JacobianOfSpatialJacobianType m_JacobianOfSpatialJacobian
NonZeroJacobianIndicesType m_NonZeroJacobianIndices
SpatialHessianType m_SpatialHessian
Protected Attributes inherited from itk::AdvancedTransform< double, NInputDimensions, NOutputDimensions >
bool m_HasNonZeroJacobianOfSpatialHessian
bool m_HasNonZeroSpatialHessian

Member Typedef Documentation

◆ AngleType

template<typename TScalarType = double>
using itk::AffineDTI3DTransform< TScalarType >::AngleType = typename Superclass::ScalarType

Definition at line 118 of file itkAffineDTI3DTransform.h.

◆ ConstPointer

template<typename TScalarType = double>
using itk::AffineDTI3DTransform< TScalarType >::ConstPointer = SmartPointer<const Self>

Definition at line 87 of file itkAffineDTI3DTransform.h.

◆ InternalMatrixType

template<typename TScalarType = double>

◆ JacobianOfSpatialHessianType

template<typename TScalarType = double>

◆ JacobianOfSpatialJacobianType

template<typename TScalarType = double>

◆ NonZeroJacobianIndicesType

template<typename TScalarType = double>

Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType.

◆ Pointer

template<typename TScalarType = double>
using itk::AffineDTI3DTransform< TScalarType >::Pointer = SmartPointer<Self>

Definition at line 86 of file itkAffineDTI3DTransform.h.

◆ ScalarArrayType

template<typename TScalarType = double>
using itk::AffineDTI3DTransform< TScalarType >::ScalarArrayType = FixedArray<ScalarType>

Definition at line 127 of file itkAffineDTI3DTransform.h.

◆ Self

template<typename TScalarType = double>
using itk::AffineDTI3DTransform< TScalarType >::Self = AffineDTI3DTransform

Standard class typedefs.

Definition at line 84 of file itkAffineDTI3DTransform.h.

◆ SpatialHessianType

template<typename TScalarType = double>

◆ SpatialJacobianType

template<typename TScalarType = double>

◆ Superclass

template<typename TScalarType = double>
using itk::AffineDTI3DTransform< TScalarType >::Superclass = AdvancedMatrixOffsetTransformBase<TScalarType, 3, 3>

Definition at line 85 of file itkAffineDTI3DTransform.h.

Constructor & Destructor Documentation

◆ AffineDTI3DTransform() [1/3]

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::AffineDTI3DTransform ( )
protected

◆ AffineDTI3DTransform() [2/3]

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::AffineDTI3DTransform ( const MatrixType & matrix,
const OutputPointType & offset )
protected

◆ AffineDTI3DTransform() [3/3]

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::AffineDTI3DTransform ( unsigned int outputSpaceDims,
unsigned int paramsSpaceDims )
protected

◆ ~AffineDTI3DTransform()

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::~AffineDTI3DTransform ( )
overrideprotecteddefault

Member Function Documentation

◆ ComputeMatrix()

template<typename TScalarType = double>
void itk::AffineDTI3DTransform< TScalarType >::ComputeMatrix ( )
overrideprotectedvirtual

Compute the components of the rotation matrix in the superclass.

Reimplemented from itk::AdvancedMatrixOffsetTransformBase< double, 3, 3 >.

◆ ComputeMatrixParameters()

template<typename TScalarType = double>
void itk::AffineDTI3DTransform< TScalarType >::ComputeMatrixParameters ( )
overrideprotectedvirtual

◆ GetJacobian()

template<typename TScalarType = double>
void itk::AffineDTI3DTransform< TScalarType >::GetJacobian ( const InputPointType & ,
JacobianType & ,
NonZeroJacobianIndicesType &  ) const
overridevirtual

Compute the Jacobian of the transformation.

Reimplemented from itk::AdvancedMatrixOffsetTransformBase< double, 3, 3 >.

◆ GetParameters()

template<typename TScalarType = double>
const ParametersType & itk::AffineDTI3DTransform< TScalarType >::GetParameters ( ) const
override

◆ ITK_DISALLOW_COPY_AND_MOVE()

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::ITK_DISALLOW_COPY_AND_MOVE ( AffineDTI3DTransform< TScalarType > )

◆ itkOverrideGetNameOfClassMacro()

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::itkOverrideGetNameOfClassMacro ( AffineDTI3DTransform< TScalarType > )

Run-time type information (and related methods).

◆ itkStaticConstMacro() [1/4]

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::itkStaticConstMacro ( InputSpaceDimension ,
unsigned int ,
3  )

◆ itkStaticConstMacro() [2/4]

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::itkStaticConstMacro ( OutputSpaceDimension ,
unsigned int ,
3  )

◆ itkStaticConstMacro() [3/4]

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::itkStaticConstMacro ( ParametersDimension ,
unsigned int ,
12  )

◆ itkStaticConstMacro() [4/4]

template<typename TScalarType = double>
itk::AffineDTI3DTransform< TScalarType >::itkStaticConstMacro ( SpaceDimension ,
unsigned int ,
3  )

Dimension of the space.

◆ New()

template<typename TScalarType = double>
Pointer itk::AffineDTI3DTransform< TScalarType >::New ( )
static

New macro for creation of through a Smart Pointer.

◆ PrecomputeJacobianOfSpatialJacobian()

template<typename TScalarType = double>
virtual void itk::AffineDTI3DTransform< TScalarType >::PrecomputeJacobianOfSpatialJacobian ( )
protectedvirtual

Update the m_JacobianOfSpatialJacobian.

◆ PrintSelf()

template<typename TScalarType = double>
void itk::AffineDTI3DTransform< TScalarType >::PrintSelf ( std::ostream & os,
Indent indent ) const
overrideprotected

◆ SetIdentity()

template<typename TScalarType = double>
void itk::AffineDTI3DTransform< TScalarType >::SetIdentity ( )
overridevirtual

◆ SetParameters()

template<typename TScalarType = double>
void itk::AffineDTI3DTransform< TScalarType >::SetParameters ( const ParametersType & parameters)
override

Set/Get the transformation from a container of parameters This is typically used by optimizers. There are 12 parameters. [ Rx Ry Rz Gx Gy Gz Sx Sy Sz Tx Ty Tz ] ~rotation, scale, skew, translation

◆ SetVarAngleScaleShear()

template<typename TScalarType = double>
void itk::AffineDTI3DTransform< TScalarType >::SetVarAngleScaleShear ( ScalarArrayType angle,
ScalarArrayType shear,
ScalarArrayType scale )
protected

Set values of angles etc directly without recomputing other parameters.

Member Data Documentation

◆ m_Angle

template<typename TScalarType = double>
ScalarArrayType itk::AffineDTI3DTransform< TScalarType >::m_Angle {}
private

Definition at line 173 of file itkAffineDTI3DTransform.h.

◆ m_Scale

template<typename TScalarType = double>
ScalarArrayType itk::AffineDTI3DTransform< TScalarType >::m_Scale {}
private

Definition at line 175 of file itkAffineDTI3DTransform.h.

◆ m_Shear

template<typename TScalarType = double>
ScalarArrayType itk::AffineDTI3DTransform< TScalarType >::m_Shear {}
private

Definition at line 174 of file itkAffineDTI3DTransform.h.



Generated on 26-02-2026 for elastix by doxygen 1.16.1 (669aeeefca743c148e2d935b3d3c69535c7491e6) elastix logo