Bundle Adjustment简述
在SFM (structure from motion)的计算中BA (Bundle Adjustment)作为最后一步优化具有很重要的作用,在近几年兴起的基于图的SLAM (simultaneous localization and mapping)算法里面使用了图优化替代了原来的滤波器,这里所谓的图优化其实也是指BA。其实很多经典的文献对于BA都有深深浅浅的介绍,如果想对BA的全过程做一个全面的更深层次的了解,推荐阅读 Bundle Adjustment —A Modern Synthesis.
什么是BA
Bundle Adjustment中文译为光束法平差,还有其他一些翻译如束调整、捆集调整或者捆绑调整等等。
所谓bundle,来源于bundle of light,其本意就是指的光束,这些光束指的是三维空间中的点投影到像平面上的光束,而重投影误差正是利用这些光束来构建的,因此称为光束法强调光束也正是描述其优化模型是如何建立的。
用一句话来描述BA那就是,BA的本质是一个优化模型,其目的是最小化重投影误差。重投影也就是指的第二次投影,
- 第一次投影指的是相机在拍照的时候三维空间点投影到图像上
- 然后我们利用这些图像对一些特征点进行三角定位 (triangulation),利用几何信息构建三角形来确定三维空间点的位置,参考对极几何
- 最后利用计算得到的三维点的坐标(注意不是真实的)和我们计算得到的相机矩阵(当然也不是真实的)进行第二次投影,也就是重投影
重投影误差指的就是真实三维空间点在图像平面上的投影(也就是图像上的像素点)和重投影(其实是用我们的计算值得到的虚拟的像素点)的差值,因为种种原因计算得到的值和实际情况不会完全相符,也就是这个差值不可能恰好为0,此时也就需要将这些差值的和最小化获取 最优的相机参数及三维空间点的坐标。
其中,
- $n$个3D点在$m$个view(拍摄场景)中,
- 向量$X_{ij}$:图像j上的第i个点projection(坐标)
- 值$v_{ij}$:如果点i在图像j上有映射,则$v_{ij}=1$; else $v_{ij}=0$;
- 每个图像j由向量$a_j$参数化
- 每个3D点由$b_i$参数化
- $Q(a_i,b_j)$:点i在图像j上的predicted projection
- $d(x,y)$:向量$x,y$的欧式距离