作者fishmarch

引言

SfM 主要分为了增量式、层次式、全局式。目前,增量式是最为流行的。

SfM综述

Structure-from-Motion Revisited_算法汇总

1.关联搜索

由于图像是无序的,所以需要将有重叠关系的图像关联起来,该部分输出为经过几何验证的关联图像集,及地图点对应的图像投影点。主要包含了一下几步:

特征提取

特征点以及其描述子。例如sift、surf、orb等特征。

匹配

输出可能具有重叠关系的图像对集合,及其相对应的特征

几何验证

验证图像对的重叠关系。

根据不同的空间构型计算不同的几何关系:单应矩阵H(纯旋转或平面特征)、本质矩阵E和基础矩阵F(未标定)。

足够的内点时通过几何验证。因为外点的干扰,使用RANSAC算法。

输出为经过验证的图像对,及其对应的内点,也可包含图像间几何关系。该阶段输出也被称为scene graph,图像为顶点,关联关系为边。

2.增量式重建

输入为scene graph,输出为注册的图像位姿和地图点

初始化

选择合适的初始图像对至关重要。在有较多重叠图像的位置初始化使重建结果更鲁邦准确。而在较少重叠图像初初始化,将使运行速度较快。

图像注册

求解PnP将新的图像添加进来。由于外点的影响,使用RANSAC等方法。

三角化

新注册的图像通过三角化可提供更多地图点

Bundle Adjustment

图像注册和三角化是两个分离过程,都会产生误差,通过BA来减少该误差。

挑战

目前的SfM算法在建图完整性,鲁棒性等方面经常出现问题。

漏注册、错误注册、累计误差等。

原因:

1:关联搜索中由于近似匹配产生了不完整的scene graph,因此没有足够的连通性,且影响精度。

2:重构阶段的失败。由于场景结构的丢失或错误。图像注册与三角化又是一个相互捆绑的问题。

本文贡献

1.Scene Graph 改进

本文采用多模型几何验证策略。

首先,计算基础矩阵F,如果内点较多( Structure-from-Motion Revisited_算法汇总_02 ),通过验证。

对同一对图像,计算单应矩阵H下的内点数( Structure-from-Motion Revisited_3D_03 )。如果 Structure-from-Motion Revisited_初始化_04 ,认为相机发生了移动(以纯旋转假设估计效果不好),为一般场景。

对于标定过的计算本质矩阵E,及内点数( Structure-from-Motion Revisited_3D_05 )。如果 Structure-from-Motion Revisited_3D_06 ,认为标定正确。

如果标定正确,且相机发生了位移,分解本质矩阵E,三角化相应内点,并且计算夹角 Structure-from-Motion Revisited_初始化_07 ,该夹角可以区分纯旋转和平面特征。

由于网上的照片经常含有水印,时间戳,边框等,处理办法为:计算相似变换下图像四周上的内点,如果内点较多泽舍弃。

对于可靠的图像对,在场景图中标记了类型(一般、纯旋转、平面特征)以及最好模型对应的内点。

在初始化时选择标定好的,非纯旋转的图像对。对于纯旋转,建图过程中并不进行三角化。

2.下一最好图像对(next best)的选择

下一图像对选择至关重要,影响位姿的估计与三角化的精度。

一般的方法是选取看到最多地图点的图像。

实验证明PnP的精度依赖于地图点的数量以及其分布情况。

候选图像:同时可以看到至少 Structure-from-Motion Revisited_初始化_08 个地图点的所有未被注册的图像。在候选图像中记录地图点数目及其分布。数目较多且分布均匀的将优先选择。

将每张图像划分网格,每个格子用空和满来表示。当某一格子中当点变为可见时,该格子标记为满,且该图像点评分按权重增大。

Structure-from-Motion Revisited_3D_09

点越多越均匀,评分越高。在每层中,每个格子内的点只计算一次,权重即为当前层格子的尺寸,具体来说上述四个评分的计算:

Structure-from-Motion Revisited_3D_10

3.鲁邦且高效的三角化

为了应对外点,使用了RANSAC。

计算夹角,需要足够大:

Structure-from-Motion Revisited_初始化_11

两图像中对应的深度值为正:

Structure-from-Motion Revisited_3D_12

重投影误差足够小:

Structure-from-Motion Revisited_初始化_13

4.Bundle Adjustment

每帧之后做一个局部BA,增长一定规模后做全局BA。

参数化

使用Cauchy核函数应对外点,小规模中使用直接求解器,大规模求解使用PCG

滤除

BA后对于不满足模型的观测滤除掉(重投影误差较大)

对每个地图点要满足最小的三角化夹角

全局BA后还要检查退化的图像(相机参数不正确,仅看到外点等)

优化中并没有对相机参数做限制

再三角化

pre-BA RT

post-BA RT

迭代优化

BA、RT、filtering迭代执行,直到滤除对观测和RT点较少

5.分组优化

BA是SfM对一个主要瓶颈。

将图像分组,分成很多小的,较多重叠的组。每组内认为是同一个相机。

在优化过程中,优化较多的是那些新加入的,其它的则仅仅是减小漂移。因此将图像分组优化会更搞笑。

判断两图像的共视程度:

Structure-from-Motion Revisited_3D_14

其中向量 Structure-from-Motion Revisited_3D_15 每个位描述了该图像中是否看到了对应的地图点。

将图像按照看到的地图点数量排序 Structure-from-Motion Revisited_算法汇总_16 ,构建图像组时,从中选择第一个(地图点最多的),接下来找到 Structure-from-Motion Revisited_算法汇总_17 最大的。如果 Structure-from-Motion Revisited_算法汇总_18 则将该图像加入这一组。否则创建新组。

组内图像BA:

Structure-from-Motion Revisited_算法汇总_19


参考文献:

[1] Schönberger, J. L., & Frahm, J. M. (2016). Structure-from-Motion Revisited. In IEEE Conference on Computer Vision & Pattern Recognition.

上述内容,如有侵犯版权,请联系作者,会自行删文。