freRigidRegistrationProcessor.h

Go to the documentation of this file.
00001 /*=========================================================================
00002  
00003   Program:   F.R.E.E. - flexible registration evaluation engine
00004   Version:   v.1.0.0
00005   Date:      $Date: 2006/09/01 12:00:00 $
00006   Module:    $RCSfile: freRigidRegistrationProcessor.h,v $
00007   Language:  C++
00008  
00009  
00010  
00011   Copyright (c) 2007 Ralf o Floca (Department of Medical Informatics,
00012   Institute for Medical Biometry and Informatics, University of Heidelberg,
00013   Germany). All rights reserved.
00014   See FREECopyright.txt or http://www.mi.med.uni-hd.de/free/copyright.htm
00015   for details.
00016  
00017      This software is distributed WITHOUT ANY WARRANTY; without even 
00018      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00019      PURPOSE.  See the above copyright notices for more information.
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     //Indicator of the first level is still in processing. Needed because the OnLevel event
00272     //is also triggered in the first level.
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 }//End of Namespace free
00289 
00290 #ifndef ITK_MANUAL_INSTANTIATION
00291 #include "freRigidRegistrationProcessor.txx"
00292 #endif
00293 
00294 #endif

Generated at Sat Oct 13 17:23:04 2007 for f.r.e.e. - Flexible Registration and Evaluation Engine by doxygen 1.5.3 written by Dimitri van Heesch, © 1997-2000