IGSTK
/tmp/buildd/igstk-4.4.0/Source/igstkLandmark3DRegistration.h
Go to the documentation of this file.
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