以前的一篇Multi-View Stereo介绍
这是来自一篇以前查看MVS介绍的笔记,感谢来自华盛顿大学作者大佬Furukawa的great tutorial work!
摘要
本教程提供了多视角立体视觉领域的实践视角,重点介绍实用算法。多视角立体视觉算法能够仅从图像中构建高度详细的三维模型。这些算法通过处理可能非常庞大的图像集,构建出一个在合理假设下能够解释这些图像的三维几何结构,其中最重要的假设是场景的刚性。
教程将多视角立体视觉问题定义为图像与几何一致性优化问题,并详细描述其两个核心要素:光度一致性度量的鲁棒实现和高效优化算法。接着,教程介绍了一些最成功的算法如何利用这些核心要素,应用于实际场景,并作为产品在工业中部署。最后,教程探讨了利用领域特定知识(如结构先验)的更高级方法,并概述了当前面临的挑战和未来的研究方向。
目录
按照作者的目录依次展开,做重点记录


1.introduction
从照片中重建三维几何是计算机视觉领域的一个经典问题,研究人员已经为此探索了超过30年。其应用范围广泛,涵盖了从三维地图绘制和导航,到在线购物、三维打印、计算摄影、电脑视频游戏,乃至文化遗产的存档等多个领域。然而,直到最近,这些技术才足够成熟,得以从实验室的受控环境中走出,进入更广泛的实际应用,提供了工业级的鲁棒性、精确度和可扩展性。
对真实物体或场景的三维几何建模是一项具有挑战性的任务,它采用了多种工具和方法,包括计算机辅助设计(CAD)工具[3]、臂装探测器、主动方法[110, 131, 11, 10]以及基于图像的被动方法[162, 165, 176]。在所有这些方法中,基于图像的被动方法,即本教程的主题,提供了一种快速捕捉精确三维内容的方式,且成本远低于其他方法。随着图像分辨率和质量的稳步提升,数码相机已经变成了廉价且可靠的高分辨率传感器,能够生成质量卓越的三维内容。
先给出一个定义,基于图像的三维重建算法的目标可以描述为:“已知材料、视角和光照条件,给定一组物体或场景的照片,估计最可能解释这些照片的三维形状”(参见图1.1)。注意,我们是假设材料、视角和光照条件必须是已知的,因为几何、材料、视角和光照的多种组合可能会产生完全相同或者相似的照片(例如,一个凹面和一个凸面在特定光照条件下可能看起来非常相似,一个粗糙的表面和一个光滑的表面在某些光照下可能难以区分),因此,我们很难纯靠图片来恢复3D场景。

从照片中提取几何信息可以利用多种线索:纹理、散焦、阴影、轮廓和立体对应。其中,阴影、轮廓和立体对应这三种线索非常成功,而立体对应在鲁棒性和应用数量方面最为成功。多视角立体(MVS)是一组技术的总称,这些技术以立体对应为主要线索,并使用超过两张图像。
以下章节中描述的所有MVS算法都假设相同的输入:一组图像及其对应的相机参数。MVS算法的质量取决于输入图像和相机参数的质量。此外,MVS近年来的成功很大程度上归功于SfM算法的成功,它主要用于计算相机参数。

