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