Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何用OpenCV制作一个低成本的立体相机

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

作者头像
小白学视觉
发布于 2021-02-22 03:27:42
发布于 2021-02-22 03:27:42
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

点击上方“小白学视觉”,选择加"星标"或“置顶

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
重磅干货,第一时间送达

本文转载自:3D视觉工坊

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

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

一、制作立体相机的步骤

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

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

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

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

3.夹钳或胶带

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

No, no, no!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1)左右相机的独立标定

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

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

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

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

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

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

3)立体校正

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

4)计算所需的映射

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

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

参考文献

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

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目31讲

在「小白学视觉」公众号后台回复:Python视觉实战项目31讲,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉

下载3:OpenCV实战项目20讲

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度相机-介绍
双目立体成像:zspace的桌面一体机, intel的RealSense主动双目系列,未来立体的桌面一体机。
孙寅
2022/03/24
1.5K0
深度相机-介绍
自动驾驶汽车的伪激光雷达-双目立体视觉
双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。
点云PCL博主
2022/02/10
1.4K0
自动驾驶汽车的伪激光雷达-双目立体视觉
双目匹配
张氏相机标定法利用不同角度拍摄的多张棋盘图像,计算出相应的内参:f_x, f_y, c_x, c_y(内参),以及畸变系数k_1,k_2,k_3,p_1,p_2(径向畸变、切向畸变参数)。
ttony0
2022/12/26
2.7K0
双目匹配
深入研究矫正单应性矩阵用于立体相机在线自标定
文章:Dive Deeper into Rectifying Homography for Stereo Camera Online Self-Calibration
点云PCL博主
2023/12/21
2530
深入研究矫正单应性矩阵用于立体相机在线自标定
机器视觉-相机内参数和外参数
一句话就是世界坐标到像素坐标的映射,当然这个世界坐标是我们人为去定义的,标定就是已知标定控制点的世界坐标和像素坐标我们去解算这个映射关系,一旦这个关系解算出来了我们就可以由点的像素坐标去反推它的世界坐标,当然有了这个世界坐标,我们就可以进行测量等其他后续操作了~上述标定又被称作隐参数标定,因为它没有单独求出相机的内部参数,如相机焦虑,相机畸变系数等~一般来说如果你仅仅只是利用相机标定来进行一些比较简单的视觉测量的话,那么就没有必要单独标定出相机的内部参数了~至于相机内部参数如何解算,相关论文讲的很多~
小白学视觉
2022/02/14
9520
机器视觉-相机内参数和外参数
一篇文章认识《双目立体视觉》
双目立体视觉,由两个摄像头组成,像人的眼睛能看到三维的物体,获取物体长度、宽度信息,和深度的信息;单目视觉获取二维的物体信息,即长度、宽度。
一颗小树x
2021/05/15
10.3K1
一篇文章认识《双目立体视觉》
真实场景的双目立体匹配(Stereo Matching)获取深度图详解
  双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景的左、右两幅视点图像,运用立体匹配匹配算法获取视差图,进而获取深度图。而深度图的应用范围非常广泛,由于其能够记录场景中物体距离摄像机的距离,可以用以测量、三维重建、以及虚拟视点的合成等。   之前有两篇博客简要讲过OpenCV3.4中的两种立体匹配算法效果比较:http://www.cnblogs.com/riddick/p/8318997.html 。以及利用视差图合成新视点: http://www.cnblogs.com/riddick/p/