图1.2展示了一个通用的MVS流程示意图:
收集图像:从不同视角拍摄场景或物体的多张照片。
计算每张图像的相机参数:通过运动结构恢复(SfM)等算法,估计每张图像的相机位置、姿态和内部参数(如焦距、畸变等)。
从图像集和对应的相机参数中重建场景的三维几何:利用MVS基于图像和相机参数生成场景的稠密三维几何模型。
重建场景的材料属性(可选):在几何重建的基础上,进一步估计场景中物体的材质和纹理信息,以增强模型的真实感。
本教程的介绍为:
第1章深入探讨MVS的前三个主要阶段:图像采集、相机参数估计和三维几何重建。
第2章详细介绍光度一致性的概念,这是MVS算法优化的核心。
第3章介绍并比较一些最成功的MVS算法。
第4章讨论如何利用领域知识(特别是结构先验)来提高重建质量。
第5章概述成功的应用案例、可用软件以及最佳实践。
第6章描述MVS当前的一些局限性,并提出解决这些问题的研究方向。
1.1 Imagery collection
我们可以大致将多视角立体视觉(MVS)的捕捉设置分为三类(参见图1.3):
室内环境
在受控的实验室环境中进行图像采集,通常使用固定的相机和光照条件,适合高精度的三维重建。
户外小规模场景
在户外对小规模场景(如建筑物、雕塑或自然物体)进行拍摄,通常使用手持相机或移动设备。
大规模场景
通过车队(如汽车、飞机、无人机)或众包方式(如互联网上的照片)对大规模场景(如城市、地形)进行捕捉。这种方法适合大范围的三维重建任务。
多视角立体视觉(MVS)算法最初是在实验室环境中发展起来的,在这种环境中,光照条件可以轻松控制,相机也可以轻松校准,例如通过机械臂[165]、转台[93]、基准标记[2, 43, 192]或早期的运动结构恢复(SfM)算法[62]。MVS算法经历了两次重大发展,才达到了当前的水平,也就是从实验室环境走向小规模户外场景,从小规模场景扩展到大规模场景。
研究人员已经在视觉重建算法领域工作了数十年。直到相对较近的时间,这些技术才足够成熟,能够应用于大规模的工业场景。如今,工业级算法已经能够从数百万张图像中估计相机参数。近年来,两种略有不同的技术取得了重大进展:运动结构恢复(SfM)[88]和视觉同步定位与地图构建(VSLAM)[53]。这两种技术都依赖于对应点线索以及场景刚性假设。
-
SfM 通常用于计算无序图像集的相机模型,通常是离线处理。
-
VSLAM 则专注于从视频流中实时计算相机的位置。
在本教程中,我们主要关注SfM算法,因为大多数MVS算法都是为处理无序图像集设计的,并依赖SfM来计算相机参数。不过需要注意的是,VSLAM近年来在MVS领域也取得了快速进展[145, 180]。
“相机参数” 是指描述相机配置的一组值,包括:
-
相机位姿信息:位置和方向。
-
相机内参:如焦距和像素传感器尺寸。
接下来,我们将讨论MVS应用中一些最常见的相机投影模型。
1.2 Camera projection models
MVS算法需要额外的知识来使重建问题变得适定(well-posed)。特别是要求每张输入图像都有一个对应的相机模型,该模型能够完整描述如何将世界中的一个三维点投影到特定图像的二维像素位置。
最常用的相机模型是PINHOLE,这是平时用的数码相机拍摄静态照片的模型。它可以通过一个3×4的投影相机矩阵[88]来完全描述。
任意的3×4投影矩阵P都可以分解为一个3×3的上三角矩阵K和一个3×4的位姿矩阵[R|T]乘积,即:

其中:K 是内参矩阵,因为它由相机自带的参数组成:垂直和水平焦距 (fx,fy)、主点 (cx,cy) 和偏斜 s。[R|T] 是相机的外参矩阵,表示相机的旋转(R)和平移(T),即相机在世界坐标系中的位置和方向
由于数字传感器的质量,很少需要估计投影矩阵的11个参数。特别是,通常假设像素没有倾斜s = 0 ,并且是正方形的f_x = f_y 。此外,如果图像未被裁剪,可以安全地假设主点位于图像的中心。因此,常见的针孔相机模型仅由7个参数组成:f 、R、T 。

如果相机附带的镜头质量较低或是广角镜头(见图1.4左),纯针孔模型就不足以描述其成像特性,通常需要扩展为包含径向畸变模型。径向畸变对于高分辨率照片尤为重要,因为在图像边缘附近,即使是很小的偏离纯针孔模型的情况,也可能导致多个像素的偏差。
径向畸变通常可以在图像进入MVS流程之前被去除。如果图像的径向畸变参数已被估计,可以通过重采样对图像进行校正,使其看起来像是用没有畸变的理想镜头拍摄的。然而需要注意的是,校正广角图像会引入重采样伪影以及视野裁剪问题。为了避免这些问题,MVS流程可以直接支持径向畸变和更复杂的相机模型,但这会增加额外的复杂性。
1.3 Structure from Motion
SfM以一组图像作为输入,并生成两个结果:每张图像的相机参数,以及一组在图像中可见的3D点,这些3D点通常以轨迹(tracks)的形式编码。这个轨迹是指重建的3D点的坐标与对应的2D像素坐标列表。目前大多数最先进的SfM算法都遵循相同的基本处理流程(图1.5):

step1:在每张输入图像中检测2D特征点。
step2:在图像之间匹配2D特征点。
step3:根据匹配结果构建2D轨迹。
把匹配的2D点关联起来,形成轨迹。一个轨迹表示同一个3D点在多张图像中的2D投影。例如,如果3D点 P在图像1中的投影是 (x1,y1),在图像2中的投影是 (x2,y2),那么轨迹可以表示为 {(x1,y1),(x2,y2)}。
step4:从2D轨迹中求解SfM模型。
选择一对图像,计算它们之间的基础矩阵(Fundamental Matrix)或本质矩阵(Essential Matrix),并通过三角化(Triangulation)恢复初始的3D点。
然后逐步添加新的图像,利用已有的3D点和2D轨迹计算新图像的相机参数。通过三角化恢复新的3D点。
最后,使用全局方法(如全局SfM)优化相机参数和3D点,以减少累积误差。
step5:使用捆绑调整(Bundle Adjustment)优化SfM模型
这里简单写一下SfM的过程,后面一节会专门介绍

