00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
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&);
00161 void operator=(const Self&);
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 }
00252
00253 #endif // __igstkLandmark3DRegistration_h