三维重建的定位定姿算法

作者:李城
来源:公众号|计算机视觉工坊(系投稿)
3D视觉的核心问题是恢复场景结构、相机位姿、和相机参数 , 而解决方式有两种 , 一种是off-line的sfm(structure from motion) , 一种on-line的slam(simultaneous localization and mapping) 。 Slam 与sfm的区别在于 , 大多数slam系统是需要提前标定相机 , 而sfm 则不需要提前标定(通常所说的三维重建和slam的区别 , 严格意义上应该是sfm 和slam的区别) 。
三维重建的定位定姿算法文章插图
Sfm 可以分为以下几类:Global SfM、Incremental SfM、Hybrid SfM、Distributed SfM , 这里主要讲解Global SfM和ncremental SfM(主要集中在global sfm) 。
一、Global SfM workflow:
三维重建的定位定姿算法文章插图
Global sfm 的内容包括rotation averaging 和anslation averaging 。
Rotation averaging
观测值:一组相机pose的相对rotation
目标:计算相机的绝对旋转
优化:L2范数 , 采用L2范数的原因有两个:1)估计一个好的旋转初始值 2)收敛快
理论基础:
三维重建的定位定姿算法文章插图
三维重建的定位定姿算法文章插图
三维重建的定位定姿算法文章插图
【三维重建的定位定姿算法】translation averaging
观测值:同rotation averaging 一样 , 观测值是两一组pose之间的相对translation
目标:计算相机的绝对旋转
优化:L1范数 , 原因是L1 范数对噪声鲁邦
理论基础:
三维重建的定位定姿算法文章插图
三维重建的定位定姿算法文章插图
三维重建的定位定姿算法文章插图
Translation averaging 在global sfm 中计算困难 , 原因如下:
1、 两视图之间的运动不能恢复尺度(tvec 是从本质矩阵中恢复出来的 , 但是本质矩阵的秩是5 , 不包含尺度 , 所以global sfm 是属于三焦张量问题 , 即是至少tack 3帧才能进行运算 。 同时 , global sfm 容易出现退化现象 , 当相机都处于同一条线上时候 , 对于无人机图像来说 , 这个时候轨迹就会出现bending map 。
解决bending map 的手段有三点:
(1)提前对相机标定
(2)以无人机为例 , 飞行航线不要在恒定高度上飞行
(3)融合其他传感器 , 如gps 位置约束等
退化的case 如下:
三维重建的定位定姿算法文章插图
三维重建的定位定姿算法文章插图
以上分别为侧面图和俯视图
以上结果是fusion low-cost gps的效果 , 但是依旧可以看出有弯曲的现象(不融合的效果特别差)
飞行方式改变 , fusion low-cost gps , 退化现象消失 , 如下:
三维重建的定位定姿算法文章插图
三维重建的定位定姿算法文章插图
从侧面图和俯视图可以看出 , 当飞行方式发生改变 , global sfm 退化现象消失 。
2、 global sfm translation averaging第二个的痛点是对噪声敏感 , 其不像Incremental sfm , 不断的ransac 和local ba 来减少bad EGs的影响 。
如何去改善global sfm 的鲁棒性:
1)如果rotation 是已知的(不够精确) , 提供global rotation初始值给global sfm pipeline, 利用这些初始值在BA中增加relative rotation constraint
2)如果位置已知 , sfm 增加位置约束 , 即最小化先验位置和估计的位置之间的gap , 位置约束可以替代slam回环(如果是low cost gps ,位置约束不能保证精度 , 但可以起到一个control strcture 的作用(AR 常用)—参考vins-fusion思想, 这个openmvg 中已经实现位置约束 。
二、Incremental SfM workflow:
三维重建的定位定姿算法文章插图
增量sfm这里不准备太多的叙述 , 需要注意的是初始化选择像对的基准:

  1. enough matching
  2. big baseline
三、global sfm和incremental sfm 优缺点和应用场景
三维重建的定位定姿算法文章插图
应用场景:
1.当考虑速度不考虑精度的时候 , 并且当图像overlap 比较大的时候 , 用global sfm 可以达到理想效果 , 因为有更多的数据去average(Feature track based translation averaging)