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

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkMultipleSurfaceRegistration.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 _IRTKMULTIPLESURFACEREGISTRATION_H
00016 
00017 #define _IRTKMULTIPLESURFACEREGISTRATION_H
00018 
00019 #include <vtkPointData.h>
00020 #include <vtkPolyData.h>
00021 #include <vtkPolyDataWriter.h>
00022 #include <vtkPolyDataReader.h>
00023 
00024 #include <irtkRegistration.h>
00025 
00026 #include <irtkUtil.h>
00027 #include <irtkLocator.h>
00028 #include <irtkOptimizer.h>
00029 
00042 class irtkMultipleSurfaceRegistration : public irtkObject
00043 {
00044 
00045 protected:
00046 
00048   vtkPolyData **_target;
00049 
00051   vtkPolyData **_source;
00052 
00054   int _NumberOfSurfaces;
00055 
00057   irtkTransformation *_transformation;
00058 
00060   irtkLocator **_target_locator;
00061 
00063   irtkLocator **_source_locator;
00064 
00066   irtkPointRegistration *_preg;
00067 
00069   virtual void Initialize();
00070 
00072   virtual void Finalize();
00073 
00075   virtual void Optimize();
00076 
00078   double _Epsilon;
00079 
00081   int _NumberOfIterations;
00082 
00084   bool _UseSymmetricDistance;
00085 
00086 public:
00087 
00089   irtkMultipleSurfaceRegistration();
00090 
00092   virtual ~irtkMultipleSurfaceRegistration();
00093 
00095   virtual void SetInput (vtkPolyData **, vtkPolyData **);
00096 
00098   virtual void SetOutput(irtkTransformation *);
00099 
00101   virtual void Run();
00102 
00104   virtual const char *NameOfClass();
00105 
00107   virtual void SetTargetLocator(irtkLocator **);
00108 
00110   virtual void SetSourceLocator(irtkLocator **);
00111 
00113   virtual void SetEpsilon(float);
00114 
00116   virtual double GetEpsilon();
00117 
00119   void UseSymmetricDistance();
00120 
00121   // Access parameters
00122   virtual SetMacro(NumberOfSurfaces, int);
00123   virtual GetMacro(NumberOfSurfaces, int);
00124   virtual SetMacro(NumberOfIterations, int);
00125   virtual GetMacro(NumberOfIterations, int);
00126 };
00127 
00128 inline void irtkMultipleSurfaceRegistration::SetTargetLocator(irtkLocator **locator)
00129 {
00130   _target_locator = locator;
00131 }
00132 
00133 inline void irtkMultipleSurfaceRegistration::SetSourceLocator(irtkLocator **locator)
00134 {
00135   _source_locator = locator;
00136 }
00137 
00138 inline void irtkMultipleSurfaceRegistration::SetEpsilon(float _e)
00139 {
00140   _Epsilon = _e;
00141 }
00142 
00143 inline double irtkMultipleSurfaceRegistration::GetEpsilon()
00144 {
00145   return _Epsilon;
00146 }
00147 
00148 inline void irtkMultipleSurfaceRegistration::UseSymmetricDistance()
00149 {
00150   _UseSymmetricDistance = 1;
00151 }
00152 
00153 #include <irtkMultipleSurfaceRigidRegistration.h>
00154 #include <irtkMultipleSurfaceAffineRegistration.h>
00155 #include <irtkMultipleSurfaceFreeFormRegistration.h>
00156 
00157 #endif
00158 
00159 #endif