Structure-from-Motion Revisited

转载请注明出处:https://blog.csdn.net/q_z_r_s/article/details/97813700

机器感知
一个专注于SLAM、三维重建、机器视觉等相关技术文章分享的公众号
公众号:机器感知

Structure-from-Motion Revisited_第1张图片

Abstract

对无序图片集三维重建的主流方法是采用增量SfM,本文提出了一种新的SfM技术

1. Introduction

对无序图片集三维重建的主流方法是采用增量SfM,本代码开源:https://github.com/colmap/colmap.

2. Review of Structure-from-Motion

SfM说的是从不同视角拍摄的图片中重建三维结构的过程,增量SfM是一个使用迭代进行的
序列化的处理过程。SfM通常从特征提取和匹配开始,然后进行几何检查。场景图是进行重建
阶段的基础,需要在增量配准新的图片、三角化场景点、过滤外点、BA微调重建结构之前完成

2.1 Correspondence Search

SfM第一步是从输入的图像集中查询对应关系,识别有重合图像中的共视点。这一步的输出是
一些列的经过几何校验的图像对,还有每个点在图像上投影的关系图。

  1. Feature Extraction
    对于每个图像,SfM提取一系列的局部特征及描述子,这些特征应该是几何不变的,这样SfM才能够
    准确唯一的识别该特征。SIFT及其变种鲁棒性很好,不过,还有更高效的二进制特征,不过代价
    就是鲁棒性不够高。

  2. Matching
    有了特征之后,下一步就是匹配了。一种最笨的方法就是取出一幅图像中的一个特征,然后
    在所有其他图像中的特征进行匹配,该方法时间复杂度为O(N2*M2),这在大规模的图像集中是不可取的。
    一种高效的方法就是先通过一些方法找出每幅图像可能发生重叠的图像对集合,然后在此
    基础之上进行特征点匹配。

  3. Geometric Verification
    第三步就是对图像匹配对进行几何约束进行校验。SfM进行匹配验证的方法是通过估计两幅图像
    间的变换关系,即投影几何关系。单应矩阵H描述的是纯旋转或者特征点共面的场景。
    对极几何通过本质矩阵E(已校正)或者基础矩阵F(未校正)描述了一个运动相机。
    如果某个变换含有足够多的内点存在,则认为它们是符合几何约束的。
    匹配的对应关系中总是存在误匹配的,故使用RANSAC方法来解决这个问题。

2.2 Incremental Reconstruction

这一步的输入是场景图结构,其输出是一系列的相机位姿估值,及用点云表示的对应的重建出的场景结构。

  1. Initialization
    SfM初始化很谨慎,因为差的初始化可能导致重建不能完成,所以选择合适的初始化图像对至关重要。
    通常选择在 image graph 与其他帧重叠较多的作为初始化帧,因为这样就可以提供更多冗余,由此保证
    更加鲁棒和精准的重建。
  2. Image Registration
    新图像配准到已有的模型时,使用的是PnP方法,同样为了避免外点的干扰,使用RANSAC方法。
  3. Triangulation
    新配准的图像必须能够观测到现有的场景点,不然无法确定新帧的位姿等参数。每当有新的图片加入进来时,
    就可以产生新的三角化的场景点。三角化在SfM中非常关键,因为该步骤增加了新的场景点,从而增加了现有模型的冗余度
  4. Bundle Adjustment
    如果不进行微调,SfM通常会漂移到一个无法恢复的状态。BA通过最小化重投影误差优化相机参数。
    本文使用L-M方法进行非线性优化,并使用鲁棒核函数。针对特殊参数结构还可以使用舒尔分解等技巧。

3. Challenges

通常,系绳无法对大量我们认为应该没问题的图像进行正确的配准,或是产生的断裂的模型,这是
由于误匹配或者漂移造成的。第一个原因可能是在产生图像对应关系图时,场景图不完整造成的,
即由于匹配不够,无法提供足以检出完整模型所需的完整连接关系。第二个原因可能是在
重建过程中无法对图像进行配准造成的。在增量SfM每个步骤中同时最大化精度和完整性
是SfM面临的一个艰巨的问题。

4. Contributions

4.1 Scene Graph Augmentation

作者提出一个多模态几何校验策略来增强场景图中带有的几何关系。首先,估计基础矩阵F,
如果内点数量足够多,那么就认为这个图像 pair 是符合几何约束的。下一步就是分类变换类型,
即检查单应矩阵H对应的内点是否足够多,同时与基础矩阵或者本质矩阵的内点数求比值,
然后分解本质矩阵,并从内点中对应匹配点对中三角化特征点,并检查三角化角度的中值。
使用这个中值角度来区分是纯旋转还是平面场景。最重要的是解决图片中的水印问题、时间戳等问题,
因为这些东西会导致错误的图像对组合产生,方法是计算图像对中图像边缘处内点构成的的相似变换,
然后根据阈值判断是含有水印等,如果有则不插入到场景图中。