SfM 的最初工作主要集中在刚性场景假设下的两个和三个视图的几何形状[88]。 然后, SfM 的关键发展之一是使用 RANSAC [61] 来稳健地估计给定噪声匹配的两个或三个视图之间的对极几何。
快速且高质量的特征检测器 [87, 135, 57] 和描述符 [135, 36, 159, 130, 26] 的发展是实现SfM在非结构化数据集上工作的关键进展。高质量的描述符使得从姿态和光照条件差异很大的图像中构建更长、质量更高的轨迹成为可能。处理大规模非结构化照片集的SfM的最后一个关键步骤是改进匹配阶段。对于非结构化照片集(非序列也就是顺序打乱的数据集),我们没有任何关于应该匹配的邻近候选图像的先验知识。因此,每张图像都必须与其他所有图像进行匹配,这在计算上非常昂贵。高效的索引技术 [146] 结合高质量的描述符,使得数百万张图像的成对匹配变得高效。进一步的工作包括简化轨迹的连接图 [172] 和并行化 [25, 64],这些推动了当前工业界使用的先进SfM流水线的发展,例如微软的Photosynth [16] 和谷歌的Photo Tours [15](图1.6)。

1.4 Bundle Adjustment
严格意义上讲,BA并不属于SfM,这里主要介绍一下Bundle Adjustment,对于给定的相机参数集合
,以及track集合
(
是3D坐标,
表示
对应的第i个相机),ba的优化目标是:

其中
表示
对应的相机集合,
表示3D坐标
投影到2D的像素坐标,对于
的误差,通常采用RMSE:

其中N是公式1.2中误差项数量。
因为有这个ba的过程,所以,很多额外的信息或者方法可以与SfM pipeline相结合。比如,一种将GPS和IMU约束与SfM约束融合的方法是,简单地向公式(1.2)中添加额外的惩罚项,这些惩罚项会对相机参数P_i 与GPS和IMU信号预测的相机模型之间的偏差进行惩罚。
为了提高效率,MVS算法使用由相机模型定义的对极几何(epipolar geometry)将2D匹配问题限制为1D匹配问题(下面的第1.5节)。如果重投影误差较大,一个像素可能永远不会与其真实匹配点进行比较,从而显著降低MVS的性能,所以 MVS对估计的相机模型的精度非常敏感。
所以ba是MVS的必要步骤,目标是将重投影误差控制在亚像素级别。需要注意的是,由于重投影误差是以像素为单位测量的,可以通过对输入图像进行下采样并重新缩放相机参数,直到重投影误差降至某个阈值以下。只要下采样后的图像仍然包含足够的纹理和细节以供MVS工作,这种方法就是可行的 [72]。
这里简单提一下,MVS对相机重投影误差的鲁棒性主要取决于匹配标准(即第2章中介绍的光照一致性度量)对错位的容忍程度。通常,光照一致性度量的定义域
(公式2.1)越大,度量就越鲁棒。然而,较大的定义域也往往会导致过度平滑的几何形状,因此在精度和鲁棒性之间需要权衡。
1.5 Multi-View Stereo
多视图立体(Multi-View Stereo, MVS)的起源可以追溯到人类的立体视觉(stereopsis)以及将立体匹配问题作为计算问题解决的早期尝试 [139]。直到今天,双目图立体算法仍然是一个非常活跃且成果丰富的研究领域 [162]。多视图立体版本的出现是对双视图情况的自然改进。尽管MVS与这些经典立体算法共享相同的原理,但MVS算法旨在处理视角变化更大的图像集,例如围绕一个物体拍摄的图像集,并且能够处理非常大量的图像,甚至达到数百万张。MVS问题的本质差异最终导致了与经典立体算法显著不同的算法设计。例如,工业应用中的3D地图重建 [108, 144, 30] 一次性处理数百公里范围内的数百万张照片,有效地重建了大都市区域、国家,甚至最终整个世界的三维模型。
跨图像匹配像素是一个具有挑战性的问题,这并不是立体视觉或多视图立体独有的问题。事实上,光流(optical flow)是计算机视觉中另一个非常活跃的领域,致力于解决图像之间的密集对应问题 [33]。与MVS的主要区别在于,光流通常是针对两幅图像的问题(类似于双视图立体),相机未被校准,且其主要应用是图像插值。
在MVS中,相机参数是已知的,求解场景的三维几何结构等同于解决输入图像之间的对应问题。可以考虑一个属于三维场景几何结构的3D点(图1.7左)。将该3D点投影到一组可见相机中,会在每幅图像上的投影坐标之间建立唯一的对应关系。

