最近分析了PToptimizer,整个程序流程。大致如下:
1)导入优化的脚本文件,这个文件包络万象,输入图像的信息(roll,pitch,yaw, hfov,width,height,图像的投影方法等),输出全景图的设置,控制点的罗列,优化参数的控制等(i,p,c,v),其中相对优化最重要的就是控制点和是否对参数进行优化。设置的正确与否,影响后面的优化结果。使用前,一定要好好看看Optimize.txt
2)根据script填充AlignInfo结构体,注意AlignInfo最后被注入了adjust.c的 static AlignInfo *optInfo中。初始LM输入参数和输出参数的函数,及重要的fcn都包含在结构体OptInfo中,整个LM算法都是围绕AlignInfo和OptInfo展开的。驱动他们结合的是函数lmfunc fcn(它是个函数指针,实际调用int fcnPano(int m, int n, double x[], double fvec[], int *iflag) )。
3)计算误差的函数就是上面提到的fcn,这个函数举足轻重,要义深刻,根据width = 360, hfov = 360, height = 180的参考全景图,利用图像间匹配的控制点,不同投影模式,不同投影函数调用,来计算参数和误差。
4)通过LM反复迭代,得到全局最优。(这部分还有一些不解,具体分析到代码,再做讨论)。
PToptimizer是hugin的灵魂,一点不过。心与心的碰触,代码与代码的交叉,灵魂转化,功力跟进。
posted on 2011-05-21 17:37
noBugnoGain 阅读(828)
评论(2) 编辑 收藏 引用 所属分类:
图像处理