4.2 Next Best View Selection

精确地位姿估计对SfM来说至关重要,而互联网图片集通常没有关于场景和相机的参数信息,
因此只能通过外观、图片对应关系及增量重建的场景获得。通常的策略是选择那些拥有最多
可视的三角化的点的图片作为下一个新的输入帧。作者根据已有的方法进行改进,提出了一种
使用多分辨率分析、基于不确定性的方法。更多的可视点且均匀分布被认为得分更高,为了达到这个目的,
作者把图像离散化成固定大小的网格,每个网格只有两种状态:空和满。当一个点落入某个空的网格中时,
则该网格的状态就转变为满的状态。然而当某些点聚集的落入某个单一的网格中时,会导致得分不合理,
因此提出一种改进方法,即多分辨率金字塔,最终得分是各个不同分辨率下得分的总和。

4.3 Robust and Efficient Triangulation

对于稀疏的匹配图像集,利用传递对应性提升三角化完整度和精度,可以改善后续图像配准。利用传递性剪力图向对应关系得到的基线越大,三角化精度就越高。作者提出了一种高效的、基于采样的三角化方法,该方法可以在含有outlier的特征跟踪下更加鲁棒地估计所有点。大的对极约束误差可能来自两个方面:存在outlier、错误的相机位姿;因此为了更加鲁棒的进行三角化,在进行多视角进行微调之前,必须找到一组具有一致性的特征点。更重要的是,为了从错误的融合中恢复那些潜在的特征点,递归三角化方案就不可或缺。为了处理不同程度噪声污染的数据,这里使用RANSAC方法,三角化之前先检查一下匹配点的视差角、深度是否为正、重投影误差;使用RANSAC方法,由于内点概率未知,所以初始内点概率设置小一点,然后在RANSAC过程中动态调整动态更新方法是,每次有了一个更好的模型时,统计内点和外点,这样就有了内点概率了,然后重新计算迭代次数。

4.4 Bundle Adjustment

为了降低累积误差,在图像配准和三角化之后进行BA操作。不同一般情况下,没有必要在每步之后都执行全局BA的,因为增量SfM只影响模型的局部区域。因此我们只在连接性强的图像上在配准之后进行局部BA操作。与VisualSFM类似,只在整个模型增长了一定的百分比之后才执行全局BA操作,所以该方法可以近似看做是线性运行时间的SfM。在BA之后,会有一些观测不再符合已建立的模型,因此我们要滤除掉重投影误差大的观测值。类别VIsualSfM,我们也执行重新三角化(RT, re-triangulation)来应对全局BA之前的漂移影响,由于BA通常可以很好地改善相机和点参数,所以我们扩展了RT为pre-BA RT并多了一个post-BA RT,该步骤的目的是通过连续化点之前由于位姿不准确导致三角化失败的轨迹来提高重建的完整性。

4.5 Redundant View Mining

BA是SfM的一个主要性能瓶颈,本节我们提出了一个可以发掘潜在约束的方法,由此给出一个更加高效的BA参数化形式,从而使BA更加高效。我们的方法受启发于前人的工作,我们把问题分解成子地图问题,子地图内部的参数被分解掉。主要有三个贡献:第一:一种高效的相机分组方案,权衡了SfM内在属性,替换了高代价的graph-cut;第二:相反不是将多个相机聚类成一个子地图,我们把场景分成很多小的、重合度很高的相机群组;第三:因此更小的、高重合度的相机组产生了通过两帧间共视比例来判断是否应该分为一组,与其他帧共视数量最多的作为下一帧,当选出的帧与第一帧共视最够多,但得分并不高时才真的加入改组,否则就初始化一个新的组;图片组对外变现为一个相机位姿,其内部使用一个局部组坐标系,组内每个图片都有一个相对于该局部坐标系的固定位姿之所以可以节省计算量,是因为这么多相机观察到的点全都虚拟成一个相机看到的点了,即只优化这一个相机的位姿即可,而组中每个相机的位姿通过级联乘积获得,实际计算重投影误差时还是会投影到真正的相机上去取观测值该方法是一个不错的减少冗余帧位姿的方法,而且这些帧并没有帧的丢掉,而是打包表示了,优化虚拟相机位姿等同优化它们。

5. Experiments

分组肯定会带来一定的误差,因为分组后实际优化的是代表组中所有图像的位姿变化量,显然是不合理的,但是速度提升非常明显,而带来的重投影误差的增加却非常小,所以该方法可以说很好。

6. Conclusion

没有啥结论,就是提了个好算法…

你可能感兴趣的:(三维重建)