给定一幅图像中的一个像素,找到它在其他图像中的对应像素需要两个关键要素:第一,在其他图像中生成可能的候选像素的有效方法。第二是需要一个方法来判断,这个候选像素是不是正确的匹配。下面就是相关的解决方法:一个是对极几何,另一个是光照一致性。
如果相机几何结构未知(通常是光流中的情况),也就是一幅图像中的每个像素都有可能与另一幅图像中的任何像素匹配。换句话说,对于每个像素,必须在另一幅图像中进行二维搜索。但是如果当相机参数已知(且场景是刚体)时,图像匹配问题就从二维搜索简化成了一维搜索(图1.7右)。一幅图像中的一个像素生成了一条穿过该像素和图像相机中心的三维光线。另一幅图像中的对应像素只能位于该光线在第二幅图像中的投影上。当多台相机从不同视角观察同一3D场景时,产生的不同几何约束被称为对极几何(epipolar geometry)[88]。
对于判断候选匹配的可能性,也就是估计两个像素(或像素组)对应的可能性。一般采用构建光照一致性度量(photo-consistency measures)来解决,MVS中的光照一致性度量在第2章。
2.Multi-view Photo-consistency
本章介绍了多视图光度一致性(简称光度一致性)的概念,这是多视图立体算法中使用的主要信号。多视图光度一致性衡量一组输入照片与其图像形成过程中所有参与因素(如光照、材料和场景的三维几何结构)之间的匹配或一致性。在正确的假设下,多视图立体算法能够“反转”图像形成过程,仅通过图像生成高度详细的三维几何结构、材料和光照。因此,多视图立体被视为一个受约束的优化问题,其中多视图光度一致性即使得函数 f(几何,视角,材料,光照)最大化的值。实际上,在具体的解决问题过程中,通常是假设某几个变量不影响光度一致性,这样简化问题以达到公式化求解。
第2.1节介绍了多视图光度一致性的基本概念,以及目前最先进的多视图立体系统中使用的双目光度一致性。许多光度一致性的概念基于此,“多视图”这一术语在多视图立体(MVS)中扮演着关键角色,并使其与传统的两视图立体算法区分开来。
光度一致性度量的一个关键要求是在一组看到相同3D几何结构的图像上计算光度一致性。然而,这种可视性信息只有在3D几何结构可用时才能知道,从而形成了一个“鸡与蛋”的依赖关系。第2.2节探讨了不同的策略,旨在打破这种依赖关系。
2.1 Photo-consistency measures
给定N个输入图片以及他们的共视3D点p,我们将每一对图片
与
的光度一致性定义为:
![]()
其中,
表示点 p 在图像 i 上的投影像素位置,
表示像素点x的一个邻域(比如x的3*3小窗口),
表示
上的图像强度值。这些强度值可以是一组像素的灰度值、RGB颜色值或其他特征值。
是两个向量的相似度。
某些光度一致性度量不需要定义支持域Ω,而其他一些则需要(见表2.1)。支持域 Ω 的主要目的是定义一个区域的大小,在该区域内场景的外观具有唯一性,并且在某种程度上对光照和视点变化不敏感。需要注意的是,唯一性和不变性往往是光度一致性度量的两个相互竞争的属性。支持域 Ω越大,域内的局部外观就越独特,这使得与其他图像的匹配更容易。然而,支持域越大,维持光照和视点不变性的难度就越高,因为较大的区域可能包含反射、深度边界或平滑几何假设(例如,平面假设)的影响。

在MVS算法中,定义每个图像的支持域 Ω 的最简单方法是每个图像使用大小相同的像素方形网格,这种方法在输入图像大致共享相同像素分辨率的表面重建时效果很好。支持域 Ω 的大小通常比较小,例如 3×33×3 或 5×55×5 的像素网格。
在更复杂的场景中,图像分辨率不同且图像位置相对于场景分布不均匀时,调整支持域的大小变得至关重要。支持域的大小需要与图像分辨率和视点分离成正比,与场景距离成反比。并且一些方法甚至改变了支持域的形状,比如论文[210,74,195,117]中介绍的方法。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)