00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __freRigidRegistrationProcessor_h
00023 #define __freRigidRegistrationProcessor_h
00024
00025 #include "freRigidRegistrationProcessorBase.h"
00026
00027 #include "itkMultiResolutionImageRegistrationMethod.h"
00028 #include "itkMultiResolutionPyramidImageFilter.h"
00029
00030 #include "itkImageRegistrationMethod.h"
00031
00032 #include "itkTransform.h"
00033 #include "itkInterpolateImageFunction.h"
00034 #include "itkImageToImageMetric.h"
00035 #include "itkSingleValuedNonLinearOptimizer.h"
00036
00037 namespace FREE
00038 {
00039
00053 template <class TRegistrationMethod, class TTransformBase, class TInterpolateBase,
00054 class TMetricBase, class TOptimizerBase, unsigned int VImageDimension>
00055 class SingleRigidRegistrationProcessorBase : public RigidRegistrationProcessorBase<TRegistrationMethod, TTransformBase, TInterpolateBase, TMetricBase, TOptimizerBase, VImageDimension>
00056 {
00057 public:
00059 typedef SingleRigidRegistrationProcessorBase<TRegistrationMethod, TTransformBase, TInterpolateBase, TMetricBase, TOptimizerBase, VImageDimension> Self;
00060 typedef RigidRegistrationProcessorBase<TRegistrationMethod, TTransformBase, TInterpolateBase, TMetricBase, TOptimizerBase, VImageDimension> Superclass;
00061 typedef itk::SmartPointer<Self> Pointer;
00062 typedef itk::SmartPointer<const Self> ConstPointer;
00063
00064 typedef typename Superclass::RegistrationType RegistrationType;
00065 typedef typename Superclass::RegistrationPointer RegistrationPointer;
00066
00067 typedef typename Superclass::TransformType TransformType;
00068 typedef typename Superclass::TransformPointer TransformPointer;
00069
00070 typedef typename Superclass::InterpolatorType InterpolatorType;
00071 typedef typename Superclass::InterpolatorPointer InterpolatorPointer;
00072
00073 typedef typename Superclass::MetricType MetricType;
00074 typedef typename Superclass::MetricPointer MetricPointer;
00075
00076 typedef typename Superclass::OptimizerType OptimizerType;
00077 typedef typename Superclass::OptimizerPointer OptimizerPointer;
00078
00079 typedef typename Superclass::ImageType ImageType;
00080 typedef typename Superclass::RegionType RegionType;
00081 typedef typename Superclass::ImagePointer ImagePointer;
00082 typedef typename Superclass::PointType PointType;
00083 typedef typename Superclass::TransformFieldType TransformFieldType;
00084 typedef typename Superclass::TransformFieldPointer TransformFieldPointer;
00085
00087 itkTypeMacro( SingleRigidRegistrationProcessorBase, RigidRegistrationProcessorBase );
00088 itkNewMacro(Self);
00089
00090 protected:
00099 virtual void ComputeRegistration();
00100
00101 SingleRigidRegistrationProcessorBase();
00102
00103 virtual ~SingleRigidRegistrationProcessorBase();
00104 };
00105
00114 template <unsigned int VImageDimension>
00115 class RigidRegistrationProcessor : public SingleRigidRegistrationProcessorBase < itk::ImageRegistrationMethod < typename ImageTypes<VImageDimension>::InternalImageType , typename ImageTypes<VImageDimension>::InternalImageType >,
00116 itk::Transform< ScalarType, VImageDimension, VImageDimension >,
00117 itk::InterpolateImageFunction< typename ImageTypes<VImageDimension>::InternalImageType, ScalarType >,
00118 itk::ImageToImageMetric< typename ImageTypes<VImageDimension>::InternalImageType, typename ImageTypes<VImageDimension>::InternalImageType >,
00119 itk::SingleValuedNonLinearOptimizer, VImageDimension >
00120 {
00121 public:
00123 typedef RigidRegistrationProcessor< VImageDimension > Self;
00124 typedef SingleRigidRegistrationProcessorBase < itk::ImageRegistrationMethod < typename ImageTypes<VImageDimension>::InternalImageType , typename ImageTypes<VImageDimension>::InternalImageType >,
00125 itk::Transform< ScalarType, VImageDimension, VImageDimension >,
00126 itk::InterpolateImageFunction< typename ImageTypes<VImageDimension>::InternalImageType, ScalarType >,
00127 itk::ImageToImageMetric< typename ImageTypes<VImageDimension>::InternalImageType, typename ImageTypes<VImageDimension>::InternalImageType >,
00128 itk::SingleValuedNonLinearOptimizer, VImageDimension > Superclass;
00129
00130 typedef itk::SmartPointer<Self> Pointer;
00131 typedef itk::SmartPointer<const Self> ConstPointer;
00132
00133 typedef typename Superclass::RegistrationType RegistrationType;
00134 typedef typename Superclass::RegistrationPointer RegistrationPointer;
00135
00136 typedef typename Superclass::TransformType TransformType;
00137 typedef typename Superclass::TransformPointer TransformPointer;
00138
00139 typedef typename Superclass::InterpolatorType InterpolatorType;
00140 typedef typename Superclass::InterpolatorPointer InterpolatorPointer;
00141
00142 typedef typename Superclass::MetricType MetricType;
00143 typedef typename Superclass::MetricPointer MetricPointer;
00144
00145 typedef typename Superclass::OptimizerType OptimizerType;
00146 typedef typename Superclass::OptimizerPointer OptimizerPointer;
00147
00148 typedef typename Superclass::ImageType ImageType;
00149 typedef typename Superclass::RegionType RegionType;
00150 typedef typename Superclass::ImagePointer ImagePointer;
00151 typedef typename Superclass::PointType PointType;
00152 typedef typename Superclass::TransformFieldType TransformFieldType;
00153 typedef typename Superclass::TransformFieldPointer TransformFieldPointer;
00154
00156 itkTypeMacro( RigidRegistrationProcessor, SingleRigidRegistrationProcessorBase );
00157 itkNewMacro(Self);
00158
00159 protected:
00160 RigidRegistrationProcessor();
00161
00162 virtual ~RigidRegistrationProcessor();
00163 };
00164
00180 template <unsigned int VImageDimension>
00181 class MultiRigidRegistrationProcessor : public RigidRegistrationProcessorBase< itk::MultiResolutionImageRegistrationMethod < typename ImageTypes<VImageDimension>::InternalImageType , typename ImageTypes<VImageDimension>::InternalImageType >,
00182 itk::Transform< ScalarType, VImageDimension, VImageDimension >,
00183 itk::InterpolateImageFunction< typename ImageTypes<VImageDimension>::InternalImageType, ScalarType >,
00184 itk::ImageToImageMetric< typename ImageTypes<VImageDimension>::InternalImageType, typename ImageTypes<VImageDimension>::InternalImageType >,
00185 itk::SingleValuedNonLinearOptimizer, VImageDimension >
00186 {
00187 public:
00189 typedef MultiRigidRegistrationProcessor<VImageDimension> Self;
00190 typedef RigidRegistrationProcessorBase<itk::MultiResolutionImageRegistrationMethod < typename ImageTypes<VImageDimension>::InternalImageType , typename ImageTypes<VImageDimension>::InternalImageType >,
00191 itk::Transform< ScalarType, VImageDimension, VImageDimension >,
00192 itk::InterpolateImageFunction< typename ImageTypes<VImageDimension>::InternalImageType, ScalarType >,
00193 itk::ImageToImageMetric< typename ImageTypes<VImageDimension>::InternalImageType, typename ImageTypes<VImageDimension>::InternalImageType >,
00194 itk::SingleValuedNonLinearOptimizer, VImageDimension > Superclass;
00195
00196 typedef itk::SmartPointer<Self> Pointer;
00197 typedef itk::SmartPointer<const Self> ConstPointer;
00198
00199 typedef typename Superclass::RegistrationType RegistrationType;
00200 typedef typename Superclass::RegistrationPointer RegistrationPointer;
00201
00202 typedef typename Superclass::TransformType TransformType;
00203 typedef typename Superclass::TransformPointer TransformPointer;
00204
00205 typedef typename Superclass::InterpolatorType InterpolatorType;
00206 typedef typename Superclass::InterpolatorPointer InterpolatorPointer;
00207
00208 typedef typename Superclass::MetricType MetricType;
00209 typedef typename Superclass::MetricPointer MetricPointer;
00210
00211 typedef typename Superclass::OptimizerType OptimizerType;
00212 typedef typename Superclass::OptimizerPointer OptimizerPointer;
00213
00214 typedef typename Superclass::ImageType ImageType;
00215 typedef typename Superclass::RegionType RegionType;
00216 typedef typename Superclass::ImagePointer ImagePointer;
00217 typedef typename Superclass::PointType PointType;
00218 typedef typename Superclass::TransformFieldType TransformFieldType;
00219 typedef typename Superclass::TransformFieldPointer TransformFieldPointer;
00220
00222 itkTypeMacro( MultiRigidRegistrationProcessor, RigidRegistrationProcessorBase );
00223
00225 itkNewMacro(Self);
00226
00228 typedef itk::MultiResolutionPyramidImageFilter< ImageType, ImageType > PyramidType;
00230 typedef typename PyramidType::Pointer PyramidPointer;
00231
00234 IterationObserver::Pointer m_LevelObserver;
00235 typename NotificationEvent<Self>::Pointer m_LevelNotificationEvent;
00236
00239 PyramidPointer smpFixedImagePyramid;
00242 PyramidPointer smpMovingImagePyramid;
00243
00244 virtual const int GetResolutionLevelCount () const;
00245
00246 protected:
00247 MultiRigidRegistrationProcessor();
00248
00249 virtual ~MultiRigidRegistrationProcessor();
00250
00259 virtual void ComputeRegistration();
00260
00269 void OnNewLevel(void* pSender, long threadID);
00270
00271
00272
00273 bool m_bFirstResLevel;
00274 };
00275
00279 typedef RigidRegistrationProcessor<2> RigidRegistrationProcessor2D;
00281 typedef RigidRegistrationProcessor<3> RigidRegistrationProcessor3D;
00282
00284 typedef MultiRigidRegistrationProcessor<2> MultiRigidRegistrationProcessor2D;
00286 typedef MultiRigidRegistrationProcessor<3> MultiRigidRegistrationProcessor3D;
00287
00288 }
00289
00290 #ifndef ITK_MANUAL_INSTANTIATION
00291 #include "freRigidRegistrationProcessor.txx"
00292 #endif
00293
00294 #endif