#include <itkLandmarkBasedTransformInitializer.h>
This class computes the transform that aligns the fixed and moving images given a set of pair landmarks. The class is templated over the Transform type as well as fixed image and moving image types. The transform computed gives the best fit transform that maps the fixed and moving images in a least squares sense. The indices are taken to correspond, so point 1 in the first set will get mapped close to point 1 in the second set, etc.
Currently, the following transforms are supported by the class: VersorRigid3DTransform Similarity3DTransform Rigid2DTransform AffineTransform BSplineTransform
An equal number of fixed and moving landmarks need to be specified using SetFixedLandmarks() and SetMovingLandmarks(). Any number of landmarks may be specified. In the case of the Affine transformation the number of landmarks must be greater than the landmark dimensionality. If this is not the case an exception is thrown. In the case of the VersorRigid3DTransform and Rigid2DTransform the number of landmarks must be equal or greater than the landmark dimensionality. If this is not the case, only the translational component of the transformation is computed and the rotation is the identity. In the case of using Affine or BSpline transforms, each landmark pair can contribute in the final transform based on its defined weight. Number of weights should be equal to the number of landmarks and can be specified using SetLandmarkWeight(). By defaults are weights are set to one. Call InitializeTransform() to initialize the transform.
The class is based in part on Hybrid/vtkLandmarkTransform originally implemented in python by David G. Gobbi.
The solution is based on [50]. https://people.csail.mit.edu/bkph/papers/Absolute_Orientation.pdf
The Affine Transform initializer is based on an algorithm by H Spaeth, and is described in [57], available at https://doi.org/10.54294/fge470
Definition at line 86 of file itkLandmarkBasedTransformInitializer.h.
Public Types | |
using | AffineTransformType = AffineTransform<ParametersValueType, FixedImageType::ImageDimension> |
using | BSplineTransformType = BSplineTransform<ParametersValueType, FixedImageType::ImageDimension, SplineOrder> |
using | ConstPointer = SmartPointer<const Self> |
using | FixedImagePointer = typename FixedImageType::ConstPointer |
using | FixedImageType = TFixedImage |
using | InputPointType = typename TransformType::InputPointType |
using | LandmarkPointContainer = std::vector<LandmarkPointType> |
using | LandmarkPointType = Point<double, ImageDimension> |
using | LandmarkWeightConstIterator = LandmarkWeightType::const_iterator |
using | LandmarkWeightType = std::vector<double> |
using | MovingImagePointer = typename MovingImageType::ConstPointer |
using | MovingImageType = TMovingImage |
using | OutputVectorType = typename TransformType::OutputVectorType |
using | ParametersType = typename TransformType::ParametersType |
using | ParametersValueType = typename ParametersType::ValueType |
using | Pointer = SmartPointer<Self> |
using | PointsContainerConstIterator = typename LandmarkPointContainer::const_iterator |
using | PointType3D = Point<double, 3> |
using | Rigid2DTransformType = Rigid2DTransform<ParametersValueType> |
using | Self = LandmarkBasedTransformInitializer |
using | Similarity3DTransformType = Similarity3DTransform<ParametersValueType> |
using | Superclass = Object |
using | TransformPointer = typename TransformType::Pointer |
using | TransformType = TTransform |
using | VersorRigid3DTransformType = VersorRigid3DTransform<ParametersValueType> |
![]() | |
using | ConstPointer = SmartPointer<const Self> |
using | Pointer = SmartPointer<Self> |
using | Self = Object |
using | Superclass = LightObject |
![]() | |
using | ConstPointer = SmartPointer<const Self> |
using | Pointer = SmartPointer<Self> |
using | Self = LightObject |
Public Member Functions | |
virtual::itk::LightObject::Pointer | CreateAnother () const |
const char * | GetNameOfClass () const override |
virtual void | InitializeTransform () |
virtual void | SetBSplineNumberOfControlPoints (unsigned int _arg) |
void | SetFixedLandmarks (const LandmarkPointContainer &fixedLandmarks) |
void | SetLandmarkWeight (LandmarkWeightType &landmarkWeight) |
void | SetMovingLandmarks (const LandmarkPointContainer &movingLandmarks) |
virtual void | SetReferenceImage (const FixedImageType *_arg) |
virtual void | SetTransform (TransformType *_arg) |
![]() | |
unsigned long | AddObserver (const EventObject &event, Command *cmd) const |
unsigned long | AddObserver (const EventObject &event, std::function< void(const EventObject &)> function) const |
LightObject::Pointer | CreateAnother () const override |
virtual void | DebugOff () const |
virtual void | DebugOn () const |
Command * | GetCommand (unsigned long tag) |
bool | GetDebug () const |
MetaDataDictionary & | GetMetaDataDictionary () |
const MetaDataDictionary & | GetMetaDataDictionary () const |
virtual ModifiedTimeType | GetMTime () const |
const char * | GetNameOfClass () const override |
virtual const TimeStamp & | GetTimeStamp () const |
bool | HasObserver (const EventObject &event) const |
void | InvokeEvent (const EventObject &) |
void | InvokeEvent (const EventObject &) const |
virtual void | Modified () const |
void | Register () const override |
void | RemoveAllObservers () |
void | RemoveObserver (unsigned long tag) const |
void | SetDebug (bool debugFlag) const |
void | SetReferenceCount (int) override |
void | UnRegister () const noexcept override |
void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
void | SetMetaDataDictionary (MetaDataDictionary &&rrhs) |
virtual void | SetObjectName (std::string _arg) |
virtual const std::string & | GetObjectName () const |
![]() | |
Pointer | Clone () const |
virtual void | Delete () |
virtual int | GetReferenceCount () const |
void | Print (std::ostream &os, Indent indent=0) const |
Static Public Member Functions | |
static Pointer | New () |
![]() | |
static bool | GetGlobalWarningDisplay () |
static void | GlobalWarningDisplayOff () |
static void | GlobalWarningDisplayOn () |
static Pointer | New () |
static void | SetGlobalWarningDisplay (bool val) |
![]() | |
static void | BreakOnError () |
static Pointer | New () |
Static Public Attributes | |
static constexpr unsigned int | ImageDimension = FixedImageType::ImageDimension |
static constexpr unsigned int | InputSpaceDimension = TransformType::InputSpaceDimension |
static constexpr unsigned int | OutputSpaceDimension = TransformType::OutputSpaceDimension |
static constexpr unsigned int | SplineOrder = 3 |
Protected Member Functions | |
LandmarkBasedTransformInitializer ()=default | |
void | PrintSelf (std::ostream &os, Indent indent) const override |
~LandmarkBasedTransformInitializer () override=default | |
![]() | |
Object () | |
bool | PrintObservers (std::ostream &os, Indent indent) const |
void | PrintSelf (std::ostream &os, Indent indent) const override |
virtual void | SetTimeStamp (const TimeStamp &timeStamp) |
~Object () override | |
![]() | |
virtual LightObject::Pointer | InternalClone () const |
LightObject () | |
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
virtual | ~LightObject () |
Private Member Functions | |
PointType3D | ComputeCentroid (const LandmarkPointContainer) |
void | CreateMatrix (itk::Matrix< ParametersValueType, 4, 4 > &, const itk::Matrix< ParametersValueType, ImageDimension, ImageDimension >) |
void | InternalInitializeTransform (AffineTransformType *) |
void | InternalInitializeTransform (BSplineTransformType *) |
void | InternalInitializeTransform (Rigid2DTransformType *) |
void | InternalInitializeTransform (Similarity3DTransformType *) |
template<typename TTransform2> | |
void | InternalInitializeTransform (TTransform2 *) |
void | InternalInitializeTransform (VersorRigid3DTransformType *) |
Private Attributes | |
unsigned int | m_BSplineNumberOfControlPoints { 4 } |
LandmarkPointContainer | m_FixedLandmarks {} |
LandmarkWeightType | m_LandmarkWeight {} |
LandmarkPointContainer | m_MovingLandmarks {} |
FixedImagePointer | m_ReferenceImage {} |
TransformPointer | m_Transform {} |
Additional Inherited Members | |
![]() | |
std::atomic< int > | m_ReferenceCount {} |
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::AffineTransformType = AffineTransform<ParametersValueType, FixedImageType::ImageDimension> |
Definition at line 171 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::BSplineTransformType = BSplineTransform<ParametersValueType, FixedImageType::ImageDimension, SplineOrder> |
Definition at line 174 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::ConstPointer = SmartPointer<const Self> |
Definition at line 95 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::FixedImagePointer = typename FixedImageType::ConstPointer |
Definition at line 124 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::FixedImageType = TFixedImage |
Image Types to use in the initialization of the transform.
Definition at line 115 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::InputPointType = typename TransformType::InputPointType |
Convenience type alias.
Definition at line 131 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::LandmarkPointContainer = std::vector<LandmarkPointType> |
Definition at line 136 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::LandmarkPointType = Point<double, ImageDimension> |
Definition at line 135 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::LandmarkWeightConstIterator = LandmarkWeightType::const_iterator |
Definition at line 142 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::LandmarkWeightType = std::vector<double> |
Definition at line 141 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::MovingImagePointer = typename MovingImageType::ConstPointer |
Definition at line 125 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::MovingImageType = TMovingImage |
Definition at line 116 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::OutputVectorType = typename TransformType::OutputVectorType |
Definition at line 132 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::ParametersType = typename TransformType::ParametersType |
Definition at line 139 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::ParametersValueType = typename ParametersType::ValueType |
Definition at line 140 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::Pointer = SmartPointer<Self> |
Definition at line 94 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::PointsContainerConstIterator = typename LandmarkPointContainer::const_iterator |
Definition at line 137 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::PointType3D = Point<double, 3> |
Definition at line 134 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::Rigid2DTransformType = Rigid2DTransform<ParametersValueType> |
Definition at line 170 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::Self = LandmarkBasedTransformInitializer |
Standard class type aliases.
Definition at line 92 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::Similarity3DTransformType = Similarity3DTransform<ParametersValueType> |
Definition at line 169 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::Superclass = Object |
Definition at line 93 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::TransformPointer = typename TransformType::Pointer |
Definition at line 105 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::TransformType = TTransform |
Type of the transform to initialize.
Definition at line 104 of file itkLandmarkBasedTransformInitializer.h.
using itk::LandmarkBasedTransformInitializer< TTransform, TFixedImage, TMovingImage >::VersorRigid3DTransformType = VersorRigid3DTransform<ParametersValueType> |
Supported Transform type alias.
Definition at line 168 of file itkLandmarkBasedTransformInitializer.h.
|
protecteddefault |
Referenced by GetNameOfClass().
|
overrideprotecteddefault |
|
private |
|
virtual |
Create an object from an instance, potentially deferring to a factory. This method allows you to create an instance of an object that is exactly the same type as the referring object. This is useful in cases where an object has been cast back to a base class.
Reimplemented from itk::LightObject.
|
private |
|
overridevirtual |
Reimplemented from itk::LightObject.
References LandmarkBasedTransformInitializer().
|
virtual |
Initialize the transform from the landmarks.
|
private |
Initializer for AffineTransform.
|
private |
Initializer for BSplineTransform.
|
private |
Initializer for Rigid2DTransform.
|
private |
Initializer for Similarity3DTransform.
|
private |
Fallback Initializer just sets transform to identity.
|
private |
Initializer for VersorRigid3D.
|
static |
New macro for creation of through a Smart Pointer.
|
overrideprotectedvirtual |
Methods invoked by Print() to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from itk::LightObject.
|
virtual |
Set the number of control points to define the parametric domain for the BSpline transform.
|
inline |
Set the Fixed landmark point containers.
Definition at line 146 of file itkLandmarkBasedTransformInitializer.h.
References m_FixedLandmarks.
|
inline |
Set the landmark weight point containers Weight includes diagonal elements of weight matrix.
Definition at line 162 of file itkLandmarkBasedTransformInitializer.h.
References m_LandmarkWeight.
|
inline |
Set the Moving landmark point containers.
Definition at line 153 of file itkLandmarkBasedTransformInitializer.h.
References m_MovingLandmarks.
|
virtual |
Set the reference image to define the parametric domain for the BSpline transform.
|
virtual |
Set the transform to be initialized.
|
staticconstexpr |
Determine the image dimension.
Definition at line 128 of file itkLandmarkBasedTransformInitializer.h.
|
staticconstexpr |
Dimension of parameters.
Definition at line 108 of file itkLandmarkBasedTransformInitializer.h.
|
private |
Definition at line 227 of file itkLandmarkBasedTransformInitializer.h.
|
private |
Definition at line 222 of file itkLandmarkBasedTransformInitializer.h.
Referenced by SetFixedLandmarks().
|
private |
Weights for affine landmarks.
Definition at line 226 of file itkLandmarkBasedTransformInitializer.h.
Referenced by SetLandmarkWeight().
|
private |
Definition at line 223 of file itkLandmarkBasedTransformInitializer.h.
Referenced by SetMovingLandmarks().
|
private |
Definition at line 220 of file itkLandmarkBasedTransformInitializer.h.
|
private |
Definition at line 221 of file itkLandmarkBasedTransformInitializer.h.
|
staticconstexpr |
Definition at line 109 of file itkLandmarkBasedTransformInitializer.h.
|
staticconstexpr |
Definition at line 173 of file itkLandmarkBasedTransformInitializer.h.