zxhproj v 2.2
zxhproj

zxhTransformMultiRigid.h

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 
 All Classes Namespaces Functions Variables Typedefs