zxhproj v 2.2
zxhproj

zxhMetricMIFFD.h

00001 
00002 /*=========================================================================
00003 
00004   Program:   ZXH Registration Software
00005   Author:    Xiahai Zhuang
00006   Module:    $RCSfle: zxhMetricMIFFD.h    $
00007   Language:  C++
00008   Date:      $Date: From  2008-10 $
00009   Version:   $Revision: 2.0 $
00010   revision:
00011 =========================================================================*/
00012 #ifndef zxhMetricMIFFD_h
00013 #define zxhMetricMIFFD_h
00014 
00015 #include "zxh.h"
00016 #include "zxhMetricFFDBase.h"
00017 #include "zxhTransformFFD.h"
00018 #include "zxhMetricMIConstraint.h"
00019 #include <math.h>
00027 
00028 class zxhMetricMIFFD :  public zxhMetricMIConstraint, 
00029                         public zxhMetricFFDBase // interface for FFD
00030 {
00031 public:
00033     zxhMetricMIFFD(void);
00035     ~zxhMetricMIFFD(void);
00036 
00038     virtual std::string GetMetricType() {return zxhMetricMIConstraint::GetMetricType()+"_"+zxhMetricFFDBase::GetMetricType(); } ;
00039 
00041     virtual zxhMetricBase* Clone( zxhMetricBase * & pRet ); 
00042 
00044     virtual int ComputeConstanceForFFDGradient() ;
00046     virtual int GetValue( zxhlfloat & fvalue ) ;
00047 
00049     virtual int GetValueByFFDGrid(zxhlfloat&fValue, int aiCtrPnt[ImageDimensionMax]);
00050     
00052     virtual int GetDiffByFFDGrid(float * afPD, // output partial differentiation 
00053                                     zxhTransformFFDBase * pFFDGrid,
00054                                     int * aiCtrPnt,
00055                                     zxhTransformFFDBase * pDifferential );
00057     virtual int GetDiffByFFDGridOnFFDPhysicalVector(float * afPD, // output partial differentiation
00058                                             zxhTransformFFDBase * pFFDGrid,
00059                                             int * aiCtrPnt,
00060                                             zxhTransformFFDBase * pDifferential,
00061                                             float * vector) ;
00062 
00063 protected:
00065     virtual int GetFiniteDiffByFFDGrid(float * afPD, // output partial differentiation 
00066                                       zxhTransformFFDBase * pFFDGrid,
00067                                       int * aiCtrPnt,
00068                                       zxhTransformFFDBase * pDifferential );
00070     virtual int GetFiniteDiffByFFDGridOnVector(float * afPD, // output partial differentiation
00071                                              zxhTransformFFDBase * pFFDGrid,
00072                                              int * aiCtrPnt,
00073                                              zxhTransformFFDBase * pDifferential,
00074                                              float * vector);
00075     
00077     // Compute histogram region outside of local support of ctrpnt: EvaluateMMIpositionWeightedHistogram
00078     //   compute the difference: zxhMetricFFDBase::GetDiffByFFDGrid( afPD,pFFDGrid,aiCtrPnt,pDifferential );
00079     virtual int GetDiffByFFDGridForMMI( float * afPD, // output partial differentiation
00080                                             zxhTransformFFDBase * pFFDGrid,
00081                                             int * aiCtrPnt,
00082                                             zxhTransformFFDBase * pDifferential );
00088     virtual int ComputeHistogramFromPDF4DFFD(zxhlfloat*&afPDF,zxhlfloat&fTotalFreq, 
00089                                             float xfTestFrom,float xfTestTo,float yfTestFrom,float yfTestTo,
00090                                             float zfTestFrom,float zfTestTo,float tfTestFrom,float tfTestTo ) ;
00091 
00098     virtual int ComputeHistogramForControlPoint( zxhlfloat*&afPDF,zxhlfloat&fTotalFreq,  int aiCtrPnt[ImageDimensionMax] ) ;
00100     virtual void    SetFFDMetricBase()  {m_pMetricBase=this;};
00101 private:
00102     // for: Zhuang, et al.: Spatially Encoded Mutual Information for Nonrigid Registration. IEEE Transactions on Medical Imaging.
00103     // this was just for publication validation using cost function SUM(MIs) or MAG(MIs)
00104 
00106     int GetDiffByFFDGridForSMIG1(   float * afPD, // output partial differentiation
00107                                     zxhTransformFFDBase * pFFDGrid,
00108                                     int * aiCtrPnt,
00109                                     zxhTransformFFDBase * pDifferential );
00111     int SMIRecomputeMMIimage();
00113     zxhlfloat SMIGetSsValueByFFDGrid(int aiCtrPnt[ImageDimensionMax]);
00114 
00115 };
00116 
00117 #endif
00118 
00119 
00120 
00121 
 All Classes Namespaces Functions Variables Typedefs