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