AR/VR的兴起,让我们喜欢上了3D电影和视频,前提是你需要戴上一副3D眼镜才能感受到3D效果。那么,它是如何工作的?当屏幕只是平面时,我们如何体验3D效果?其实,这些是通过一个叫立体相机的玩意儿来捕获的。本文,我们将学习如何DIY一个低成本的立体相机(使用一对网络摄像头)以及如何使用OpenCV捕获3D视频。

一、制作立体相机的步骤

立体相机安装通常包含两个相同的摄像头,它们以固定的距离隔开。工业级标准立体相机使用一对相同的摄像头。如果是在家里面制作,你需要如下这些东西:1.2个USB网络摄像头(相同型号的优先)2.固定相机的刚性底座(木材,纸板,PVC泡沫板)3.夹钳或胶带当然,你也可以自由发挥,使用其它不同的组件制作立体相机。但基本要求是保持摄像机严格固定和平行。固定好相机并确保正确对齐后,我们完成了吗?我们准备好生成视差图和3D视频了吗?No, no, no!

二、立体相机标定和校正的重要性

为了理解标定和校正的重要性,我们试着用刚DIY好的立体相机捕获到的图像生成一个没有标定和校正过的视差图。如何用OpenCV制作一个低成本的立体相机_立体相机左图是立体相机捕获到的左右图像;右图是用没有标定过的左右图像生成的视差图。我们观察到,使用未校准的立体相机生成的视差图非常嘈杂且不准确。为什么会这样?相应的关键点应具有相等的Y坐标,以简化点对应搜索。在下图中,当我们在几个对应点之间绘制匹配线时,我们观察到这些线不是完全水平的,还观察到对应点的Y坐标也不相等。如何用OpenCV制作一个低成本的立体相机_立体相机_02下图显示了一对具有点对应关系的立体图像,以及使用这些图像生成的视差图。我们观察到,与前一张相比,现在的视差图噪声更低。在这种情况下,相应的关键点具有相等的Y坐标。仅当相机平行时才可能出现这种情况。这是双视图几何的特例,其中图像是平行的,并且仅通过水平平移而相关。这是必不可少的,因为用于生成视差图的方法仅搜索水平方向的点对关系。如何用OpenCV制作一个低成本的立体相机_立体相机_03太棒了!我们需要做的就是对齐摄像机并使它们完全平行。那么,我们是否会根据反复试验手动调整摄像机?好吧,作为一项有趣的活动,您可以尝试一下!剧透警报!手动调整相机需要很长时间才能获得清晰的视差图。此外,每当设置受到干扰且摄像机移位时,我们都必须重复此过程。这很耗时,也不是理想的解决方案。为了代替手动调整相机,我们考虑用软件的方法。使用一种称为“立体图像校正”的方法。[1] 下图说明了立体校正的过程。这个想法是在平行于透过光学中心的线的公共平面上重新投影两个图像。这样可以确保相应的点具有相同的Y坐标,并且仅通过水平平移进行关联。如何用OpenCV制作一个低成本的立体相机_立体相机_04

三、立体相机标定和校正的步骤

1.使用相机校准手册中介绍的标准OpenCV校准方法校准单个摄像机;2.确定在立体相机中使用的两个相机之间的转换关系。3.使用前面步骤中获得的参数和stereoCalibrate方法,我们确定应用于两个图像的变换以进行立体校正。4.最后,使用initUndistortRectifyMap方法获得查找未失真和校正后的立体图像对所需的映射。5.将此映射应用于原始图像以获得校正的未失真的立体图像对。1)左右相机的独立标定在执行立体标定之前,我们会分别对两个相机进行标定。但是,如果stereoCalibrate()方法可以对两个相机中的每一个进行校准,为什么还要分别标定相机呢?由于要计算的参数很多(较大的参数空间),并且在诸如角点检测和将点近似为整数之类的步骤中累积了误差。这增加了迭代方法偏离正确解的风险。因此,我们分别计算摄像机参数,然后使用stereoCalibrate()方法仅用于获取立体相机对间的位置关系,本质矩阵和基础矩阵。但是该算法如何知道要跳过单相机的标定?为此,我们设置标志CALIBFIXINTRINSIC并将其传递给该方法。2)用固定内参执行立体标定校准相机后,我们将它们传递给stereoCalibrate()方法并设置CALIBFIXINTRINSIC标志。我们还传递两个图像中捕获的3D点和相应的2D像素坐标。该方法计算相机间的平移旋转矩阵以及基础矩阵和本质矩阵。如何用OpenCV制作一个低成本的立体相机_立体相机_053)立体校正使用相机的内外参,我们现在可以运用立体校正了。立体校正运用旋转使两个相机图像面都在同一平面上,同时stereoRectify方法还能返回新坐标空间中的投影矩阵。如何用OpenCV制作一个低成本的立体相机_立体相机_064)计算所需的映射由于我们假设相机是固定的,无需再次计算变换。因此,我们计算的通过映射将立体图像对转换为未失真的校正的立体图像对,并将其保存以备将进一步使用。好了,这样我们就制作好了立体相机,下期再会~参考文献[1] C. Loop and Z. Zhang. Computing Rectifying Homographies for Stereo Vision. IEEE Conf. Computer Vision and Pattern Recognition, 1999.

 

如何用OpenCV制作一个低成本的立体相机_立体相机_07