zxhproj v 2.2
zxhproj

zxhTransformMultipleAffines.h

00001 
00002 /*=========================================================================
00003 
00004   Program:   ZXH Registration Software
00005   Author:    Xiahai Zhuang
00006   Module:    $RCSfle: zxhTransformMultipleAffines.h    $
00007   Language:  C++
00008   Date:      $Date: From  2011-03 $
00009   Version:   $Revision: 2.2 $
00010 
00011   Update log:
00012 
00013 
00014 =========================================================================*/
00015 
00016 #ifndef zxhTransformMultipleAffines_h
00017 #define zxhTransformMultipleAffines_h
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 #include "zxhTransformBase.h"
00026 #include "zxhGradientBase.h"
00027 #include "zxhTransformAffine.h"
00028 #include "zxhImageData.h"
00029 #include "zxhImageModelingLinear.h"
00030 #include <string>
00031 
00032 class zxhTransformMultipleAffines : public zxhTransformAffine
00033 {
00034 public:
00036     zxhTransformMultipleAffines();
00038     virtual ~zxhTransformMultipleAffines();
00040     virtual zxhTransformBase*   Clone(zxhTransformBase*&pRet);
00041 
00043     virtual std::string GetPrintString();
00045     virtual std::string GetTransformType()                          {return "AFFS";} ;
00047     virtual bool    SetLocalMatrixFromFile(const char* pFile);
00049     virtual bool    SetTransformFromStream(std::ifstream& ifs);
00050 
00052     virtual bool    SetTransformIdentity();
00055     virtual bool    SetTransformAlignByCentre(int iCentre);
00057     virtual bool    SetTransformAlignByCentre(std::string sCentre)
00058     {
00059         if(strcmp(sCentre.c_str(),"centre")==0) return SetTransformAlignByCentre(2);
00060         if(strcmp(sCentre.c_str(),"gcentre")==0) return SetTransformAlignByCentre(3);
00061         return false;
00062     }
00064     virtual bool    SetImage(zxhImageData*pTest,zxhImageData*pRef);
00066     virtual void    SetLocalAffineRotateCentre( int iLocal, float *afwCenter )
00067     {   m_apLocalAffines[iLocal]->SetCenter( afwCenter ) ; } ;
00068 
00070     //virtual zxhTransformMultipleAffines & operator = (const zxhTransformMultipleAffines b);
00072     virtual bool    SetTransformPara(float f);
00074     virtual bool    GetAdd(zxhTransformBase*,zxhTransformBase*);
00076     virtual bool    Add(zxhTransformBase*) ;
00078     virtual bool    GetSubtract(zxhTransformBase*,zxhTransformBase*) ;
00080     virtual bool    Subtract(zxhTransformBase*) ;
00082     virtual bool    GetMultiply(zxhTransformBase*,float);
00084     virtual bool    Multiply(float) ;
00086     virtual bool    GetMultiplyByPara(zxhTransformBase*,zxhTransformBase*) ;
00088     virtual bool    MultiplyByPara(zxhTransformBase*) ;
00090     virtual bool    GetCompareByPara(zxhTransformBase*,float f=0) ;
00092     virtual bool    CompareByPara(float f=0) ;
00093 
00095     virtual float   GetMagnitudeAsVector(void);
00097     virtual float   GetMaxLocalMagnitudeAndNormalisation( bool bNormalisationByLocalMagnitude ) ;
00099     virtual float   GetMaxAbsValueFromParameters(void) ;
00101     virtual float   GetPointMutiplyAsVector(zxhTransformBase*);
00102 
00104     virtual void    UpdateMatrix();
00105 
00107     virtual int GetDegreeOfFreedom () ;
00109     virtual int GetDOFWithValue( float f ) ;
00110 
00112     virtual bool SetLocalAffines( zxhTransformAffine** p ) ;
00114     virtual bool SetNoOfLocalAffines( int n ) ;
00116     virtual bool SetNoOfLocalMatrix( int n ) ;
00118     virtual bool SetNoOfLocalAffines(int n, zxhTransformAffine*type) ;
00120     virtual int GetNoLocalAffines( )                    { return m_nNoLocalAffines; };
00122     virtual zxhTransformAffine** GetLocalAffines ()     { return m_apLocalAffines;};
00123 
00125     virtual bool    AdvanceStep(zxhTransformBase*p, float f=1)  ;
00126 
00127 protected:
00129     int         m_nNoLocalAffines ;
00131     zxhTransformAffine      *m_apLocalAffines[ZXH_LocalAffineMaxNumber] ;
00132 
00133 
00135 public:
00137     virtual int     GetNoParameters()       {return 22*(this->GetNoLocalAffines()+1) ;};
00139     virtual float   GetParameters(int index) ;
00141     virtual bool    SetParameterValue( int index, float f ) ;
00142 
00144     virtual void    InitialGradientDifferentialStep(zxhTransformAffine*pGrad,
00145                         float TranslateScale, float RotateScale, float ScalingScale,
00146                         float factor=1);
00148     virtual void    InitialGradientDifferentialStep(zxhTransformAffine*pGrad,
00149                         float TranslateScale[], float RotateScale[], float ScalingScale[],
00150                         float SkewScale, float factor=1);
00151 
00155     virtual bool    ComputeMetricGradient
00156         (
00157         zxhMetricBase*pMetric,
00158         zxhTransformBase*pInfluence=0
00159         );
00160 
00161 protected:
00163     virtual bool    ComputeMetricGradientGlobalAffine
00164         (
00165         zxhMetricBase*pMetric,
00166         zxhTransformBase*pInfluence=0
00167         );
00168 };
00169 
00170 #endif
00171 
00172 
 All Classes Namespaces Functions Variables Typedefs