这是发表在2016年的CVPR的一篇文章。 首先,该论文在introduction中提到,SFM主要分为三类:增量式、分层式、全局式,其中最为流行的是增量式,但是目前在鲁棒性、精确度、完整性等方面还有待提高。 随后,本文针对整量式SFM中三角化和BA等步骤进行了改进,这能够提高SFM的精确率和鲁棒性以及重建完整性。 论文中,介绍了传统SFM的基本流程:
首先,SFM通常进行特征提取,然后匹配以及几何校验来滤出外点,经过前面的步骤就得到了场景图(scene graph),该场景图是后续增量式的基础,也就是提供数据关联等信息的作用。增量式重建中需要非常仔细挑选两帧进行重建,在图像进行注册之前,需要进行三角化场景点和滤出外点还得BA优化当前的模型。
检索匹配 输入:一系列输入图片;输出:经过几何校验后的图像匹配关系。
为了得到尽可能准确的匹配关系,该步骤中涉及特征提取,匹配以及几何校验。
-
特征匹配:可以是任何一种特异性较强的特征,如SIFT(COLMAP默认),主要为后续的特征匹配服务; -
匹配阶段,将输入的图像两两之间进行匹配(可以发现,这一步的时间复杂度非常大),得到潜在的场景重合部分; -
几何验证:如果一个有效的变换在图像之间映射了足够数量的特征,那么它们就被认为是经过几何验证的。这一阶段的输出是一个场景图,以图像为节点,验证过的图像对为边。 -
Initialization:选择合适的初始化图像对,错误的初始化,将会陷入局部最优。 要求:足够多的匹配点 足够远的相机中心 -
Image Registration:即根据已有的SfM模型估计图片的位姿(更准确的是估计拍摄该图像相机的位姿);根据未知的图像与地图中图像的2D-2D匹配,进而得到二者之间的2D-3D匹配,然后利用RANSAC-PNP解算出该相机位姿,完成图像注册。为了提高位姿结算精度以及可靠的三角化,本文设计了新颖的鲁棒后续帧选择策略,后续章节进行介绍。 -
Triangulation: 新注册的图像需要对已有的场景点有足够多的观测,同时也可以通过三角化扩展场景点。 现有的三角化方法鲁棒性不足且耗时严重。本文设计了一种全新的三角化策略,后续章节进行介绍。 -
BA :优化目标是通过调整相机位姿与地图点位置使重投影误差最小:
本算法的创新点
本文的贡献主要有以下5个方面:
1. Scene Graph Augmentation (场景图增强)
多模态几何校验策略来增强有几何关系的场景图。
首先,估计基础矩阵F,如果内点Nf足够多,则通过验证。 然后,估计单应矩阵 H,if NH/Nf < HF这阈值,则说明该相机发生了移动,则认为该场景是常规场景
对于标定过的相机,估计本质矩阵E ,if 满足 则判断标定的参数正确。 如果标定正确,且符合常规场景,则分解本质矩阵,三角化相应内点,求出三角化角度α,该角度是判断场景是纯旋转(pure rotation, panoramic)还是平面(planar scenes, planar)。
后续最优帧选择
参与重建的图像的选择对重建的效果的影响是非常大,若选择了不好的图像,可能会导致相机无法注册或者三角化失败。
通常的做法是选择能看到三角化点最多的图像进行注册。但仅数量多并不意味着好,文献[1]已经通过实验验证「PNP位姿解算多精度不仅与观测点数量相关而且与观测点在图像上的分布有关」:若点分布越均匀,位姿结算精度越高。
鲁棒高效三角化
本文使用了RANSAC对多帧观测进行三角化。这是观测点的归一化坐标 以及它对应的投影矩阵
然后通过该式(2)可以求出三角化的点 其中τ()是任何一种三角化方法(本文使用DLT方法)。 一个比较好的三角化点需要满足两个条件:
-
足够大的三角化角度; -
三角化点深度为正,且该点的重投影误差小于阈值
另外:三角化角度是通过这式子求出来的
BA优化
为了消除累计误差,在图像注册以及三角化之后需要进行BA优化。由于增量式重建仅会影响邻近帧,所以没有必要每次都做GBA。因此,当图像被注册之后仅对相关性最好的图像集合进行LBA即可。只有当模型增长到了一定程度才会对进行GBA,这可以分摊时间消耗。
- 参数化:LBA中使用柯西核函数应对外点;当优化中有数百个相机时,使用PCG求解器;
- 滤外点:BA之后,由于相机位姿/地图点发生了变化,此时会有很多不符合要求的观测,删除掉那些重投影误差较大的观测;然后检查几何校验条件是否满足;对于GBA,还要检查相机是否退化;
- 重三角化(post Re-Triangulation, post RT):由于BA对位姿进行了优化,这使得之前由于不准确/错误位姿导致无法三角化的点有了能够被重新三角化的可能性,所以在BA之后执行一步重三角化(类比于BA之前的三角化);
- 迭代优化:受到外点的影响,一次BA通常会导致很大一部分点被滤除,然后经过post RT对地图点进行了扩充;作者提到,上述过程需要多做几遍,一般是做完第二遍之后模型的完整性就会得到非常不错的提升。
冗余视角删除
BA是SfM的瓶颈,本文针对“稠密数据采集”带来的问题设计了一种高场景覆盖度的图像聚类的BA参数化策略。
图像与地图点根据重建过程中是否受到最新帧点影响分为两类。对于比较大的重建问题,最新的重建帧仅会影响其邻近的图像以及地图点,很大一部分图像/点并不会发生改变。本文将不受影响的那部分定义很多组的集合
表示一组「高重合度」的相机,它被参数化为「一个相机」。那么问题来了,什么才叫做高重合度呢?作者提到,一个组内相机的共视区域必须高度重合。令场景中共有Nx个点,那么每一张图像都可以表示成一个二值向量 ,其中当某个地图点被观测到时为1,否则为0; Vab 就是图像a和图像b之间的重合度。
将最近邻的那些图像计算重合度,然后排序,这样可以构造一组高重合度的相机集合。以达到去除冗余视角。
总结
本文提出了一套集精度/鲁棒性以及完整性为一体的通用SfM框架,实验表明该方法能够获得非常好重建效果。该框架进行了模块化实现,且开源,到目前为止很多视觉三维重建的任务(如视觉定位[4])基于此项目完成(框架不变,提升模块性能),可谓“功德无量”。
参考博客:https://cloud.tencent.com/developer/article/1746362 https://blog.csdn.net/youtuodai1436/article/details/105735712 https://zhuanlan.zhihu.com/p/342928560
|