Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __elxRayCastInterpolator_h
00015 #define __elxRayCastInterpolator_h
00016
00017 #include "itkAdvancedRayCastInterpolateImageFunction.h"
00018 #include "itkAdvancedCombinationTransform.h"
00019 #include "itkAdvancedTransform.h"
00020 #include "../Transforms/EulerTransform/itkEulerTransform.h"
00021 #include "elxIncludes.h"
00022
00023 namespace elastix
00024 {
00025
00026 using namespace itk;
00027
00041 template < class TElastix >
00042 class RayCastInterpolator :
00043 public
00044 AdvancedRayCastInterpolateImageFunction<
00045 ITK_TYPENAME InterpolatorBase<TElastix>::InputImageType,
00046 ITK_TYPENAME InterpolatorBase<TElastix>::CoordRepType >,
00047 public
00048 InterpolatorBase<TElastix>
00049 {
00050 public:
00051
00053 typedef RayCastInterpolator Self;
00054 typedef AdvancedRayCastInterpolateImageFunction<
00055 typename InterpolatorBase<TElastix>::InputImageType,
00056 typename InterpolatorBase<TElastix>::CoordRepType > Superclass1;
00057 typedef InterpolatorBase<TElastix> Superclass2;
00058 typedef SmartPointer<Self> Pointer;
00059 typedef SmartPointer<const Self> ConstPointer;
00060
00062 itkNewMacro( Self );
00063
00065 itkTypeMacro( RayCastInterpolator, AdvancedRayCastInterpolateImageFunction );
00066
00071 elxClassNameMacro( "RayCastInterpolator" );
00072
00074 itkStaticConstMacro( ImageDimension, unsigned int, Superclass1::ImageDimension );
00075
00077 typedef typename Superclass1::OutputType OutputType;
00078 typedef typename Superclass1::InputImageType InputImageType;
00079 typedef typename Superclass1::IndexType IndexType;
00080 typedef typename Superclass1::ContinuousIndexType ContinuousIndexType;
00081 typedef typename Superclass1::PointType PointType;
00082 typedef typename Superclass1::SizeType SizeType;
00083 typedef typename InputImageType::SpacingType SpacingType;
00084
00086 typedef typename Superclass2::ElastixType ElastixType;
00087 typedef typename Superclass2::ElastixPointer ElastixPointer;
00088 typedef typename Superclass2::ConfigurationType ConfigurationType;
00089 typedef typename Superclass2::ConfigurationPointer ConfigurationPointer;
00090 typedef typename Superclass2::RegistrationType RegistrationType;
00091 typedef typename Superclass2::RegistrationPointer RegistrationPointer;
00092 typedef typename Superclass2::ITKBaseType ITKBaseType;
00093
00095 typedef typename itk::EulerTransform<
00096 typename InterpolatorBase<TElastix>::CoordRepType,
00097 ImageDimension > EulerTransformType;
00098 typedef typename EulerTransformType::ParametersType TransformParametersType;
00099 typedef typename EulerTransformType::Pointer EulerTransformPointer;
00100 typedef typename itk::AdvancedTransform<
00101 typename InterpolatorBase<TElastix>::CoordRepType,
00102 itkGetStaticConstMacro( ImageDimension ),
00103 itkGetStaticConstMacro( ImageDimension ) > AdvancedTransformType;
00104 typedef typename AdvancedTransformType::Pointer AdvancedTransformPointer;
00105 typedef typename itk::AdvancedCombinationTransform<
00106 typename InterpolatorBase<TElastix>::CoordRepType,
00107 itkGetStaticConstMacro( ImageDimension ) > CombinationTransformType;
00108 typedef typename CombinationTransformType::Pointer CombinationTransformPointer;
00109
00110 protected:
00111
00113 RayCastInterpolator() {}
00114
00116 virtual ~RayCastInterpolator() {}
00117
00118 virtual int BeforeAll( void );
00119
00120 virtual void BeforeRegistration( void );
00121
00122 virtual void BeforeEachResolution( void );
00123
00124 private:
00125
00127 RayCastInterpolator( const Self& );
00128
00130 void operator=( const Self& );
00131
00132 EulerTransformPointer m_PreTransform;
00133 TransformParametersType m_PreParameters;
00134 CombinationTransformPointer m_CombinationTransform;
00135
00136 };
00137
00138
00139 }
00140
00141 #ifndef ITK_MANUAL_INSTANTIATION
00142 #include "elxRayCastInterpolator.hxx"
00143 #endif
00144
00145 #endif // end #ifndef __elxRayCastInterpolator_h
00146