最近分析了PToptimizer,整個(gè)程序流程。大致如下:
1)導(dǎo)入優(yōu)化的腳本文件,這個(gè)文件包絡(luò)萬象,輸入圖像的信息(roll,pitch,yaw, hfov,width,height,圖像的投影方法等),輸出全景圖的設(shè)置,控制點(diǎn)的羅列,優(yōu)化參數(shù)的控制等(i,p,c,v),其中相對優(yōu)化最重要的就是控制點(diǎn)和是否對參數(shù)進(jìn)行優(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中,整個(gè)LM算法都是圍繞AlignInfo和OptInfo展開的。驅(qū)動(dòng)他們結(jié)合的是函數(shù)lmfunc fcn(它是個(gè)函數(shù)指針,實(shí)際調(diào)用int fcnPano(int m, int n, double x[], double fvec[], int *iflag) )。
3)計(jì)算誤差的函數(shù)就是上面提到的fcn,這個(gè)函數(shù)舉足輕重,要義深刻,根據(jù)width = 360, hfov = 360, height = 180的參考全景圖,利用圖像間匹配的控制點(diǎn),不同投影模式,不同投影函數(shù)調(diào)用,來計(jì)算參數(shù)和誤差。
4)通過LM反復(fù)迭代,得到全局最優(yōu)。(這部分還有一些不解,具體分析到代碼,再做討論)。
PToptimizer是hugin的靈魂,一點(diǎn)不過。心與心的碰觸,代碼與代碼的交叉,靈魂轉(zhuǎn)化,功力跟進(jìn)。
posted on 2011-05-21 17:37
noBugnoGain 閱讀(848)
評論(2) 編輯 收藏 引用 所屬分類:
圖像處理