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