/vol/vipdata/irtk/packages/registration/include/irtkSurfaceRegistration.h

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkSurfaceRegistration.h 2 2008-12-23 12:40:14Z dr $
00005   Copyright : Imperial College, Department of Computing
00006               Visual Information Processing (VIP), 2008 onwards
00007   Date      : $Date: 2008-12-23 12:40:14 +0000 (Tue, 23 Dec 2008) $
00008   Version   : $Revision: 2 $
00009   Changes   : $Author: dr $
00010 
00011 =========================================================================*/
00012 
00013 #ifdef HAS_VTK
00014 
00015 #ifndef _IRTKSURFACEREGISTRATION_H
00016 
00017 #define _IRTKSURFACEREGISTRATION_H
00018 
00019 #include <irtkImage.h>
00020 
00021 #include <irtkTransformation.h>
00022 #include <vtkPointData.h>
00023 #include <vtkPolyData.h>
00024 #include <vtkPolyDataWriter.h>
00025 #include <vtkPolyDataReader.h>
00026 
00027 #include <irtkPointRegistration.h>
00028 #include <irtkUtil.h>
00029 #include <irtkLocator.h>
00030 #include <irtkOptimizer.h>
00031 
00044 class irtkSurfaceRegistration : public irtkObject
00045 {
00046 
00047 protected:
00048 
00050   vtkPolyData *_target ;
00051 
00053   vtkPolyData *_source;
00054 
00056   irtkTransformation *_transformation;
00057 
00059   irtkLocator *_target_locator;
00060 
00062   irtkLocator *_source_locator;
00063 
00065   irtkPointRegistration *_preg;
00066 
00068   virtual void Initialize();
00069 
00071   virtual void Finalize();
00072 
00074   virtual void Optimize();
00075 
00077   double _Epsilon;
00078 
00080   int _NumberOfIterations;
00081 
00083   bool _ignore_edges;
00084 
00086   bool _UseSymmetricDistance;
00087 
00088 public:
00089 
00091   irtkSurfaceRegistration();
00092 
00094   virtual ~irtkSurfaceRegistration();
00095 
00097   virtual void SetInput (vtkPolyData *, vtkPolyData *);
00098 
00100   virtual void SetOutput(irtkTransformation *);
00101 
00103   virtual void Run();
00104 
00106   virtual const char *NameOfClass();
00107 
00109   virtual void SetTargetLocator(irtkLocator *);
00110 
00112   virtual void SetSourceLocator(irtkLocator *);
00113 
00115   virtual void SetEpsilon(float);
00116 
00118   virtual double GetEpsilon();
00119 
00121   void IgnoreEdges();
00122 
00124   void UseSymmetricDistance();
00125 
00126   // Access parameters
00127   virtual SetMacro(NumberOfIterations, int);
00128   virtual GetMacro(NumberOfIterations, int);
00129 };
00130 
00131 inline void irtkSurfaceRegistration::SetTargetLocator(irtkLocator *locator)
00132 {
00133   _target_locator = locator;
00134 }
00135 
00136 inline void irtkSurfaceRegistration::SetSourceLocator(irtkLocator *locator)
00137 {
00138   _source_locator = locator;
00139 }
00140 
00141 inline void irtkSurfaceRegistration::SetEpsilon(float _e)
00142 {
00143   _Epsilon = _e;
00144 }
00145 
00146 inline double irtkSurfaceRegistration::GetEpsilon()
00147 {
00148   return _Epsilon;
00149 }
00150 
00151 inline void irtkSurfaceRegistration::IgnoreEdges()
00152 {
00153   _ignore_edges = 1;
00154 }
00155 
00156 inline void irtkSurfaceRegistration::UseSymmetricDistance()
00157 {
00158   _UseSymmetricDistance = 1;
00159 }
00160 
00161 #include <irtkSurfaceRigidRegistration.h>
00162 #include <irtkSurfaceAffineRegistration.h>
00163 #include <irtkSurfaceFreeFormRegistration.h>
00164 
00165 #endif
00166 
00167 #endif