zxhproj v 2.2
zxhproj

zxhMetricBase.h

00001 
00002 /*=========================================================================
00003 
00004   Program:   ZXH Registration Software
00005   Author:    Xiahai Zhuang
00006   Module:    $RCSfle: zxhMetricBase.h    $
00007   Language:  C++
00008   Date:      $Date: From  2004-01 $
00009   Version:   $Revision: 1.0, 2.0, 2.1 $
00010 
00011 =========================================================================*/
00012 
00013 #ifndef zxhMetricBase_h
00014 #define zxhMetricBase_h
00015 
00016 #include <string>
00017 #include "zxhTransformBase.h"
00018 #include "zxhImageGipl.h"
00019 #include "zxhImageModelingBase.h"
00020 
00021 
00030 
00031 class zxhMetricBase  
00032 {
00033 
00034 public:
00036     zxhMetricBase();
00037 
00039     virtual ~zxhMetricBase();
00040 
00042     virtual zxhMetricBase*  Clone(zxhMetricBase* &pRet);
00043 
00045     virtual std::string GetMetricType() = 0 ;
00047     virtual bool IsThisMetricType( std::string s )
00048     {
00049         return (strstr(s.c_str(),GetMetricType().c_str())!=NULL);
00050     }
00052     virtual bool IsThisMetricType( zxhMetricBase * pm )
00053     {   if( pm==0 ) return false ;
00054         return IsThisMetricType(pm->GetMetricType());
00055     }
00056 
00057 
00059     virtual bool    SetImage(zxhImageData*pImageTest,zxhImageData*pImageRef);
00061     virtual bool    SetMaskImage(zxhImageData*pMaskTest,zxhImageData*pMaskRef);
00063     virtual zxhImageData* GetMaskImageTest()                    { return m_pMaskTest ; };
00065     virtual zxhImageData* GetMaskImageRef()                     { return m_pMaskRef ; };
00066      
00068     virtual inline bool GetMaskByWorld(zxhImageData*pMaskImage,float fx,float fy,float fz,float ft)
00069     {
00070         if(pMaskImage==0||pMaskImage->GetNumberOfPixels()<=1) return true;
00071         float coo[] = {fx,fy,fz,ft} ;
00072         pMaskImage->WorldToImage( coo ) ;
00073         if(pMaskImage->InsideImage( zxh::round(coo[0]),zxh::round(coo[1]),zxh::round(coo[2]),zxh::round(coo[3]) )==false) return false;
00074         if(pMaskImage->GetPixelGreyscale(zxh::round(coo[0]),zxh::round(coo[1]),zxh::round(coo[2]),zxh::round(coo[3]))>ZXH_Mask)
00075             return true;
00076         return false;
00077     }
00079     virtual inline float GetWeightByWorld(zxhImageModelingBaseT<float,float>*pWeightModel,float fx,float fy,float fz,float ft)
00080     {
00081         if( pWeightModel==0 ||pWeightModel->GetImage()==0||pWeightModel->GetImage()->GetNumberOfPixels()==0) return 1 ;
00082         return pWeightModel->GetPixelFloatValueWithCheckBkByWorld(0, fx,fy,fz,ft) ;
00083     }
00084 
00086     virtual zxhImageData* GetTestImage()                                        {return m_pImageTest;};
00088     virtual zxhImageData* GetRefImage()                                         {return m_pImageRef;};
00089 
00091     virtual zxhImageModelingBaseT<float,float>* GetWegihtModelRef()             {return m_pWeightModelRef;};
00093     virtual zxhImageModelingBaseT<float,float>* GetWegihtModelTest()            {return m_pWeightModelTest;};
00095     virtual void SetWeightModelRef(zxhImageModelingBaseT<float,float>* p)       {m_pWeightModelRef=p;};
00097     virtual void SetWeightModelTest(zxhImageModelingBaseT<float,float>*p)       {m_pWeightModelTest=p;};
00098 
00100     virtual bool    SetImageModelingType(zxhImageModelingBase*pModelingTest,zxhImageModelingBase*pModelingRef);
00101 
00103     virtual bool    SetTransform(zxhTransformBase*pTr)                          {m_pTransform=pTr;return true;}
00104 
00107     virtual bool    SetForwardComposedTransform( zxhTransformBase*p )                   
00108     {m_pForwardComposedTransform = p; return true ; } ;
00109     
00110     virtual zxhTransformBase*   GetForwardComposedTransform()                   { return m_pForwardComposedTransform ; }
00111 
00113     virtual zxhTransformBase * GetTransform()                                   {return m_pTransform;};
00114 
00116     virtual void    SetDimension(int i)                             {m_iDimension=i;};
00117 
00119     virtual int GetDimension()                                      {return m_iDimension;}
00120 
00123     virtual void SetSamplingPhysical(float x,float y=1.0f,float z=1.0f,float t=1.0f);
00125     virtual const float * GetSamplingInterval()     {return m_afSamplingInterval;};
00127     virtual const float * GetSamplingPhysical()     {return m_afSamplingPhysical;};
00129     virtual int GetValue(zxhlfloat& fValue) =0;
00131     virtual std::string GetPrintString();
00132 
00134     virtual bool        SetMetricFromStream(std::ifstream & ifs);
00135 
00137     virtual bool        GetWorldRoiFrom(float f[])
00138     {
00139         for( int id=0;id<m_iDimension;++id ) f[id]=m_afRoiWorld[0][id];
00140         return m_bSetRoiWorld ;
00141     };
00143     virtual bool        GetWorldRoiTo(float f[])
00144     {
00145         for( int id=0;id<m_iDimension;++id ) f[id]=m_afRoiWorld[1][id];
00146         return m_bSetRoiWorld ;
00147     };
00149     virtual bool        SetWorldRoi( float xf, float xt, float yf, float yt,
00150                                         float zf, float zt, float tf, float tt ) ;
00152     virtual bool    GetInnerRoiTest( float from[], float to[] ) ;
00154     virtual bool    WithinWorldROI( float wx, float wy, float wz, float wt ) ;
00155 
00158     virtual void    PreComputeTransformField();
00159 
00161     virtual void ResampleTestImagesSpacingPhysIntervel() ;
00163     virtual void ResampleImagesSpacingPhysIntervel() ;
00164     
00165 protected: // protected method
00169     virtual bool TransformPointTo( float * from, float * to ) ;
00171     virtual void TransformWorldToWorld(const float * fromWorld, float * toWorld )  ;
00172  protected:
00174     int m_iDimension;
00175 
00177     zxhImageData  * m_pImageTest;
00178 
00180     zxhImageData  * m_pImageRef;
00181 
00183     zxhImageData  * m_pMaskTest;
00185     zxhImageData  * m_pMaskRef;
00186 
00188     zxhImageModelingBaseT<float,float>  *m_pWeightModelTest;
00189 
00191     zxhImageModelingBaseT<float,float>  *m_pWeightModelRef;
00192 
00194     zxhImageModelingBase    *m_pModelingTest;
00195 
00197     zxhImageModelingBase    *m_pModelingRef;
00198 
00200     zxhTransformBase*   m_pTransform;
00203     zxhTransformBase*   m_pForwardComposedTransform;
00205     float   m_afSamplingInterval[ImageDimensionMax];
00207     float   m_afSamplingPhysical[ImageDimensionMax];
00208 
00210     float       m_afRoiWorld[2][ImageDimensionMax] ;
00212     bool        m_bSetRoiWorld ;
00213 
00214 
00216     zxhImageData                m_imgRefImageOnXindex;
00218     zxhImageData                m_imgMaskTestRefOnXindex;
00220     zxhImageDataT<float>        m_aimgRefGradientOnXindex[ImageDimensionMax];
00221 
00222 
00224     zxhImageDataT<float>    m_aimgPreComputeTransformToWorld[ImageDimensionMax] ;
00226     bool                    m_bPreComputeTransformToWorld ;
00229     virtual bool            TransformPointToWorldUsingPreComputed(int x,int y,int z,int t, float wto[])
00230     {
00231         if ( m_bPreComputeTransformToWorld==false || m_aimgPreComputeTransformToWorld[0].InsideImage( x,y,z,t ) == false ) return false ;
00232         for( int id=0; id<m_iDimension; ++id )
00233             wto[id] = m_aimgPreComputeTransformToWorld[id].GetPixelGreyscale(x,y,z,t) ;
00234         return true ;
00235     }
00236 
00237 };
00238 
00239 
00240 #endif // zxhMetricBase_h
00241 
00242 
00243 
 All Classes Namespaces Functions Variables Typedefs