在计算机视觉中,MVS 做了哪些 SFM 做不到的事情?
In computer vision, what does MVS do that SFM can't?
我是一名开发人员,拥有大约十年的企业软件工程经验,我的业余爱好引导我进入了广阔而可怕的计算机视觉 (CV) 领域。
有一件事我不是很清楚 运动结构 (SFM) 工具和 多视图立体 (MVS)工具。
具体来说,CMVS appears to be the best-in-show MVS tool, and Bundler 似乎是目前最好的开源 SFM 工具之一。
摘自CMVS自己的主页:
You should ALWAYS use CMVS after Bundler and before PMVS2
我想知道:为什么?!?我对 SFM 工具的理解是它们为您执行 3D 重建,所以为什么我们首先需要 MVS 工具?他们添加了什么 value/processing/features Bundler 等 SFM 工具无法解决的问题?为什么建议管道:
Bundler -> CMVS -> PMVS2
?
简而言之,运动结构 (SfM) 和多视图立体 (MVS) 技术是互补的,因为它们不处理相同的假设。它们的输入也略有不同,MVS 需要相机参数 运行,这是由 SfM 估计(输出)的。 SfM 只给出了粗略的 3D 输出,而 PMVS2 给出了更密集的输出,最后 CMVS 是为了规避 PMVS2 的一些限制。
答案的其余部分提供了每种方法如何工作的高级概述,并解释了为什么会这样。
运动结构
您强调的 3D 重建管道的第一步是 SfM 算法,可以使用 Bundler, VisualSFM, OpenMVG 等来完成。该算法输入一些图像并输出每个图像的相机参数(稍后详细介绍)以及场景的 粗略 3D 形状,通常称为稀疏重建。
为什么 SfM 只输出粗略的 3D 形状?基本上,SfM 技术首先检测每个输入图像中的 2D 特征,然后在成对图像之间匹配这些特征。例如,我们的目标是告诉 "this table corner is located at those pixels locations in those images." 这些特征由我们所说的描述符(如 SIFT 或 ORB)描述。这些描述符用于表示图像中的一个小区域(即一堆相邻像素)。它们可以可靠地表示高度纹理化或粗糙的几何形状(例如,边缘),但这些场景特征需要在整个场景中是唯一的(在区分意义上)才有用。例如(可能过于简单),具有重复图案的墙对于重建不是很有用,因为即使它具有高度纹理,墙的每个区域都可能与墙上的其他任何地方几乎匹配。由于 SfM 正在使用这些特征执行 3D 重建,因此 3D 场景重建的顶点将位于那些独特的纹理或边缘上,给出粗网格作为输出。如果没有精确和可区分的纹理,SfM 通常不会在表面中间产生顶点。但是,当在图像之间找到许多匹配时,可以计算图像之间的 3D 变换矩阵,有效地给出两个相机姿势之间的相对 3D 位置。
多视图立体
然后,使用MVS算法对SfM技术得到的网格进行细化,得到所谓的密集重建。该算法需要每幅图像的相机参数才能工作,由SfM算法输出。由于它适用于更受约束的问题(因为它们已经拥有每个图像的相机参数,如位置、旋转、焦距等),MVS 将计算描述符未(或不能)正确检测到的区域上的 3D 顶点或匹配。这就是 PMVS2 所做的。
PMVS 如何在 2D 特征描述符难以匹配的区域工作?由于您知道相机参数,因此您知道图像中的给定像素是另一幅图像中的一条线的投影。这种方法称为 epipolar geometry。 SfM 必须为每个描述符寻找整个 2D 图像以找到潜在的匹配项,而 MVS 将在单个 1D 线上寻找匹配项,从而大大简化了问题。因此,MVS 通常会在其优化中考虑光照和物体材质,而 SfM 则不会。
但是有一个问题:PMVS2 执行了一项相当复杂的优化,该优化可能非常慢,或者在大型图像序列上占用天文数字的内存。这就是 CMVS 发挥作用的地方,将粗略的 3D SfM 输出聚类到区域中。然后将在每个集群上调用(可能并行)PMVS2,从而简化其执行。然后 CMVS 会将每个 PMVS2 输出合并到一个统一的详细模型中。
结论
此答案中提供的大部分信息以及更多信息都可以在 Yasutaka Furukawa 的本教程中找到,CMVS 和 PMVS2 的作者:
http://www.cse.wustl.edu/~furukawa/papers/fnt_mvs.pdf
本质上,这两种技术都来自两种不同的方法:SfM 旨在使用结构化(但未知)图像序列执行 3D 重建,而 MVS 是基于人类立体视觉的双视图立体视觉的概括.
我是一名开发人员,拥有大约十年的企业软件工程经验,我的业余爱好引导我进入了广阔而可怕的计算机视觉 (CV) 领域。
有一件事我不是很清楚 运动结构 (SFM) 工具和 多视图立体 (MVS)工具。
具体来说,CMVS appears to be the best-in-show MVS tool, and Bundler 似乎是目前最好的开源 SFM 工具之一。
摘自CMVS自己的主页:
You should ALWAYS use CMVS after Bundler and before PMVS2
我想知道:为什么?!?我对 SFM 工具的理解是它们为您执行 3D 重建,所以为什么我们首先需要 MVS 工具?他们添加了什么 value/processing/features Bundler 等 SFM 工具无法解决的问题?为什么建议管道:
Bundler -> CMVS -> PMVS2
?
简而言之,运动结构 (SfM) 和多视图立体 (MVS) 技术是互补的,因为它们不处理相同的假设。它们的输入也略有不同,MVS 需要相机参数 运行,这是由 SfM 估计(输出)的。 SfM 只给出了粗略的 3D 输出,而 PMVS2 给出了更密集的输出,最后 CMVS 是为了规避 PMVS2 的一些限制。
答案的其余部分提供了每种方法如何工作的高级概述,并解释了为什么会这样。
运动结构
您强调的 3D 重建管道的第一步是 SfM 算法,可以使用 Bundler, VisualSFM, OpenMVG 等来完成。该算法输入一些图像并输出每个图像的相机参数(稍后详细介绍)以及场景的 粗略 3D 形状,通常称为稀疏重建。
为什么 SfM 只输出粗略的 3D 形状?基本上,SfM 技术首先检测每个输入图像中的 2D 特征,然后在成对图像之间匹配这些特征。例如,我们的目标是告诉 "this table corner is located at those pixels locations in those images." 这些特征由我们所说的描述符(如 SIFT 或 ORB)描述。这些描述符用于表示图像中的一个小区域(即一堆相邻像素)。它们可以可靠地表示高度纹理化或粗糙的几何形状(例如,边缘),但这些场景特征需要在整个场景中是唯一的(在区分意义上)才有用。例如(可能过于简单),具有重复图案的墙对于重建不是很有用,因为即使它具有高度纹理,墙的每个区域都可能与墙上的其他任何地方几乎匹配。由于 SfM 正在使用这些特征执行 3D 重建,因此 3D 场景重建的顶点将位于那些独特的纹理或边缘上,给出粗网格作为输出。如果没有精确和可区分的纹理,SfM 通常不会在表面中间产生顶点。但是,当在图像之间找到许多匹配时,可以计算图像之间的 3D 变换矩阵,有效地给出两个相机姿势之间的相对 3D 位置。
多视图立体
然后,使用MVS算法对SfM技术得到的网格进行细化,得到所谓的密集重建。该算法需要每幅图像的相机参数才能工作,由SfM算法输出。由于它适用于更受约束的问题(因为它们已经拥有每个图像的相机参数,如位置、旋转、焦距等),MVS 将计算描述符未(或不能)正确检测到的区域上的 3D 顶点或匹配。这就是 PMVS2 所做的。
PMVS 如何在 2D 特征描述符难以匹配的区域工作?由于您知道相机参数,因此您知道图像中的给定像素是另一幅图像中的一条线的投影。这种方法称为 epipolar geometry。 SfM 必须为每个描述符寻找整个 2D 图像以找到潜在的匹配项,而 MVS 将在单个 1D 线上寻找匹配项,从而大大简化了问题。因此,MVS 通常会在其优化中考虑光照和物体材质,而 SfM 则不会。
但是有一个问题:PMVS2 执行了一项相当复杂的优化,该优化可能非常慢,或者在大型图像序列上占用天文数字的内存。这就是 CMVS 发挥作用的地方,将粗略的 3D SfM 输出聚类到区域中。然后将在每个集群上调用(可能并行)PMVS2,从而简化其执行。然后 CMVS 会将每个 PMVS2 输出合并到一个统一的详细模型中。
结论
此答案中提供的大部分信息以及更多信息都可以在 Yasutaka Furukawa 的本教程中找到,CMVS 和 PMVS2 的作者: http://www.cse.wustl.edu/~furukawa/papers/fnt_mvs.pdf
本质上,这两种技术都来自两种不同的方法:SfM 旨在使用结构化(但未知)图像序列执行 3D 重建,而 MVS 是基于人类立体视觉的双视图立体视觉的概括.