zxhproj v 2.2
zxhproj

zxhMetricPhaseFFD.h

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