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