运动恢复结构(SfM):相互重叠的照片如何变成三维
运动恢复结构(SfM,Structure from Motion)是摄影测量的前半部分。给定一组从不同位置拍摄、相互重叠的照片,在没有任何相机位置记录的情况下,它能恢复每台相机的位置以及场景中的一组稀疏三维点。测绘流程中后面的一切——密集点云、表面、正射影像——都建立在这个结果之上,因此 SfM 这一步的质量决定了其余部分的上限。
STREAM Capture 正在开发中,尚未发布。发布后它将与姊妹程序 STREAM Terrain 在同一个下载中提供;目前的下载包含 STREAM Terrain。
运动恢复结构是什么意思
名字已经说明了一切。“结构”是场景的三维形状;“运动”是相机在照片之间的移动。把头向旁边移动:近处的物体相对背景的位移比远处的更大;这种位移称为视差,其中携带着深度信息。SfM 测量成千上万个点在照片之间如何位移,再反推出能解释这些位移的三维位置。
早期的摄影测量在开始之前需要已知标定的相机和实测的位置。SfM 去掉了这一要求:它只凭照片,同时解算相机位置、镜头和三维点。这就是为什么它可以使用普通的无人机相机和一个未经排序的影像文件夹,也是为什么它的原始结果具有任意的比例和方向,直到相机位置或地面控制把它与坐标系联系起来。
SfM 流程的步骤
软件在每张照片中找出有区分度的点,在相邻照片中认出同样的点,剔除不可能属于同一刚性场景的匹配,然后从一对连接良好的起始照片出发,向外构建相机网络。在多张照片中可见的每个点都会被三角测量,最后一次平差把所有内容同时精化。
| 阶段 | 发生了什么 | 通常哪里出问题 |
|---|---|---|
| 特征检测 | 在每张照片中找出有区分度的点并加以描述,以便在其他照片中认出它们 | 纹理太少:静止的水面、新雪、模糊的照片 |
| 匹配 | 在相互重叠的照片之间比较这些描述,找到同一个点的两次出现 | 屋瓦或作物行等重复纹理会产生错误匹配 |
| 几何验证 | 剔除不符合同一刚性场景的匹配 | 移动的物体,或陡峭地形上的强视差 |
| 初始重建 | 一对连接良好的照片给出最初的相机和点;其余照片依次加入 | 薄弱的照片网络:始终无法与其余部分连接的照片组 |
| 三角测量 | 在多张照片中可见的每个点,被放置在其视线交汇的三维位置 | 几乎在同一位置拍摄的照片,深度不精确 |
| 光束法平差 | 相机、镜头参数和点被一起调整,以与每个测量值相符 | 镜头模型不合适,或初始焦距错误 |
光束法平差:数字从何而来
光束法平差是最后一步,也是最重要的一步。它把相机、镜头参数和三维点一起移动,使重投影误差的平方和尽可能小。它报告的以像素计的重投影误差,衡量照片与解算出的模型吻合得有多好;我们关于重投影误差的文章解释了如何解读它。
由于平差只使用影像测量值,SfM 的结果在有东西提供之前没有真实世界的比例、位置或北向:可以是 RTK 或 PPK 无人机给出的相机位置、像控点,或者两者。成图在地面上究竟对得有多准,是另一个问题,由独立检查点来回答。
SfM、摄影测量与 SLAM
SfM 是摄影测量的一个阶段,而不是它的同义词。摄影测量在 SfM 结果的基础上继续进行密集深度估计、表面构建、正射纠正,以及对照独立点的精度检查。因此,SfM 软件就是摄影测量软件中的对齐部分。
SfM 也不是 SLAM。SLAM 在有序的影像或传感器数据流上实时运行,通常在移动的机器人上,并以一部分精度换取速度。SfM 对一组未经排序的照片离线处理,可以对全部内容做整体优化,这适合精度比速度更重要的测绘。
SfM 需要什么,在哪里会失败
SfM 需要重叠、清晰的照片和可见的纹理:地面上的每个点都应从不同位置出现在多张照片中,而且软件必须能分辨一处与另一处。开始时至少需要三张相互重叠的照片,真实的场地则需要多得多。它在静止的水面和新雪上、重复纹理上、照片之间移动的物体上,以及无人机移动时逐行成像的卷帘快门相机上会遇到困难。
在 STREAM Capture 中,这就是对齐阶段。它在 GPU 上提取并匹配 SIFT 特征,解算相机和镜头,并写出相机姿态、稀疏点云以及全分辨率下的重投影误差。从照片中读取的位置作为先验使用,薄弱的照片网络会在报告中被点名而不是被掩盖,镜头自检校则连同其不确定度一起报告。
常见问题
什么是运动恢复结构(SfM)?
一种仅凭相互重叠的照片,利用相机移动时点在照片之间的位移,恢复每台相机位置和一组稀疏三维点的方法。它是摄影测量的对齐阶段。
运动恢复结构是如何工作的?
它在每张照片中检测有区分度的点,在照片之间匹配,剔除错误匹配,从一对连接良好的照片出发构建相机网络,对点进行三角测量,并用光束法平差把相机、镜头和点一起精化。
SfM 与摄影测量有什么区别?
SfM 是第一阶段:给出相机位置和一组稀疏点。摄影测量涵盖整条流程,并增加密集深度、表面、正射影像以及对照独立点的精度检查。
SfM 与 SLAM 有什么区别?
SLAM 在有序的影像或传感器数据流上实时运行,通常在移动的机器人上。SfM 对一组未经排序的照片离线处理并做整体优化,这适合测绘。
SfM 需要像控点吗?
构建模型本身不需要:SfM 只凭照片即可工作,但结果的比例和位置是任意的。RTK 或 PPK 无人机的相机位置、像控点或两者,可把它落到地面上,而独立检查点则衡量落得有多准。
为什么我的 SfM 对齐失败或漏掉了相机?
通常是重叠太少、照片模糊、表面重复或缺乏特征(如静止的水面),或者照片之间有东西在移动。处理后请查看重叠图和薄弱网络警告,并在覆盖薄弱的地方补充照片。
查看对齐阶段的成果:相机姿态、稀疏点云和重投影误差
STREAM Capture 正在开发中,尚未发布。发布后它将与姊妹程序 STREAM Terrain 在同一个下载中提供;目前的下载包含 STREAM Terrain。