OpenCV可以实现3D扫描吗?

8
这是一个一般性问题,我只是在寻找一个起点,而不是完整的解决方案。
我计划进行一些三维扫描,也就是检查表面并生成一个三维模型。据我所知,有两种方法:一种是用激光扫描整个表面,另一种是用相机,在表面上投射网格(不确定是否仅使用这个网格的一张图片就足够了,或者是否需要更多)。
我的问题是:OpenCV是否支持使用相机的第二种方法?如果是,请问涉及哪些类/函数?
欢迎提供任何提示 :-)

1
据我所知,OpenCV不支持该方法,但它具有一些功能,可能有助于您实现它。矩阵运算、相机校准等。另外一个已经存在的方法是立体成像。OpenCV有一些立体视觉方法! - Micka
对于第二个想法,请寻找“结构光”(Kyle McDonald在这方面做了一些不错的工作!)。你需要三张图片来支持它。 - berak
第二个想法实际上是结构化光。但是存在可以使用单个图像的方法。例如,看一下这篇论文:使用单个模式进行密集三维重建的方法,适用于快速移动的对象。 - biquette
3个回答

6
第二种方法需要使用投影仪和相机。还有一类算法叫做结构光流,可以从多个图像中捕获三维(稀疏点云)。稀疏点云可以后期使用多视角立体视觉转换为密集表面,并使用泊松表面重建重建网格模型。虽然可以使用OpenCV实现上述内容,但我建议使用现有软件。
稀疏三维重建:
Bundler: http://www.cs.cornell.edu/~snavely/bundler/ VisualSFM: http://ccwu.me/vsfm/ 多视角立体视觉:
CMVS:http://www.di.ens.fr/cmvs/

融合:http://www.gris.informatik.tu-darmstadt.de/projects/multiscale-depthmap-fusion/

如果您有GPU机器的访问权限,我强烈推荐使用VisualSFM,因为它将稀疏重建与MVS集成在一起。


3

请了解Kanade和光流技术。

您可以使用goodFeaturesToTrack在第一帧中找到特征,然后在第二帧中找到相同的特征。根据它们的位移,您可以找到深度或3D信息。

希望这有所帮助!


0

我完成了一个立体视觉项目,虽然三维扫描不是目的,但使用棋盘生成的校准文件。只是为了好玩,我将点云放入第三方三维建模软件中,尽管图像非常糟糕,但你可以看出一些深度。相机分辨率非常低,如640 x 480。

所以我认为这是可能的,但需要尽可能使用高分辨率,并且必须校准每个相机,并使用考虑相机属性和两个相机之间距离的公式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接