我是一名拥有大约十年企业软件工程的开发人员,我的业余爱好者引导我进入了计算机视觉(CV)这个庞大而可怕的领域。
我不能立即明确的一件事是运动结构(SFM)工具和多视图立体声(MVS)工具之间的分工。
具体来说,CMVS似乎是最佳的MVS工具,Bundler似乎是最好的开源SFM工具之一。
取自CMVS自己的主页:
您应该始终在Bundler之后和PMVS2之前使用CMVS
我想知道:为什么?!?我对SFM工具的理解是他们为您执行3D重建,那么为什么我们需要MVS工具呢?第一名?他们添加了什么价值/处理/功能,像Bundler这样的SFM工具无法解决?为什么建议的管道:
Bundler -> CMVS -> PMVS2
答案 0 :(得分:11)
快速地说,Motion from Motion(SfM)和MultiView Stereo(MVS)技术是互补的,因为它们没有处理相同的假设。它们的输入也略有不同,MVS要求运行相机参数,这由SfM估算(输出)。 SfM仅提供粗略的3D输出,而PMVS2提供更密集的输出,最后CMVS可以规避PMVS2的某些限制。
答案的其余部分提供了每种方法如何工作的高级概述,并解释了为什么会这样。
来自Motion的结构
您突出显示的3D重建管道的第一步是可以使用Bundler,VisualSFM,OpenMVG等完成的SfM算法。该算法输入一些图像并输出每个图像的相机参数(稍后更多)以及场景的粗 3D形状,通常称为稀疏重建。
为什么SfM仅输出粗糙的3D形状?基本上,SfM技术首先检测每个输入图像中的2D特征并在图像对之间匹配这些特征。例如,目标是告诉"这个桌角位于那些图像中的那些像素位置。"这些功能由我们称之为描述符(如SIFT或ORB)描述。构建那些描述符以表示图像中的小区域(即,一堆相邻像素)。它们可以表示可靠的高纹理或粗糙几何形状(例如,边缘),但是这些场景特征在整个场景中需要是唯一的(在某种意义上区分)才有用。例如(可能过于简化),具有重复模式的墙对于重建来说不是非常有用,因为即使它具有高度纹理,墙的每个区域都可能与墙上的其他任何地方相匹配。由于SfM使用这些特征执行3D重建,因此3D场景重建的顶点将位于那些独特的纹理或边缘上,从而给出粗网格作为输出。 SfM通常不会在表面中间产生顶点而没有精确和区分纹理。但是,当在图像之间找到许多匹配时,可以计算图像之间的3D变换矩阵,有效地给出两个相机姿势之间的相对3D位置。
MultiView立体声
之后,MVS算法用于细化通过SfM技术获得的网格,从而产生所谓的密集重建。该算法要求每个图像的相机参数工作,这由SfM算法输出。因为它适用于更受约束的问题(因为它们已经具有每个图像的相机参数,如位置,旋转,焦点等),MVS将在描述符未正确检测(或无法正确)的区域上计算3D顶点或匹配。这就是PMVS2的作用。
PMVS如何在2D特征描述符难以匹配的区域上工作?由于您知道相机参数,因此您知道图像中的给定像素是另一图像中线条的投影。这种方法称为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是基于人类立体视觉的双视图立体视觉的概括。 / p>