zxhproj v 2.2
zxhproj
|
00001 00002 /*========================================================================= 00003 00004 Program: ZXH Registration Software 00005 Author: Xiahai Zhuang 00006 Module: $RCSfle: zxhTransformMultiRigid $ 00007 Language: C++ 00008 Date: $Date: From 2010-08 $ 00009 Version: $Revision: 2.0 $ 00010 00011 Update log: 00012 00013 =========================================================================*/ 00014 00015 #ifndef zxhTransformMultiRigid_h 00016 #define zxhTransformMultiRigid_h 00017 00018 00019 #include "zxhTransformBase.h" 00020 #include "zxhTransformAffine.h" 00021 #include "zxhTransformMatrix.h" 00022 00034 #ifndef ZXH_MAXMULTIRIGID 00035 #define ZXH_MAXMULTIRIGID 128 00036 #endif 00037 #ifndef ZXH_NUMBERMRTRANSFORM 00038 #define ZXH_NUMBERMRTRANSFORM 1 00039 #endif 00040 00041 class zxhTransformMultiRigid : public zxhTransformBase 00042 { 00043 00044 protected: 00048 zxhTransformAffine m_aMREchoRigidTransform[ZXH_MAXMULTIRIGID] ; 00050 int m_nNoOfRigidTransform ; 00051 00052 public: 00054 zxhTransformMultiRigid(void); 00056 ~zxhTransformMultiRigid(void); 00057 00060 virtual std::string GetTransformType(){return "MRG";}; 00061 00063 virtual zxhTransformBase* Clone(zxhTransformBase*&pRet); 00065 virtual bool SetDimension(int i) 00066 { 00067 m_iDimension=i; 00068 for( int ir=0; ir<ZXH_MAXMULTIRIGID; ++ir ) 00069 m_aMREchoRigidTransform[ir].SetDimension(i); 00070 return true; 00071 }; 00073 virtual std::string GetPrintString( void ) ; 00075 virtual bool SetTransformFromStream(std::ifstream & ifs); 00077 virtual void TransformWorldToWorld(const float fVectorFromWorld[ImageDimensionMax],float fVectorToWorld[ImageDimensionMax]) 00078 { 00079 std::cerr<<"error: zxhTransformMultiRigid does not have definition for TransformWorldToWorld\n" ; 00080 exit(0) ; 00081 }; 00083 virtual bool SetTransformIdentity() 00084 { 00085 for( int ir=0; ir<ZXH_MAXMULTIRIGID; ++ir ) 00086 m_aMREchoRigidTransform[ir].SetTransformIdentity(); 00087 return true ; 00088 }; 00090 virtual int GetNoParameters() {return m_nNoOfRigidTransform*m_aMREchoRigidTransform[0].GetNoParameters();}; 00092 virtual float GetParameters(int index) ; 00094 virtual bool SetParameterValue(int index, float f ) ; 00095 00097 00099 virtual bool SetNoOfRigidTransform(int n) 00100 { 00101 if( n<ZXH_NUMBERMRTRANSFORM || n>ZXH_MAXMULTIRIGID ) 00102 { 00103 std::cerr<<"error: number of rigid transformations should be between "<<ZXH_NUMBERMRTRANSFORM<<" and "<<ZXH_MAXMULTIRIGID<<" ONLY!\n" ; 00104 return false ; 00105 } 00106 m_nNoOfRigidTransform=n; 00107 return true ; 00108 }; 00110 virtual int GetNoOfRigidTransform(void) {return m_nNoOfRigidTransform;}; 00112 virtual int GetNoOfEchoRigidTransform(void) {return m_nNoOfRigidTransform-ZXH_NUMBERMRTRANSFORM;}; 00114 virtual int GetNoOfMRRigidTransform(void) {return ZXH_NUMBERMRTRANSFORM;}; 00116 virtual zxhTransformAffine* GetRigidTransform(int index) 00117 { 00118 if( index>m_nNoOfRigidTransform ) return 0 ; 00119 return &m_aMREchoRigidTransform[index]; 00120 }; 00122 virtual zxhTransformAffine* GetEchoTransform(int index) 00123 { 00124 if( index > m_nNoOfRigidTransform-ZXH_NUMBERMRTRANSFORM-1 ) return 0 ; 00125 return &m_aMREchoRigidTransform[index+ZXH_NUMBERMRTRANSFORM] ; 00126 } 00127 virtual zxhTransformAffine* GetMRTransform( int index=0 ) 00128 { 00129 if( m_nNoOfRigidTransform<ZXH_NUMBERMRTRANSFORM || index<0 || index>ZXH_NUMBERMRTRANSFORM-1) return 0 ; 00130 return &m_aMREchoRigidTransform[index] ; 00131 } 00135 virtual bool GetMatrixFromEcho2MR( int index, zxhTransformMatrix*pMatrix ) ; 00136 00137 00140 virtual float GetMaxLocalMagnitudeAndNormalisation( bool bNormalisationByLocalMagnitude ) ; 00141 }; 00142 00143 #endif //zxhTransformMultiRigid 00144 00145 00146