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
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile: itkCenteredVersorTransformInitializer.h,v $
Language: C++
Date: $Date: 2007-04-11 18:10:06 $
Version: $Revision: 1.5 $
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() const;
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
}; //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 */
|