【报告】相机位姿估计与点云优化
一、 研究问题
在基于视觉的三维重建算法(如 Structure From Motion, SFM1)以及同时定位与地图构建(Simultaneous localization and mapping, SLAM23)等涉及立体视觉的理论研究中,需要通过相机成像模型及特征点匹配等理论恢复相机位姿以重构三维场景,即目标点云的生成。
相机的位姿估计指从若干给定的图像中恢复相机的运动(位姿),进而恢复目标的三维结构(点云)。相机运动(位姿)即相机的外部参数,是世界坐标系到相机坐标系的变换,包含旋转和平移,即欧式变换。相机成像模型如下:
其中
二、 研究现状
三维重建相关的算法中,许多通过图像信息恢复三维结构。图像信息主要由特征点表示,通过特征点可以构建图像间的联系,进一步可以得到目标的三维信息。特征点指的是图像中具有代表性的点,反映图像的局部特征。代表性的图像特征提取算法有:SIFT5、SURF6、ORB7 等。这一类算法提取的特征点具有很强的不变性,如尺度不变性、光照不变性、旋转不变性等,并高效地表达图像的局部特征。特征点包含关键点及对应的描述符,关键点指特征点在图像的具体坐标,描述符则体现关键点的局部特征,为不同图像中特征的匹配提供支持。特征匹配是确定图像间关联关系的重要步骤,但由于特征点一般数量众多,特征匹配带来的资源消耗也十分大,快速最邻近算法(FLANN)8为大规模匹配作了优化。
在单目视觉中通过图像间的像素坐标匹配建立运动关系,可将问题转换为利用两组
2D
匹配对估计相机位姿,这类问题可通过对极几何解决。对极几何本质上是三维空间目标点和两相机中心共面的约束,由本质矩阵和基础矩阵表达,这两个矩阵蕴含了相机的运动,可以使用八点法9或者五点法10求解
深度相机(RGB-D)通过红外结构光或“Time Of Flight”原理获得目标深度信息,从而直接得到目标的 3D 信息,是尺度确定的。从而相机的运动可以从两组 3D 匹配点中恢复,可以使用迭代最近点(Iterative Closest Point,ICP)求解。但 RGB-D 相机存在测量范围窄,噪声大,易受日光干扰等问题,一般适用于室内。
双目相机也可得到深度信息。它由两个单目相机组成,这两个相机的距离称为基线,通过基线以及视差图计算每一个像素的空间位置。双目相机比 RGB-D 相机具有更好的适用性,但视差图的计算量是巨大的,所以双目相机的主要问题在于如何加速计算以节约资源。
当知道空间点的三维坐标以及它们在图片上的投影位置时估计相机位姿,这类问题称为 PnP(Perspective-n-Point)问题。其中空间点的三维坐标可以通过三角测量或者 RGB-D 相机得到。PnP 克服了对极约束中尺度的不确定,是一种主要的姿态估计方法。PnP 问题求解有许多方法,如利用三对点对求解的 P3P11,当目标为平面时还可以使用直接线性变换(DLT),还有 EPnP (Efficient PnP)12等。这些方法对匹配点的精度要求十分高,但在实际情况中虽然可获得很大数量的匹配点对,但每个点对都存在一定误差,即存在噪声,而光束法平差(Bundle Adjustment,BA)通过构建非线性最小二乘问题对位姿和点云优化,具有很好的鲁棒性,在匹配点数量众多的情况下效果很好,所以这里讨论 BA 的求解方法。
三、解决方案
光束法平差13,Bundle Adjustment 是使用非线性优化求估计位姿,以及优化空间点位置的方法。这一章节先介绍非线性优化的相关理论,然后通过相机成像模型构建重投影误差,从而建立优化函数。并使用李代数将问题转换为无约束优化问题。
3.1 非线性最小二乘
经典的非线性最小二乘问题可以表达为:
- 确定初值
- 对于第 k 次迭代,搜寻一个增量
,满足 达到最小 - 迭代停机条件:当
足够小时,停止 - 否则进行更新:
,并返回步骤 2
在迭代过程中,不断更新
- 确定初值
- 对于第 k 次迭代,求解当前的雅可比矩阵
并构建方程 - 迭代停机条件:当
足够小时,停止 - 否则进行更新:
,并返回步骤 2
高斯牛顿法存在步长可能过大的问题。一种改进为列文伯格-马夸尔特(Levenberg-Marquardt)14方法,它采用了动态步长,很大程度上改良了高斯牛顿法。
3.2 李群李代数
在 3.1 节介绍的为无约束非线性最小二乘算法,但在光束法平差中需要对旋转矩阵求导并更新,旋转矩阵具有内在的约束,需要保证其为单位正交阵。旋转矩阵没有加法定义,即两个旋转矩阵相加并不是旋转矩阵,定义在旋转矩阵上有意义的运算为乘法运算。
三维旋转矩阵构成特殊正交群 SO(3),三维旋转加平移则构成特殊欧式群
SE(3),定义如下:
由式 3.2.8、3.2.7 ,并根据左扰动模型可以得到
3.3 光束法平差
根据相机成像模型有:
定义单个点误差为:
定义变量
3.4 初值构建
如 3.1 节所述,非线性最小二乘优化的结果不一定是全局最优,所以需要构建良好的初值。对于光束法平差,可以使用 EPNP 等算法快速构建相机位姿的初值,然后使用迭代优化。目标三维点云可由三角测量得到,并作为点云初始值。
四、实验结果
4.1 理论验证
此部分代码以提交至本人 Github:https://github.com/Weijun-Lin/SLAM-Try/tree/master/BA-ceres
利用生成的数据进行理论验证,使用一个相机的 3D-2D 匹配优化位姿以及点云。步骤如下:
- 构建实验数据,确定相机内参矩阵以及相机真实位姿,并生成点云,根据相机成像模型建立
3D-2D 匹配,相机位姿使用李代数
表示,前三维为平移,后三维为旋转即 - 对真实位姿以及 3D 点云添加噪声干扰,得到待优化数据
- 使用光束法平差(BA)优化
- 利用均方误差(MSE)作为评价标准
原始位姿如下:
- 相机内参:
的单位阵 - 相机真实位姿:
- 添加噪声后位姿:
原始点云图:

光束法平差优化后位姿为:

均方误差统计如下表:
位姿误差 | 点云误差 | |
---|---|---|
优化前 | 0.091614 | 0.78033 |
优化后 | 0.088821 | 0.59205 |
可以看出,位姿以及点云在光束法平差后得到了优化。
4.2 BAL 数据集测试
BAL 数据集地址:https://grail.cs.washington.edu/projects/bal/,BAL 数据集包含了多幅图像,包含了 3D 空间点云,以及在每一副图像上的匹配点。这里使用的是 problem-16-22106-pre.txt.bz2 数据。此部分代码参考自 Github15,地址为:https://github.com/gaoxiang12/slambook2/tree/master/ch9。
优化之前点云图为:
优化之后点云为:
可以看出优化之后点云将原常见轮廓更好的体现了出来
五、结论
综上,光束法平差对大规模点云优化以及相机位姿估计有很大的作用,但由于优化参数过于庞大,带来的空间以及时间开销都是巨大的。所以需要对问题规模做合理的约束。
光束法平差本质是一个非线性优化,它需要构建良好的初值,初值的确定对其优化效果特别重要。在 4.1 节,优化效果不是特别好,原因在于相机位姿只有一个,当存在多个相机位姿提供多个匹配关系时,优化效果会更加,如 4.2 节所示。