Contents — find the section you need

收集数百张陌生人在旅游景点拍摄的同一地标的照片,并重建该建筑物的 3D 模型以及所有拍摄位置——这就是运动结构重建 (SfM)。SfM 从一组事先未知拍摄顺序、相对相机位置甚至所用镜头的图像中,联合重建几何一致的 3D 点云和相机位姿。与实时追踪机器人或相机“当前”位置的 Visual-SLAM 和 VO/VIO 不同,SfM 主要在离线状态下运行,优先考虑构建整个场景的精度。本文将围绕这一区别,从底层开始深入剖析 SfM 的内部结构。

0. 30 秒概要

  • SfM(结构化图像重建)是指通过特征点匹配和几何验证,从多张图像中同时恢复场景的稀疏三维点云以及每台相机的内参和外参。

  • 重建策略大致分为两种:增量式 SfM,它按顺序逐个添加相机;以及全局式 SfM,它首先找到每对相机的相对位姿,然后一次性求解全局位姿。

  • 增量式 SfM 具有鲁棒性,但由于是顺序执行的,因此容易出现漂移(累积误差)。全局式 SfM 一次性求解所有位姿,因此不易出现漂移,但对于包含大量异常值的相对位姿则较为脆弱。

  • 通过三角测量获得的三维点云和相机位姿本身只是受图像噪声影响的粗略估计。 捆绑调整通过同时最小化重投影误差,最终决定了SfM的精度。

  • SfM和视觉SLAM共享相同的底层几何结构,但它们的设计理念不同:SfM是离线批量处理,优先考虑精度和完整性;而SLAM是在线实时处理,优先考虑即时性和连续性。

1. SfM的输入和输出是什么?

输入是一组图像\{I_1,\dots,I_N\},这些图像的拍摄顺序和相对位置未知。每张图像甚至可能由不同的相机、不同的镜头在不同的时间拍摄。输出包含三项内容:

  • 每张图像 i 的相机位姿 P_i=K_i[R_i\mid\mathbf{t}_i](包括相机内参和外参)

  • 场景中的一组 3D 点 \{\mathbf{X}_j\}(通常是对应于特征点的稀疏点云)

  • 哪些图像观测到哪些 3D 点的对应关系(轨迹)

如果说相机标定入门是从固定的标定模式中恢复单个相机的内参,那么 SfM 则是一个更大的逆问题:它仅通过对应点之间的几何约束,同时恢复多个未标定或部分标定相机的内参和外参,以及场景结构。如果 EXIF 元数据包含焦距,则将其用作初始值,但最终精度取决于图像本身的几何约束。

Diagram 1 · Use the button to switch views
示意图 SfM 结果,其中五幅已配准图像和一幅未配准图像生成估计的相机位姿、稀疏 3D 点云和观测轨迹
图 1. 典型的 SfM 输出。重建结果不仅包含 3D 点云,还包含图像配准状态、估计的相机位姿以及记录哪些图像观测到每个 3D 点的轨迹。这是一个结构示意图,并非基于测量数据的精度结果。

在结果查看器中,首先检查相机是否折叠到一个过小的区域内,点云是否分裂或重叠,以及是否有任何图像配准失败。仅凭类似建筑物的外观并不能证明精度。评估重投影误差、轨迹长度和已配准图像的数量;如果存在测量长度或 GNSS 数据,还应与该外部比例尺进行比较。单目 SfM 具有任意的全局精度。缩放比例,因此点云查看器显示的距离并非自动以米为单位。

2. 基本流程

Diagram 2 · Use the button to switch views
The basic SfM pipeline A diagram showing the flow from an unaligned set of images, through feature extraction, matching, and geometric verification, to recovering pose and structure via either Incremental SfM or Global SfM, and finally refining with Bundle Adjustment. Image set Feature extractionexhaustive/nearby matching Geometric verificationF/E/H + RANSAC Incremental SfMinitial pair → add via PnP→ triangulate Global SfMrotation averaging → translation averaging→ triangulate all points BundleAdjustment

前面的步骤——特征提取、匹配和几何验证——与特征检测入门和极线几何入门中介绍的基本技术完全相同。SfM特有的设计决策在找到每对图像之间的关系之后才发挥作用:如何将每张图像和每个点组装到一个一致且无矛盾的坐标系中——这正是增量式SfM和全局式SfM两种策略的分歧所在。

3. 增量式SfM:逐个添加相机

增量式SfM首先选择一对具有足够视差和对应关系的初始图像对,并通过极线几何估计本质矩阵/基础矩阵来构建第一个双视图重建。然后,重复以下步骤:

  1. 选择一张已与已注册的3D点集建立2D对应关系的新图像,并通过PnP确定该图像的位姿。

  2. 利用新图像与现有图像之间的对应关系,对尚未重建的3D点集进行三角剖分。

  3. 每隔一定数量的图像,使用局部或全局光束法平差来优化位姿和结构。

  4. 返回步骤1,直到所有图像都已处理完毕,或无法添加更多图像为止。

