我是一名拥有大约十年企业软件工程经验的开发人员,而我的业余爱好使我进入了广阔而令人恐惧的计算机视觉(CV)领域。

我尚不清楚的一件事是“运动结构”(SFM)工具和“多视图立体声”(MVS)工具之间的分工。

具体来说,CMVS似乎是最好的MVS工具,而Bundler似乎是那里更好的开源SFM工具之一。

摘自CMVS自己的主页:


您应该在捆绑器之后和PMVS2之前始终使用CMVS


我想知道:为什么?!?我对SFM工具的了解是它们为您执行3D重建,那么为什么我们首先需要MVS工具?它们为BFM等SFM工具无法解决的哪些价值/加工/功能增加了什么?为什么建议建立以下管道:

Bundler -> CMVS -> PMVS2


最佳答案

很快,运动结构(SfM)和多视图立体声(MVS)技术是互补的,因为它们不能处理相同的假设。它们的输入也略有不同,MVS需要运行摄像头参数,该参数由SfM估算(输出)。 SfM仅提供粗略的3D输出,而PMVS2提供更密集的输出,最后通过CMVS来规避PMVS2的某些限制。

答案的其余部分提供了每种方法的工作原理的高级概述,并解释了为什么采用这种方法。

运动结构

您突出显示的3D重建管道的第一步是SfM算法,可以使用BundlerVisualSFMOpenMVG等完成。该算法输入一些图像并输出每个图像的相机参数(稍后会详细介绍)以及场景的3D粗糙形状,通常称为稀疏重建。

SfM为什么只输出粗糙的3D形状?基本上,SfM技术从检测每个输入图像中的2D特征并在图像对之间匹配这些特征开始。例如,目标是告诉“此工作台角位于这些图像中的那些像素位置”。这些功能由所谓的描述符(例如SIFT或ORB)描述。这些描述符被构建为表示图像中的一个小区域(即一堆相邻像素)。它们可以可靠地表示高度纹理化或粗糙的几何形状(例如,边缘),但是这些场景特征需要在整个场景中都是唯一的(从意义上来说是唯一的)才能有用。例如(可能过于简化),具有重复图案的墙对于重建而言不是很有用,因为即使它具有很高的纹理,墙的每个区域都可能与墙上的其他任何地方相匹配。由于SfM正在使用这些功能执行3D重建,因此3D场景重建的顶点将位于这些唯一的纹理或边缘上,从而提供粗糙的网格作为输出。如果没有精确和独特的纹理,SfM通常不会在表面中间产生顶点。但是,当在图像之间找到许多匹配项时,可以计算出图像之间的3D变换矩阵,从而有效地给出两个相机姿态之间的相对3D位置。

多视图立体声

之后,将MVS算法用于细化通过SfM技术获得的网格,从而导致所谓的密集重构。此算法要求每个图像的相机参数都起作用,这由SfM算法输出。由于它适用于更受约束的问题(因为它们已经具有每个图像的相机参数,例如位置,旋转,焦点等),因此MVS将在描述符未正确(或无法正确检测)的区域上计算3D顶点或匹配。这就是PMVS2所做的。

PMVS如何在二维特征描述符难以匹配的区域上工作?由于您知道相机参数,因此知道图像中的给定像素就是另一图像中线的投影。这种方法称为epipolar geometry。 SfM必须为每个描述符搜索整个2D图像以找到可能的匹配,而MVS将在单个1D线上工作以找到匹配,从而大大简化了问题。因此,MVS通常会在优化过程中考虑照明和物体材质,而SfM则不会。

但是,有一个问题:PMVS2执行相当复杂的优化,可能会非常缓慢,或者在大图像序列上占用天文数字的内存。这是CMVS发挥作用的地方,将粗略的3D SfM输出聚集到区域中。然后,将在每个群集上(可能并行)调用PMVS2,以简化其执行。然后,CMVS将把每个PMVS2输出合并到一个统一的详细模型中。

结论

CMVS和PMVS2的作者Yasutaka Furukawa可在本教程中找到此答案中提供的大多数信息以及更多信息:
http://www.cse.wustl.edu/~furukawa/papers/fnt_mvs.pdf

从本质上讲,这两种技术都来自两种不同的方法:SfM旨在使用结构化(但未知)的图像序列执行3D重建,而MVS是基于人类立体感的双视立体视觉的概括。

关于computer-vision - 在计算机视觉中,SFM无法做到的MVS是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39217717/

10-11 07:34