用OpenCV制作一个低成本的立体相机

点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

AR/VR的兴起,让我们喜欢上了3D电影和视频,前提是你需要戴上一副3D眼镜才能感受到3D效果。那么,它是如何工作的?当屏幕只是平面时,我们如何体验3D效果?其实,这些是通过一个叫立体相机的玩意儿来捕获的。

本文,我们将学习如何DIY一个低成本的立体相机(使用一对网络摄像头)以及如何使用OpenCV捕获3D视频。

一、制作立体相机的步骤

立体相机安装通常包含两个相同的摄像头,它们以固定的距离隔开。工业级标准立体相机使用一对相同的摄像头。

如果是在家里面制作,你需要如下这些东西:

1.2个USB网络摄像头(相同型号的优先)

2.固定相机的刚性底座(木材,纸板,PVC泡沫板)

3.夹钳或胶带

当然,你也可以自由发挥,使用其它不同的组件制作立体相机。但基本要求是保持摄像机严格固定和平行。固定好相机并确保正确对齐后,我们完成了吗?我们准备好生成视差图和3D视频了吗?

No, no, no!

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

为了理解标定和校正的重要性,我们试着用刚DIY好的立体相机捕获到的图像生成一个没有标定和校正过的视差图。

用OpenCV制作一个低成本的立体相机_第1张图片

左图是立体相机捕获到的左右图像;右图是用没有标定过的左右图像生成的视差图。

我们观察到,使用未校准的立体相机生成的视差图非常嘈杂且不准确。为什么会这样?

相应的关键点应具有相等的Y坐标,以简化点对应搜索。在下图中,当我们在几个对应点之间绘制匹配线时,我们观察到这些线不是完全水平的,还观察到对应点的Y坐标也不相等。

用OpenCV制作一个低成本的立体相机_第2张图片

下图显示了一对具有点对应关系的立体图像,以及使用这些图像生成的视差图。我们观察到,与前一张相比,现在的视差图噪声更低。在这种情况下,相应的关键点具有相等的Y坐标。仅当相机平行时才可能出现这种情况。这是双视图几何的特例,其中图像是平行的,并且仅通过水平平移而相关。这是必不可少的,因为用于生成视差图的方法仅搜索水平方向的点对关系。

用OpenCV制作一个低成本的立体相机_第3张图片

太棒了!我们需要做的就是对齐摄像机并使它们完全平行。那么,我们是否会根据反复试验手动调整摄像机?好吧,作为一项有趣的活动,您可以尝试一下!剧透警报!手动调整相机需要很长时间才能获得清晰的视差图。此外,每当设置受到干扰且摄像机移位时,我们都必须重复此过程。这很耗时,也不是理想的解决方案。

为了代替手动调整相机,我们考虑用软件的方法。使用一种称为“立体图像校正”的方法。[1] 下图说明了立体校正的过程。这个想法是在平行于透过光学中心的线的公共平面上重新投影两个图像。这样可以确保相应的点具有相同的Y坐标,并且仅通过水平平移进行关联。

用OpenCV制作一个低成本的立体相机_第4张图片

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

1.使用相机校准手册中介绍的标准OpenCV校准方法校准单个摄像机;

2.确定在立体相机中使用的两个相机之间的转换关系。

3.使用前面步骤中获得的参数和stereoCalibrate方法,我们确定应用于两个图像的变换以进行立体校正。

4.最后,使用initUndistortRectifyMap方法获得查找未失真和校正后的立体图像对所需的映射。

5.将此映射应用于原始图像以获得校正的未失真的立体图像对。

1)左右相机的独立标定

在执行立体标定之前,我们会分别对两个相机进行标定。但是,如果stereoCalibrate()方法可以对两个相机中的每一个进行校准,为什么还要分别标定相机呢?

由于要计算的参数很多(较大的参数空间),并且在诸如角点检测和将点近似为整数之类的步骤中累积了误差。这增加了迭代方法偏离正确解的风险。因此,我们分别计算摄像机参数,然后使用stereoCalibrate()方法仅用于获取立体相机对间的位置关系,本质矩阵和基础矩阵。

但是该算法如何知道要跳过单相机的标定?为此,我们设置标志CALIBFIXINTRINSIC并将其传递给该方法。

2)用固定内参执行立体标定

校准相机后,我们将它们传递给stereoCalibrate()方法并设置CALIBFIXINTRINSIC标志。我们还传递两个图像中捕获的3D点和相应的2D像素坐标。

该方法计算相机间的平移旋转矩阵以及基础矩阵和本质矩阵。

用OpenCV制作一个低成本的立体相机_第5张图片

3)立体校正

使用相机的内外参,我们现在可以运用立体校正了。立体校正运用旋转使两个相机图像面都在同一平面上,同时stereoRectify方法还能返回新坐标空间中的投影矩阵。

用OpenCV制作一个低成本的立体相机_第6张图片

4)计算所需的映射

由于我们假设相机是固定的,无需再次计算变换。因此,我们计算的通过映射将立体图像对转换为未失真的校正的立体图像对,并将其保存以备将进一步使用。

好了,这样我们就制作好了立体相机,下期再会~

参考文献

[1] C. Loop and Z. Zhang. Computing Rectifying Homographies for Stereo Vision. IEEE Conf. Computer Vision and Pattern Recognition, 1999.

备注:作者系我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。

下载2

在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。

下载3

在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

用OpenCV制作一个低成本的立体相机_第7张图片

▲长按加微信群或投稿

用OpenCV制作一个低成本的立体相机_第8张图片

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

用OpenCV制作一个低成本的立体相机_第9张图片

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  用OpenCV制作一个低成本的立体相机_第10张图片

你可能感兴趣的:(计算机视觉,人工智能,机器学习,python,opencv)