自 Snavely 等人的 Photo Tourism (2006) 以来,这种方法被广泛应用,也被 COLMAP 的标准流程采用为增量式 SfM。由于它每次只增加少量未知数,并且是按顺序进行的,因此是一种稳健的实现方式,并且易于检测和排除错误的图像对。另一方面,由于姿态是逐帧堆叠的,早期的小误差会传播到后续图像,并且包含大量循环(一组图像重复访问同一位置)的数据集往往会累积漂移。周期性的光束法平差,以及等效于回环检测的重访检测,是控制这种累积误差的关键。

4. 全局 SfM:一次性解决所有成对关系

全局 SfM 不按顺序配准图像——它首先找到每对(或选定的子集)图像的相对位姿 (R_{ij},\mathbf{t}_{ij}/\|\mathbf{t}_{ij}\|)。然后,它分两个阶段联合估计整个图。

旋转平均 从成对相对旋转集合 R_{ij} 中找到全局最小不一致的相机旋转集合 \{R_i\}。常用的误差度量使用李群上的对数映射 SO(3):

\min_{\{R_i\}}\sum_{(i,j)\in\mathcal E}\rho\left(\left\|\mathrm{Log}\left(R_{ij}^\mathsf{T}R_i^\mathsf{T}R_j\right)\right\|^2\right)

\rho 是一个鲁棒损失,它抑制了作为异常值的错误相对位姿的影响。

平移平均 在旋转固定后,从相对平移方向集合 \mathbf{t}_{ij} 中找到相机位置 \{\mathbf{t}_i\}。由于单目相对平移仅提供一个方向(参见极线几何入门中讨论的尺度歧义),因此需要从多个成对方向约束中求解出一致的配置——为此,人们提出了诸如包含异常值去除的 1DSfM 等方法。

由于全局 SfM 同时使用来自每幅图像的信息,因此原则上它不太容易受到增量 SfM 的序列漂移的影响,并且也更容易进行并行计算。但是,如果异常值混入到各个相对位姿中,除非在平均阶段检测并排除这些异常值,否则整个全局解就会失真。 Moulon 等人 (ICCV 2013) 的工作是一个典型的例子,它极大地提高了全局 SfM 的实用性,将鲁棒的旋转平均与使用三焦张量的平移方向估计相结合。

方面 增量式 SfM 全局 SfM
重建过程 从初始图像对中逐一添加图像 首先求解所有成对图像之间的关系,然后进行联合优化
抗漂移能力 容易出现顺序传播和累积误差 由于是全局最优的,因此累积误差很小
抗异常值能力 添加图像时易于单独检测和移除异常值 平均之前的异常值移除决定了精度
计算成本 随图像数量顺序变化,大规模时计算量较大 可并行化,但平均需要全局优化
实现难度 丰富的实现示例,易于调整以提高鲁棒性 旋转/平移平均的理论和实现较为复杂
代表性示例 Bundler、COLMAP(默认)、VisualSFM openMVG(全局 SfM 流水线)、Theia

在实践中,人们并没有将两者视为严格的二选一关系,而是研究混合设计——例如,先使用全局 SfM 构建一个粗略的全局姿态,然后逐步细化;或者仅使用置信度高的图像对进行全局处理,然后逐步添加其余图像对。

5. 三角测量和轨迹管理

一旦确定了一组图像的姿态,对对应点进行三角测量以获得 3D 点本身就是基本双视图几何操作的扩展。SfM 特有之处在于,当在三个或更多图像中观察到同一个物理点时,如何管理这种对应关系,即所谓的“轨迹”。

由于特征匹配是成对进行的,理想情况下,图像 A-B 和 B-C 之间的匹配也应意味着 A-C 之间的匹配,但实际上,考虑到实际的描述符距离,这并不总是成立。三焦点一致性检查可以保证轨迹的质量。

轨迹包含的观测值越多,三角测量就越稳定,但即使轨迹仅由视差较小的图像组成,其深度仍然不稳定。

即使轨迹中混入了一个错误的匹配点,不仅会扭曲该点的三维位置,还会影响下游光束法平差的整体残差。因此,对每个轨迹进行 RANSAC 式验证,并剔除重投影误差较大的轨迹,都是必要的。

6. 通往光束法平差的桥梁

从线性三角测量或序列 PnP 获得的位姿和结构充其量只能作为初始值。同时最小化所有图像的重投影误差——

\min_{\{K_i,R_i,\mathbf{t}_i,\mathbf{X}_j\}} \sum_{(i,j)\in\mathcal{O}}\rho\left(\left\|\pi\left(K_i(R_i\mathbf{X}_j+\mathbf{t}_i)\right)-\mathbf{u}_{ij}\right\|^2\right)

