IGSTK
|
00001 /*========================================================================= 00002 00003 Program: Image Guided Surgery Software Toolkit 00004 Module: $RCSfile: igstkLandmark3DRegistration.h,v $ 00005 Language: C++ 00006 Date: $Date: 2008-11-17 20:12:25 $ 00007 Version: $Revision: 1.23 $ 00008 00009 Copyright (c) ISC Insight Software Consortium. All rights reserved. 00010 See IGSTKCopyright.txt or http://www.igstk.org/copyright.htm for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #ifndef __igstkLandmark3DRegistration_h 00019 #define __igstkLandmark3DRegistration_h 00020 00021 #include "igstkStateMachine.h" 00022 #include "igstkEvents.h" 00023 #include "igstkMacros.h" 00024 #include "igstkObject.h" 00025 #include "igstkTransform.h" 00026 #include "igstkCoordinateSystem.h" 00027 00028 #include "itkImage.h" 00029 #include "itkLandmarkBasedTransformInitializer.h" 00030 00031 00032 namespace igstk 00033 { 00062 class Landmark3DRegistration : public Object 00063 { 00064 00065 public: 00066 00068 igstkStandardClassTraitsMacro( Landmark3DRegistration, Object ) 00069 00070 public: 00071 00073 itkStaticConstMacro(Dimension,unsigned int,3); 00074 00076 typedef unsigned char PixelType; 00077 typedef itk::Image< PixelType, Dimension > ImageType; 00078 00080 typedef itk::VersorRigid3DTransform< double > TransformType; 00081 typedef TransformType::Pointer TransformPointerType; 00082 00083 typedef itk::LandmarkBasedTransformInitializer< TransformType, 00084 ImageType, ImageType > TransformInitializerType; 00085 00086 typedef TransformInitializerType::LandmarkPointContainer 00087 LandmarkPointContainerType; 00088 00089 typedef TransformInitializerType::LandmarkPointType LandmarkImagePointType; 00090 00091 typedef TransformInitializerType::LandmarkPointType LandmarkTrackerPointType; 00092 00093 typedef TransformInitializerType::Pointer TransformInitializerPointerType; 00094 00095 typedef LandmarkPointContainerType::const_iterator 00096 PointsContainerConstIterator; 00097 00100 void RequestAddImageLandmarkPoint( const LandmarkImagePointType & pt ); 00101 00104 void RequestAddTrackerLandmarkPoint( const LandmarkImagePointType & pt ); 00105 00110 void RequestResetRegistration(); 00111 00114 void RequestComputeTransform(); 00115 00118 void RequestGetTransformFromTrackerToImage(); 00119 00122 void RequestGetTransformFromImageToTracker(); 00123 00126 void RequestGetRMSError(); 00127 00130 void RequestSetCollinearityTolerance( const double & tolerance ); 00131 00133 igstkEventMacro( TransformInitializerEvent, IGSTKEvent ); 00134 igstkEventMacro( TransformInitializerErrorEvent, IGSTKErrorEvent ); 00135 00138 igstkEventMacro( TransformComputationFailureEvent, 00139 TransformInitializerErrorEvent ); 00140 00143 igstkEventMacro( TransformComputationSuccessEvent,TransformInitializerEvent); 00144 00145 protected: 00146 00147 Landmark3DRegistration ( void ); 00148 ~Landmark3DRegistration ( void ); 00149 00151 void ComputeRMSError(); 00152 00154 void PrintSelf( std::ostream& os, itk::Indent indent ) const; 00155 00156 private: 00157 00160 Landmark3DRegistration(const Self&); //purposely not implemented 00161 void operator=(const Self&); //purposely not implemented 00162 00163 00164 TransformPointerType m_Transform; 00165 TransformInitializerPointerType m_TransformInitializer; 00166 LandmarkPointContainerType m_TrackerLandmarks; 00167 LandmarkPointContainerType m_ImageLandmarks; 00168 LandmarkImagePointType m_ImageLandmarkPoint; 00169 LandmarkTrackerPointType m_TrackerLandmarkPoint; 00170 00171 Transform::ErrorType m_RMSError; 00172 00174 double m_CollinearityTolerance; 00175 00177 igstkDeclareStateMacro( Idle ); 00178 igstkDeclareStateMacro( ImageLandmark1Added ); 00179 igstkDeclareStateMacro( TrackerLandmark1Added ); 00180 igstkDeclareStateMacro( ImageLandmark2Added ); 00181 igstkDeclareStateMacro( TrackerLandmark2Added ); 00182 igstkDeclareStateMacro( ImageLandmark3Added ); 00183 igstkDeclareStateMacro( TrackerLandmark3Added ); 00184 igstkDeclareStateMacro( AttemptingToComputeTransform ); 00185 igstkDeclareStateMacro( TransformComputed ); 00186 00187 00189 igstkDeclareInputMacro( ImageLandmark ); 00190 igstkDeclareInputMacro( TrackerLandmark ); 00191 igstkDeclareInputMacro( ComputeTransform ); 00192 igstkDeclareInputMacro( GetTransformFromTrackerToImage ); 00193 igstkDeclareInputMacro( GetTransformFromImageToTracker ); 00194 igstkDeclareInputMacro( GetRMSError ); 00195 igstkDeclareInputMacro( ResetRegistration ); 00196 igstkDeclareInputMacro( TransformComputationFailure ); 00197 igstkDeclareInputMacro( TransformComputationSuccess ); 00198 00201 bool CheckCollinearity(); 00202 00206 void AddImageLandmarkPointProcessing(); 00207 00210 void AddTrackerLandmarkPointProcessing(); 00211 00214 void ResetRegistrationProcessing(); 00215 00218 void ComputeTransformProcessing(); 00219 00223 void GetTransformFromTrackerToImageProcessing(); 00224 00228 void GetTransformFromImageToTrackerProcessing(); 00229 00232 void GetRMSErrorProcessing(); 00233 00236 void ReportInvalidRequestProcessing(); 00237 00240 void ReportSuccessInTransformComputationProcessing(); 00241 00244 void ReportFailureInTransformComputationProcessing(); 00245 00247 CoordinateSystem::Pointer m_TrackerCoordinateSystem; 00248 CoordinateSystem::Pointer m_ImageCoordinateSystem; 00249 }; 00250 00251 } // end namespace igstk 00252 00253 #endif // __igstkLandmark3DRegistration_h