1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkCenteredVersorTransformInitializer.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkCenteredVersorTransformInitializer_h
#define __itkCenteredVersorTransformInitializer_h
#include "itkCenteredTransformInitializer.h"
#include "itkVersorRigid3DTransform.h"
namespace itk
{
/** \class CenteredVersorTransformInitializer
* \brief CenteredVersorTransformInitializer is a helper class intended to
* initialize the center of rotation, versor, and translation of the
* VersorRigid3DTransform.
*
* This class derived from the CenteredTransformInitializer and uses it in
* a more constrained context. It always uses the Moments mode, and also
* takes advantage of the second order moments in order to initialize the
* Versor representing rotation.
*
* \ingroup Transforms
*/
template < class TFixedImage,
class TMovingImage >
class ITK_EXPORT CenteredVersorTransformInitializer :
public CenteredTransformInitializer<
VersorRigid3DTransform<double>,
TFixedImage,TMovingImage>
{
public:
/** Standard class typedefs. */
typedef CenteredVersorTransformInitializer Self;
typedef CenteredTransformInitializer<
VersorRigid3DTransform<double>,
TFixedImage,TMovingImage> Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
/** New macro for creation of through a Smart Pointer. */
itkNewMacro( Self );
/** Run-time type information (and related methods). */
itkTypeMacro( CenteredVersorTransformInitializer, Object );
/** Type of the transform to initialize */
typedef typename Superclass::TransformType TransformType;
typedef typename Superclass::TransformPointer TransformPointer;
/** Dimension of parameters. */
itkStaticConstMacro(InputSpaceDimension, unsigned int,
Superclass::InputSpaceDimension);
itkStaticConstMacro(OutputSpaceDimension, unsigned int,
Superclass::OutputSpaceDimension);
/** Image Types to use in the initialization of the transform */
typedef typename Superclass::FixedImageType FixedImageType;
typedef typename Superclass::MovingImageType MovingImageType;
typedef typename Superclass::FixedImagePointer FixedImagePointer;
typedef typename Superclass::MovingImagePointer MovingImagePointer;
/** Offset type. */
typedef typename Superclass::OffsetType OffsetType;
/** Point type. */
typedef typename Superclass::InputPointType InputPointType;
/** Vector type. */
typedef typename Superclass::OutputVectorType OutputVectorType;
/** Initialize the transform using data from the images */
void InitializeTransform();
/** Enable the use of the principal axes of each image to compute an
* initial rotation that will align them. */
itkSetMacro( ComputeRotation, bool );
itkGetMacro( ComputeRotation, bool );
itkBooleanMacro( ComputeRotation );
protected:
CenteredVersorTransformInitializer();
~CenteredVersorTransformInitializer(){};
void PrintSelf(std::ostream &os, Indent indent) const;
private:
CenteredVersorTransformInitializer(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
bool m_ComputeRotation;
}; //class CenteredVersorTransformInitializer
} // namespace itk
// Define instantiation macro for this template.
#define ITK_TEMPLATE_CenteredVersorTransformInitializer(_, EXPORT, x, y) namespace itk { \
_(2(class EXPORT CenteredVersorTransformInitializer< ITK_TEMPLATE_2 x >)) \
namespace Templates { typedef CenteredVersorTransformInitializer< ITK_TEMPLATE_2 x > \
CenteredVersorTransformInitializer##y; } \
}
#if ITK_TEMPLATE_EXPLICIT
# include "Templates/itkCenteredVersorTransformInitializer+-.h"
#endif
#if ITK_TEMPLATE_TXX
# include "itkCenteredVersorTransformInitializer.txx"
#endif
#endif /* __itkCenteredVersorTransformInitializer_h */
|