Bundle adjustment 有很多书将其翻译成是捆绑调整,其实不然,其就是摄影测量中的光束法平差,即是整体求解相机的位姿和加密点坐标。
但是由于计算机视觉中是物方坐标系到图像的像素坐标系,而摄影测量是物方坐标系到图像的像平面坐标系,出于这个原因,两者在公式符号上有些差异。
本博客以SLAM 中相机方程关于相机位姿的导数矩阵(2*6的雅克比)和摄影测量后方交会时候的误差方程系数矩阵(也是2*6)为例,对比其两者区别:
注:导数矩阵有什么用?
按照测量平差理解,非线性方程,首先要线性化,即是全微分,然后才能进行误差传播。
按照计算机视觉,导数矩阵可以提供优化的方向,即是梯度方向,指导迭代,如机器学习的梯度下降法
SLAM 中2*6的雅克比见下图:
摄影测量中的误差方程矩阵如下:
注意这里的H等于 Z一拔,摄影测量是先平移后旋转,而计算机视觉是先旋转,后平移。
可以看出,两个矩阵几乎一样,不同有两处:1、角元素改正数的顺序不同 2、符号上的差异,见用圆圈圈起来的地方。
注:知道了导数矩阵,那么如何迭代获得最优值?
对于摄影测量,利用高斯牛顿,即是利用正规方程(就是法方程,笔者在Slam 与测量平差中介绍过)得到改正数,若改正数小于一个阈值,则退出,否则更新姿态元素进行下一次。
对于SLAM 则是,利用列-马(就是岭回归)或者梯度下降法。