最近分析了PToptimizer,整個程序流程。大致如下:
1)導(dǎo)入優(yōu)化的腳本文件,這個文件包絡(luò)萬象,輸入圖像的信息(roll,pitch,yaw, hfov,width,height,圖像的投影方法等),輸出全景圖的設(shè)置,控制點的羅列,優(yōu)化參數(shù)的控制等(i,p,c,v),其中相對優(yōu)化最重要的就是控制點和是否對參數(shù)進行優(yōu)化。設(shè)置的正確與否,影響后面的優(yōu)化結(jié)果。使用前,一定要好好看看Optimize.txt
2)根據(jù)script填充AlignInfo結(jié)構(gòu)體,注意AlignInfo最后被注入了adjust.c的 static AlignInfo *optInfo中。初始LM輸入?yún)?shù)和輸出參數(shù)的函數(shù),及重要的fcn都包含在結(jié)構(gòu)體OptInfo中,整個LM算法都是圍繞AlignInfo和OptInfo展開的。驅(qū)動他們結(jié)合的是函數(shù)lmfunc fcn(它是個函數(shù)指針,實際調(diào)用int fcnPano(int m, int n, double x[], double fvec[], int *iflag) )。
3)計算誤差的函數(shù)就是上面提到的fcn,這個函數(shù)舉足輕重,要義深刻,根據(jù)width = 360, hfov = 360, height = 180的參考全景圖,利用圖像間匹配的控制點,不同投影模式,不同投影函數(shù)調(diào)用,來計算參數(shù)和誤差。
4)通過LM反復(fù)迭代,得到全局最優(yōu)。(這部分還有一些不解,具體分析到代碼,再做討論)。
PToptimizer是hugin的靈魂,一點不過。心與心的碰觸,代碼與代碼的交叉,靈魂轉(zhuǎn)化,功力跟進。
1)導(dǎo)入優(yōu)化的腳本文件,這個文件包絡(luò)萬象,輸入圖像的信息(roll,pitch,yaw, hfov,width,height,圖像的投影方法等),輸出全景圖的設(shè)置,控制點的羅列,優(yōu)化參數(shù)的控制等(i,p,c,v),其中相對優(yōu)化最重要的就是控制點和是否對參數(shù)進行優(yōu)化。設(shè)置的正確與否,影響后面的優(yōu)化結(jié)果。使用前,一定要好好看看Optimize.txt
2)根據(jù)script填充AlignInfo結(jié)構(gòu)體,注意AlignInfo最后被注入了adjust.c的 static AlignInfo *optInfo中。初始LM輸入?yún)?shù)和輸出參數(shù)的函數(shù),及重要的fcn都包含在結(jié)構(gòu)體OptInfo中,整個LM算法都是圍繞AlignInfo和OptInfo展開的。驅(qū)動他們結(jié)合的是函數(shù)lmfunc fcn(它是個函數(shù)指針,實際調(diào)用int fcnPano(int m, int n, double x[], double fvec[], int *iflag) )。
3)計算誤差的函數(shù)就是上面提到的fcn,這個函數(shù)舉足輕重,要義深刻,根據(jù)width = 360, hfov = 360, height = 180的參考全景圖,利用圖像間匹配的控制點,不同投影模式,不同投影函數(shù)調(diào)用,來計算參數(shù)和誤差。
4)通過LM反復(fù)迭代,得到全局最優(yōu)。(這部分還有一些不解,具體分析到代碼,再做討論)。
PToptimizer是hugin的靈魂,一點不過。心與心的碰觸,代碼與代碼的交叉,靈魂轉(zhuǎn)化,功力跟進。