zxhproj v 2.2
zxhproj
|
00001 00002 /*========================================================================= 00003 00004 Program: ZXH Registration Software 00005 Author: Xiahai Zhuang 00006 Module: $RCSfle: zxhTransformCmriShiftCorrect $ 00007 Language: C++ 00008 Date: $Date: From 2011-03 $ 00009 Version: $Revision: 2.2.0 $ 00010 00011 Update log: 2.2.1 implement the idea 00012 00013 =========================================================================*/ 00014 00015 #ifndef zxhTransformCmriShiftCorrect_h 00016 #define zxhTransformCmriShiftCorrect_h 00017 00018 00019 #include "zxhTransformBase.h" 00020 #include "zxhGradientBase.h" 00021 #include "zxhTransformAffine.h" 00022 #include "zxhTransformMatrix.h" 00023 00029 00030 class zxhTransformCmriShiftCorrect : public zxhTransformBase,public zxhGradientBase 00031 { 00032 public: 00034 zxhTransformCmriShiftCorrect(void); 00036 ~zxhTransformCmriShiftCorrect(void); 00037 00039 virtual std::string GetTransformType(){return "CSC";}; 00040 00042 virtual zxhTransformBase* Clone(zxhTransformBase*&pRet); 00044 virtual std::string GetPrintString( void ) ; 00046 virtual bool SetTransformFromStream(std::ifstream & ifs); 00048 virtual void TransformWorldToWorld(const float fVectorFromWorld[ImageDimensionMax],float fVectorToWorld[ImageDimensionMax]) 00049 { 00050 std::cerr<<"error: zxhTransformCmriShiftCorrect does not have definition for TransformWorldToWorld\n" ; 00051 exit(0) ; 00052 }; 00054 virtual bool SetTransformIdentity() 00055 { 00056 for( int ir=0; ir<ZXH_MAXMULTIRIGID; ++ir ) 00057 m_aMREchoRigidTransform[ir].SetTransformIdentity(); 00058 return true ; 00059 }; 00061 virtual int GetNoParameters() {return m_nNoOfRigidTransform*m_aMREchoRigidTransform[0].GetNoParameters();}; 00063 virtual float GetParameters(int index) ; 00065 virtual bool SetParameterValue(int index, float f ) ; 00066 00068 00070 virtual bool SetNoOfRigidTransform(int n) 00071 { 00072 if( n<ZXH_NUMBERMRTRANSFORM || n>ZXH_MAXMULTIRIGID ) 00073 { 00074 std::cerr<<"error: number of rigid transformations should be between "<<ZXH_NUMBERMRTRANSFORM<<" and "<<ZXH_MAXMULTIRIGID<<" ONLY!\n" ; 00075 return false ; 00076 } 00077 m_nNoOfRigidTransform=n; 00078 return true ; 00079 }; 00081 virtual int GetNoOfRigidTransform(void) {return m_nNoOfRigidTransform;}; 00083 virtual int GetNoOfEchoRigidTransform(void) {return m_nNoOfRigidTransform-ZXH_NUMBERMRTRANSFORM;}; 00085 virtual int GetNoOfMRRigidTransform(void) {return ZXH_NUMBERMRTRANSFORM;}; 00087 virtual zxhTransformAffine* GetRigidTransform(int index) 00088 { 00089 if( index>m_nNoOfRigidTransform ) return 0 ; 00090 return &m_aMREchoRigidTransform[index]; 00091 }; 00093 virtual zxhTransformAffine* GetEchoTransform(int index) 00094 { 00095 if( index > m_nNoOfRigidTransform-ZXH_NUMBERMRTRANSFORM-1 ) return 0 ; 00096 return &m_aMREchoRigidTransform[index+ZXH_NUMBERMRTRANSFORM] ; 00097 } 00098 virtual zxhTransformAffine* GetMRTransform( int index=0 ) 00099 { 00100 if( m_nNoOfRigidTransform<ZXH_NUMBERMRTRANSFORM || index<0 || index>ZXH_NUMBERMRTRANSFORM-1) return 0 ; 00101 return &m_aMREchoRigidTransform[index] ; 00102 } 00106 virtual bool GetMatrixFromEcho2MR( int index, zxhTransformMatrix*pMatrix ) ; 00107 00108 00111 virtual float GetMaxLocalMagnitudeAndNormalisation( bool bNormalisationByLocalMagnitude ) ; 00112 }; 00113 00114 #endif //zxhTransformCmriShiftCorrect 00115 00116 00117