
16

如何用OpenCV制作一个低成本的立体相机
source link: https://mp.weixin.qq.com/s/og-IdVapnz3veB6TsRmTgA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
本文,我们将学习如何DIY一个低成本的立体相机(使用一对网络摄像头)以及如何使用OpenCV捕获3D视频。
一、制作立体相机的步骤
立体相机安装通常包含两个相同的摄像头,它们以固定的距离隔开。工业级标准立体相机使用一对相同的摄像头。如果是在家里面制作,你需要如下这些东西:1.2个USB网络摄像头(相同型号的优先)2.固定相机的刚性底座(木材,纸板,PVC泡沫板)3.夹钳或胶带当然,你也可以自由发挥,使用其它不同的组件制作立体相机。但基本要求是保持摄像机严格固定和平行。固定好相机并确保正确对齐后,我们完成了吗?我们准备好生成视差图和3D视频了吗?No, no, no!二、立体相机标定和校正的重要性
为了理解标定和校正的重要性,我们试着用刚DIY好的立体相机捕获到的图像生成一个没有标定和校正过的视差图。三、立体相机标定和校正的步骤
1.使用相机校准手册中介绍的标准OpenCV校准方法校准单个摄像机;2.确定在立体相机中使用的两个相机之间的转换关系。3.使用前面步骤中获得的参数和stereoCalibrate方法,我们确定应用于两个图像的变换以进行立体校正。4.最后,使用initUndistortRectifyMap方法获得查找未失真和校正后的立体图像对所需的映射。5.将此映射应用于原始图像以获得校正的未失真的立体图像对。1)左右相机的独立标定在执行立体标定之前,我们会分别对两个相机进行标定。但是,如果stereoCalibrate()方法可以对两个相机中的每一个进行校准,为什么还要分别标定相机呢?由于要计算的参数很多(较大的参数空间),并且在诸如角点检测和将点近似为整数之类的步骤中累积了误差。这增加了迭代方法偏离正确解的风险。因此,我们分别计算摄像机参数,然后使用stereoCalibrate()方法仅用于获取立体相机对间的位置关系,本质矩阵和基础矩阵。但是该算法如何知道要跳过单相机的标定?为此,我们设置标志CALIBFIXINTRINSIC并将其传递给该方法。2)用固定内参执行立体标定校准相机后,我们将它们传递给stereoCalibrate()方法并设置CALIBFIXINTRINSIC标志。我们还传递两个图像中捕获的3D点和相应的2D像素坐标。该方法计算相机间的平移旋转矩阵以及基础矩阵和本质矩阵。重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、可答疑解惑、助你高效解决问题觉得有用,麻烦给个赞和在看~
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK