File: itkCenteredVersorTransformInitializer.h

package info (click to toggle)
insighttoolkit 3.20.1%2Bgit20120521-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 80,672 kB
  • ctags: 85,253
  • sloc: cpp: 458,133; ansic: 196,222; fortran: 28,000; python: 3,839; tcl: 1,811; sh: 1,184; java: 583; makefile: 428; csh: 220; perl: 193; xml: 20
file content (130 lines) | stat: -rw-r--r-- 4,751 bytes parent folder | download | duplicates (2)
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 */