一棹烟波
2018/03/19
11.5K1
真实场景的双目立体匹配(Stereo Matching)获取深度图详解
单目全向立体相机的标定(一种新的相机形式)
文章:Calibration Method of the Monocular Omnidirectional Stereo Camera
点云PCL博主
2022/01/27
7660
单目全向立体相机的标定(一种新的相机形式)
一文详解双目相机标定理论
在这里我们所说的双目标定是狭义的,讲解理论的时候仅指两台相机之间相互位置的标定,在代码实践的时候,我们才说完整的双目标定。
计算机视觉
2021/04/09
1.1K0
一文详解双目相机标定理论
是和VR抢蛋糕,还是配合VR分蛋糕? ——浅谈三维重建和应用
一、背景概要 作为一名智能产品测试工程师,不可避免的需要接触到最新最热的技术产品,目前,VR就是这样一种技术,“知己知彼百战不殆”,想要做好VR产品的测试工作,你必须先要了解VR是什么?VR未来的发展趋势会怎样?除开VR本身,还会有其他的技术能够与VR一较高下亦或者融合入VR带来崭新的技术体验?今天我将向你介绍一门与VR即能匹配又能相辅相成的技术-三维重建。 作为一名技术开发者如果还不知道VR是什么,那你就out了,VR到底有多火?我们从一些数据新闻中就可以看出来:全球领先的移动互联网第三方数据挖掘和整合营
腾讯移动品质中心TMQ
2018/02/06
1.6K0
是和VR抢蛋糕,还是配合VR分蛋糕? ——浅谈三维重建和应用
综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍
文章:Surround-view Fisheye Camera Perception for Automated Driving: Overview, Survey & Challenges
点云PCL博主
2022/09/13
4.4K0
综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍
伪激光雷达:无人驾驶的立体视觉
激光雷达成本高,用廉价的立体视觉替代它可行吗? 作者:Jeremy Cohen 编译:McGL
McGL
2020/09/21
1.4K0
伪激光雷达:无人驾驶的立体视觉
一文详解双目相机标定理论
在这里我们所说的双目标定是狭义的,讲解理论的时候仅指两台相机之间相互位置的标定,在代码实践的时候,我们才说完整的双目标定。
3D视觉工坊
2021/04/09
3.2K0
一文详解双目相机标定理论
摄像机标定和立体标定
尝试用OpenCV来实现立体视觉也有一段时间了,主要的参考资料就是Learning OpenCV十一、十二章和OpenCV论坛上一些前辈的讨论。过程中磕磕碰碰,走了不少弯路,终于在前不久解决了最头大的问题,把整个标定、校准、匹配的流程调试成功。(虽然还有一些问题至今尚未搞清) 在这里写这篇文章,第一方面是给自己一个总结,第二方面是感觉OpenCV立体视觉方面的资料还是相当零散和不完整,新手入门需要花很长时间才能摸索出来,第三方面,也是自己在过程中有些问题仍旧迷迷糊糊,希望可以抛砖引玉。 1. 摄像头 我用的
智能算法
2018/04/02
2.1K0
摄像机标定和立体标定
双目测距原理
相机标定:摄像头由于光学透镜的特性使得成像存在着径向畸变,可由三个参数k1,k2,k3确定;由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数p1,p2确定。单个摄像头的定标主要是计算出摄像头的内参(焦距f和成像原点cx,cy、五个畸变参数(一般只需要计算出k1,k2,p1,p2,对于鱼眼镜头等径向畸变特别大的才需要计算k3))以及外参(标定物的世界坐标)。而双目摄像头定标不仅要得出每个摄像头的内部参数,还需要通过标定来测量两个摄像头之间的相对位置(即右摄像头相对于左摄像头的旋转矩阵R、平移向量t)。
全栈程序员站长
2022/07/22
7.2K1
双目测距原理
opencv双目测距实现
来自: http://blog.csdn.net/sunanger_wang/article/details/7744015 虽然最近注意力已经不可遏制地被神经科学、大脑记忆机制和各种毕业活动吸引过去了,但是还是觉得有必要把这段时间双目视觉方面的进展总结一下。毕竟从上一篇博文发表之后,很多同仁发E-mail来与我讨论,很多原来的疑团,也在讨论和一步步的试验中逐渐解决了。 开篇之前,首先要感谢maxwellsdemon和wobject,没有和你们的讨论,也就没有此篇的成文。 说到双摄像头测距,首先要复习一下
智能算法
2018/04/02
4.2K0
opencv双目测距实现
综述 | 相机标定方法
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数(内参、外参、畸变参数)必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。
AI算法与图像处理
2019/08/29
8420
综述 | 相机标定方法
棉花识别定位 | 中国智能识别棉花采摘,支持新疆棉
针对采棉机械手棉花识别定位难的问题,提出一种基于机器视觉的棉花识别与定位方法,搭建出双目立体视觉系统,在此基础上通过相机标定、图像采集、图像处理、特征提取等过程,计算得出棉株的深度信息以及其成熟棉 花的三维信息,其深度平均误差值为2.55mm,单位坐标误差均值为(2.8mm,-1.4mm,-1.35mm)。结果表明,基 于双目立体视觉对棉株上的成熟棉花进行三维空间上的识别定位是可行的。
计算机视觉研究院
2021/03/30
6760
棉花识别定位 | 中国智能识别棉花采摘,支持新疆棉
使用iPhone相机和OpenCV来完成3D重建(第三部分)
url : https://medium.com/@omar.ps16/stereo-3d-reconstruction-with-opencv-using-an-iphone-camera-part-iii-95460d3eddf0
LiveVideoStack
2020/11/04
1.4K0
使用iPhone相机和OpenCV来完成3D重建(第三部分)
相机标定——张正友棋盘格标定法
其中,R为旋转矩阵,t为平移向量,因为假定在世界坐标系中物点所在平面过世界坐标系原点且与Zw轴垂直(也即棋盘平面与Xw-Yw平面重合,目的在于方便后续计算),所以zw=0,可直接转换成式1的形式。其中变换矩阵
全栈程序员站长
2022/08/24
6.6K0
相机标定——张正友棋盘格标定法
相关推荐
深度相机-介绍
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验