zxhproj v 2.2
zxhproj
|
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