我该如何使用两个立体相机构建一个房间的3D模型?精确构建的决定因素是什么?

14

目前,我已经从两个立体相机中提取深度点来构建3D模型。我所使用的方法是openCV graphCut方法和http://sourceforge.net/projects/reconststereo/软件。然而,生成的3D模型不太精确,这让我产生了疑问: 1) 基于像素的方法有什么问题? 2) 我应该将我的基于像素的方法改为基于特征或基于对象识别的方法吗?是否有最佳方法? 3) 还有其他方法可以进行这样的重建吗?

此外,提取出的深度仅来自两张图像。如果我旋转相机360度以获得视频,该怎么办?期待如何结合此深度信息的建议。

非常感谢 :)


有关如何从两个摄像机的镜头拍摄制作3D图像和视频的一般信息,请参见此处:http://forum.videohelp.com/threads/321678-Output-to-a-3D-TV-via-dual-head-DVI-hardware-existing-laptop-scrn?s=60b9858d8ecfd11a989b30ecd9fccbca&p=1993356&viewfull=1#post1993356 - therobyouknow
1
我在考虑在电脑上获取3D模型。 - yasumi
4个回答

6
定义立体重建精度的关键问题是视差估计。该领域已经得到了广泛的研究,但最先进的结果可以在以下页面找到: http://vision.middlebury.edu/stereo/eval/ 我建议您选择其中一种顶级方法。可能需要自行实现它(文献引用在页面底部),或者尝试在作者主页上寻找实现。同时,请查看 http://vision.middlebury.edu/MRF/code/
您还应该尝试找出低准确性的原因。它可能是算法无法捕捉场景结构,或者输出分辨率低的缘故。在后一种情况下,您需要转向亚像素精度。许多方法都解决了这个问题。使用“误差阈值”组合框按所需精度对算法进行排名。
同时,多台摄像机也可能有所帮助。关键词是“多视角立体”。

看完它们后,您有没有想法为什么深度估计会失败,如果它是一个无特征的表面(例如筑波的灯)? - yasumi
你指的是哪种方法?基于窗口的简单方法无法估算纹理缺失区域的视差,因为它不能匹配不同图像中的两个窗口。它们没有特征,任何位移都是可能的。现代方法不存在这个问题,因为它们使用上下文信息,例如通过MRFs。它们知道灯的边界上的视差并将其传播到中心。 - Roman Shapovalov
似乎自2015年以来网站没有更新,或者在那之后对这个问题没有任何进展。 - user3064538

1

在Sourceforge上有一个与此相关的项目:3D重建


我使用了这个方法,但仔细检查后发现由于噪声问题,图片上出现了尖峰...因此正在寻找更好的处理方法。 - yasumi
这在从2D图像创建3D图像时非常普遍。我认为您正在推动当前可实现的极限。 - Harriv
我认为目前,可能是要专注于无特征的表面。 - yasumi

0
如果我将相机旋转360度来获取视频怎么办?
我想你的意思是180度。如果你将双目相机(即立体摄像机)都旋转180度,那就没问题了。
     V        V
    [.]      [.] 

Turn the rig 180 degrees

    [.]      [.] 
     ^        ^

但是如果两个相机彼此之间相差180度,并且由于没有重叠,你无能为力。

     V 
    [.]

    [.]
     ^     

另外,针对您关于基于像素、基于特征和基于对象识别的问题——您的最终目标是什么?

我认为他的意思是“如果我旋转相机并从不同角度拍摄同一场景的多个图像,会怎样?” - Niki
那将是第一个场景,这是可以的。 - Jacob
是的,多张图片。我的主要目标是在没有人类帮助的情况下获得一个3D模型。例如,计算机将足够聪明,能够识别它是一张桌子,并且能够感知它的深度。这更像是对周围环境的感知,而不仅仅是一个物体。 - yasumi
这对于一台计算机来说可能要求太多了,要在不受控制的环境中识别“这是一张桌子,这是一把椅子”是很困难的。 - Harriv

0
有最佳方法吗?
最佳方法是自己制作模型。需要使用blender进行几周的培训。通过使用几个高分辨率相机,您可以非常快速地得到相当不错的结果。您将比计算机做得更好。
还有其他方法可以进行这样的重建吗?
激光扫描。搜索“自制激光扫描仪”或“自制3D扫描仪”。一些人尝试开发这样的系统,取得了不同程度的成功。您需要一条线激光(可以从激光笔制作)。但是这种方法无法获得颜色信息,只能获得浮雕信息。
如果我将相机旋转360度以获取视频呢?
即使您旋转相机,也无法仅从一个相机中获得深度信息。您需要从不同点拍摄2个或更多重叠的照片。或者您可以尝试将物体放在转盘上(虽然因为您正在制作房间,这是不可能的)。

嗯...但为什么我无法从一个相机中获取深度,因为所获得的图像会重叠在一起。 - yasumi
@yasumi:因为它们都是从一个单一点获取的。要找到物体的距离,您需要至少有两个参考点。 这是几何学 - 要找到三角形的边(物体的距离),您需要知道至少一条边的长度(两台相机之间的距离)和两个角度(每个相机的视线和指向物体的线之间的角度)。 - SigTerm
实际上,可以从一个移动相机中获取场景重建,谷歌单目重建/SLAM(Newcombe&Davison在CVPR 2010上有一篇论文)。尽管如此,这是当前的研究课题,尚不实用。使用激光扫描仪 :) - Cfr
@Cfr:显然,如果相机移动,你可以进行重构。OP说的是将它旋转360度。这并不是同一件事情... - SigTerm

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