单目测距和双目测距比较
- 单/双目方案的优势与难点
- 单目测距
- 双目测距
- 双目测距实现步骤
- 实现过程
单/双目方案的优势与难点
单目测距
**优点:**单目的优势在于成本较低,对计算资源的要求不高,系统结构相对简单。
缺点:在于必须不断更新和维护一个庞大的样本数据库,才能保证系统达到较高的识别率;无法对非标准障碍物进行判断;距离并非真正意义上的测量,准确度较低。
单目摄像头的大致测距原理,是先通过图像匹配进行目标识别(各种车型、行人、物体等),再通过目标在图像中的大小去估算目标距离。
双目测距
优点一是激光雷达等方案相比成本较低;二是没有识别率的限制,因为从原理上无需先进行识别再进行测算,而是对所有障碍物直接进行测量;三是精度比单目高,直接利用视差计算距离;四是无需维护样本数据库,因为对于双目没有样本的概念。
原理
双目检测的方式就是通过对两幅图像视差的计算,直接对前方景物(图像所拍摄到的范围)进行距离测量,而无需判断前方出现的是什么类型的障碍物。
图中的人和椰子树,人在前,椰子树在后,最下方是双目相机中的成像。可以看出右侧相机成像中人在树的左侧,左侧相机成像中人在树的右侧,这是因为双目的角度不一样。再通过对比两幅图像就可以知道人眼观察树的时候视差小。而观察人时视差大,因为树的距离远,人的距离近。这就是双目三角测距的原理。双目系统对目标物体距离感知是一种绝对的测量,而非估算。
双目系统的一个难点在于计算量非常大,对计算单元的性能要求非常高,这使得双目系统的产品化、小型化的难度较大。所以在芯片或FPGA上解决双目的计算问题难度比较大。国际上使用双目的研究机构或厂商,绝大多数是使用服务器来进行图像处理与计算的;也有部分将算法进行简化后,使用FPGA进行处理。目前,中科慧眼在芯片上的计算效率已经达到15fps,在FPGA+ARM架构上的计算效率达到了40fps。
另一个难点在于双目的配准效果。通过双目摄像头的图像配准可以计算生成表示距离的二维图像。下图是中科慧眼双目方案对实际场景信息采集与计算得到的距离的对应关系,不同饱和度颜色代表不同距离,从暖色调至冷色调为距离由近及远。在计算过程中,需要对噪点与空洞做很好的抑制。从右图可以看出,色调(距离)是平滑过渡,没有跳变。
双目测距实现步骤
主要分为4个步骤:相机标定+双目校正+双目匹配+计算深度信息:
- 相机标定:需要对双目相机进行标定,得到两个相机的内外参数、单应矩阵。
- 双目校正:根据标定结果对原始图像进行校正,校正后的两张图像位于同一平面且互相平行。
- 双目匹配:对校正后的两张图像进行像素点匹配。
- 计算深度图:根据匹配结果计算每个像素的深度,从而获得深度图。
实现过程
(1) 采集标定板的左右视图
- 采集数据前,请调节相机焦距,尽可能保证视图中标定板清洗可见
- 采集棋盘格图像时,标定板一般占视图1/2到1/3左右
- 一般采集15~30张左右
参数说明:
“”“
参数width指的是棋盘格宽方向黑白格子相交点个数
参数height指的是棋盘格长方向黑白格子相交点个数
参数left_video是左路相机ID,一般就是相机连接主板的USB接口号
参数right_video是右路相机ID,一般就是相机连接主板的USB接口号
PS:如果你的双目相机是单USB连接线的双目摄像头(左右摄像头被拼接在同一个视频中显示),则设置left_video=相机ID,而right_video=-1,
参数detect建议设置True,这样可实时检测棋盘格,方面调整角度
按键盘s或者c保存左右视图图片
”“”
width=8
height=11
left_video=0
right_video=-1
save_dir="data/camera"
detect=Truepython get_stereo_images.py \--left_video $left_video \--right_video $right_video \--width $width \--height $height \--save_dir $save_dir \--detect $detect \
参考:
链接: http://www.cheyun.com/content/10424.
链接: https://blog.csdn.net/guyuealian/article/details/121870887.