——即捆绑调整,它最终决定了SfM的最终精度。为什么这种优化具有稀疏结构,以及为什么舒尔补使其即使在大规模情况下也能求解,这些都是计算方面的问题,在捆绑调整入门中有深入探讨。这里需要注意的是它使用方式的不同:增量式SfM每隔几张图像就进行一次局部捆绑调整,而全局SfM在所有全局位姿就位后运行一次完整的捆绑调整。

7. 与 Visual-SLAM 的异同

SfM 和 Visual-SLAM 共享相同的数学工具——特征匹配、极线几何、PnP 和光束法平差。区别在于它们的目标和约束条件。

方面 运动结构 Visual-SLAM
处理方式 主要采用离线批处理 在线实时顺序处理
输入顺序 可以无序(任意顺序,混合多个摄像头的数据均可) 假设帧按时间顺序连续
主要目标 高质量 3D 重建,优先考虑精度和完整性 实时保持当前自身位置
优化范围 可以对所有图像进行全局光束法平差 局部/全局优化仅限于关键帧,且计算资源有限
处理重访 可离线验证每一对数据 必须在线检测并纠正回环错误
代表性实现 COLMAP、openMVG、Bundler ORB-SLAM 系列、VINS 系列

在实践中,诸如使用 SfM 构建的高精度 3D 地图作为 SLAM 的初始地图或比例参考,或者使用 SfM 对 SLAM 的关键帧轨迹进行离线后处理以提高精度等组合也很常见。这两种技术并非相互竞争,而是在离线/在线时间轴上相互补充。

8. 代表性实现

  • COLMAP:以增量式 SfM 为核心,是目前研究和生产中引用最广泛的实现,它提供了从特征提取、匹配、几何验证和重建到光束法平差和多视图立体的一致流程。 - openMVG(Open Multiple View Geometry,开放多视图几何体):一个同时实现了增量式和全局式SfM流程的库。通常与openMVS配合使用,用于密集重建。

  • Bundler:开创性的增量式SfM实现,公开了Photo Tourism项目的结果,并成为许多后续工作的比较基准。

  • Meshroom(AliceVision):一个开源的摄影测量工具,带有图形用户界面,可以一次性处理从SfM到MVS再到纹理生成的所有步骤。

选择库时,“更新就意味着更精确”并非正确的标准——应根据处理的图像数量、GPU/CPU资源、EXIF焦距的可靠性、匹配策略(穷举/顺序/词汇树)以及是否需要从MVS到纹理生成的单一一致流程来判断。

9. 困难条件和常见失效案例

  • 纹理稀疏或高度重复的场景:例如,均匀的墙壁、瓷砖表面以及田野中的成排作物,要么完全无法建立对应关系,要么经常出现不匹配的情况。

  • 视差极小的图像集:使用长焦镜头拍摄的远景照片会导致三角测量不稳定,从而产生较大的深度误差。

  • 运动物体和光照变化:旅游景点照片集混合了人物、车辆以及季节或时间差异,引入的对应关系违反了静态场景假设。

  • 孤立的图像簇:如果拍摄的照片被分成两组,且视野没有重叠,SfM 无法将它们统一到一个一致的坐标系中,重建结果会分割成多个不相连的部分。

  • 对称场景:例如,对称的建筑立面可能会收敛到一个几何上一致但物理上错误的镜像解。

10. 实用选择

  • 如果拍摄顺序完全有序(例如视频或机器人的连续帧),增量式 SfM 的初始图像对选择就变得容易,COLMAP 的默认流程通常就足够了。

  • 对于大规模图像集合,例如网络旅游照片,由于拍摄顺序和重叠情况均未知,全局 SfM 的可扩展性往往更具优势。

  • 对于需要实时性能的应用(例如机器人、AR、汽车),请考虑使用 Visual-SLAM 或 VIO 而不是 SfM。SfM 的主要应用领域是离线高精度重建。

  • 如果您需要密集的 3D 形状(网格或纹理模型),请从 SfM 的稀疏点云和姿态开始,然后进行多视图立体视觉。

11. 总结

运动结构重建 (SfM) 是一种利用特征匹配和几何验证,从无序图像集中联合恢复相机位姿和三维结构的技术,它采用增量式 SfM 或全局式 SfM 策略。增量式策略鲁棒性强但容易出现漂移,而全局式策略抗漂移能力强但对异常值敏感——两者之间存在一种对称的权衡。无论采用哪种策略,最终精度都由光束法平差 (BDM) 保证,而光束法平差又直接连接到视觉 SLAM(Visual-SLAM,一种在不同时间轴上运行的同类技术)以及多视图立体视觉(Multi-View Stereo,一种密集重建技术)。

检查你的理解
重建的 SfM 距离是否自动以米为单位?

单目重建会保留尺度模糊性。

使用已知尺寸或定位信息建立公制比例尺。

参考文献

What to read next

Review the backgroundPnP入门——仅从3D点和图像恢复相机姿态Continue the series捆绑调整入门——非线性最小二乘法联合修正相机姿态和三维点Explore another aspect of this field图像亮度 Lab — 曝光、伽马与裁剪