zxhproj v 2.2
zxhproj
|
00001 00002 /*========================================================================= 00003 00004 Program: ZXH Registration Software 00005 Author: Xiahai Zhuang 00006 Module: $RCSfle: zxhMetricPhaseFFD.h $ 00007 Language: C++ 00008 Date: $Date: From 2009-02 $ 00009 Version: $Revision: 2.0 $ 00010 revision: 00011 =========================================================================*/ 00012 #ifndef zxhMetricPhaseFFD_h 00013 #define zxhMetricPhaseFFD_h 00014 00015 #include "zxh.h" 00016 #include "zxhMetricBase.h" 00017 #include "zxhMetricPhase.h" 00018 #include "zxhMetricFFDBase.h" 00019 #include "zxhImageProcessPhase.h" 00020 #include <math.h> 00021 00031 00032 class zxhMetricPhaseFFD : public zxhMetricFFDBase, public zxhMetricPhase 00033 { 00034 public: 00036 zxhMetricPhaseFFD(void); 00038 virtual ~zxhMetricPhaseFFD(void); 00039 00041 virtual std::string GetMetricType() {return zxhMetricPhase::GetMetricType()+"_"+zxhMetricFFDBase::GetMetricType(); } ; 00042 00044 virtual zxhMetricBase* Clone( zxhMetricBase * & pRet ); 00045 00047 virtual int ComputeConstanceForFFDGradient() ; 00048 00051 virtual int GetValueByFFDGrid(zxhlfloat&fValue, int aiCtrPnt[ImageDimensionMax]); 00052 00053 //GetDiffByFFDGrid 00054 //GetDiffByFFDGridOnFFDPhysicalVector 00055 00057 virtual int GetValue( zxhlfloat & fValue ) 00058 { 00059 //zxhTransformBase * pTransformOrig = m_pTransform ; 00060 //m_pTransform = 0 ; This is commented because the line-search optimization 00061 int iret = zxhMetricPhase::GetValue( fValue ) ; 00062 if( m_fWeightFFDBendingEnergy > 0 ) 00063 { 00064 zxhlfloat bending = this->GetBendingEnergy( (zxhTransformFFDBase*)m_pTransform ) ; 00065 if( glbVerboseOutput>0) std::cout<<"success: \t\t bending energy "<<bending<<"\n" ; 00066 fValue = fValue - m_fWeightFFDBendingEnergy*bending; //minimize bending energy 00067 } 00068 return iret ; 00069 }; 00070 00071 protected: 00073 virtual void SetFFDMetricBase() {m_pMetricBase=this;}; 00074 }; 00075 00076 #endif 00077 00078 00079 00080