forked from InsightSoftwareConsortium/ITK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
itkCenteredVersorTransformInitializer.h
130 lines (98 loc) · 4.64 KB
/
itkCenteredVersorTransformInitializer.h
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 */