智能驾驶中双目视觉关键技术与应用算法
2021-07-22朱子阳
朱子阳,陈 双
智能驾驶中双目视觉关键技术与应用算法
朱子阳,陈 双
(辽宁工业大学 汽车与交通工程学院,辽宁 锦州 121001)
为解决智能驾驶道路感知中最优立体匹配算法问题,以双目视觉感知系统为例,首先利用OpenCv标定法对双目摄像头进行标定,其次对现有的SAD、SGBM、GC 3种立体匹配算法进行编程模拟,得到各自算法的视差图,最后将算法运行时间和视差图进行对比。结果表明OpenCv标定法能够对双目摄像头进行简单快捷的标定,同时3种立体匹配算法中SAD算法运行速度最快,但匹配效果差,SGBM算法适中,GC算法运行速度最慢,但匹配效果最好。
双目视觉;OpenCv;标定;立体匹配
随着全球智能驾驶进入产业化与商业化的准备期,智能驾驶技术的迅速发展极大地推动了各类环境感知传感器的研究[1]。其中双目视觉系统(Binocular visual system)能够对特定目标进行信息提取,具有工作量小、处理速度快、实时性强等优点,使得它在动态目标识别跟踪等领域具有较高应用价值[2]。例如J等[3]使用摄像头拍摄车辆前方信息,利用卡尔曼滤波估计前方车辆的速度、位置和预计碰撞时间,提高了前向碰撞警告(FCW)和自动紧急制动(AEB)的性能。熊勇良等[4]利用双目视觉系统获取完成电力巡检工作中的无人机姿态信息,提升了无人机的定位精度。南京邮电大学张竞艺[5]利用双目视觉系统并通过核相关滤波(KCF)追踪算法,对运动中的目标实现了实时追踪,该算法在88~300 cm范围内的测量精度可达到95%以上。双目视觉系统大致可分为图像获取、摄像机标定、特征提取、立体匹配、三维重建、数据处理6大部分,其中摄像机标定是双目立体视觉系统的基础,标定结果的好坏决定了双目立体视觉系统中立体匹配的精度与速度,同时也决定了立体视觉系统最终目标——三维重建的效果。因此对摄像机标定进行研究、实现具有极大的意义[6]。
本文将围绕双目视觉系统关键技术,从摄像头的标定方法入手,总结现有标定方法的原理及特点,同时对现有的几种立体匹配应用算法进行编程模拟并对比其运行速度和视差图效果,为后续双目视觉感知在各领域中的应用打下良好基础。
1 双目视觉系统关键技术
双目视觉系统是由2台平行或者成一定角度摆放的摄像机组成,同一个物体在两台摄像机中都会得到图片,根据物体在两张图片中的位置差异即视差值(disparity),就可能得知物体在真实世界中的位置。
应用在智能驾驶的车载双目视觉系统主要是利用得到的视差值,再经过立体匹配、三维重构等一系列算法后,最终实现对目标物体的定位及跟踪。北京建筑大学的杨幸彬[7]利用双目视差原理,针对半全局匹配获取立体影像视差图时存在的计算时间和内存开销较大、视差边缘保持欠佳的问题,研究了一种光流与特征点法结合的序列影像匹配算法,从而提升了影像位姿结果的精度。长春理工大学郭伟[8]在视差图上使用一种基于自适应阈值分割方法获得感兴趣区域,并结合区域约束方法得到头肩部模型的待检测区域,有效的去除了视差图的背景信息,提高了检测效率。
摄像机标定的方法有很多,通常可以分为传统的摄像机标定和摄像机自标定。
传统的摄像机标定技术需要有特定的定标参照物,根据摄影集合方面的理论直接计算摄像机参数[9]。传统的标定方法可分为线性模型和非线性模型两类,线性模型摄像机标定方法用线性方程求解,简单快速,已成为计算机视觉领域的研究热点之一,但线性模型不考虑镜头的畸变,标定结果准确性欠佳,对后期的三维重构精度影响较大。非线性模型的摄像头标定方法在考虑畸变参数的同时还引入了非线性优化,但方法繁琐,速度慢,对初值选择和噪声比较敏感,而且不能保证参数收敛到全局最优解。自标定法虽然灵活度很高,不需要标定块就能进行标定,但标定结果不准确。
OpenCv标定法是介于传统标定法和自标定法之间的一种方法,由张正友提出,称作张氏平面模版标定法[9]。此方法克服了传统标定法需要的高精度标定参照物的缺点,而且仅需使用一个打印出来的的棋盘格就可以实现。同时相对于自标定而言,提高了精度,便于操作。OpenCv标定法实际是求解三维世界坐标系中的坐标[X,Y,Z,1]T到二维像素平面[u,v,1]T的对应关系,具体变换流程如图1所示,双目摄像头标定流程如图2所示。
图1 坐标转换流程图
图2 双目摄像头标定流程图
本文的双目摄像头标定是在配置OpenCv3.4.1环境下的VS2015编程软件中所实现的,具体标定过程如下:
(1)利用Matlab工具箱标定出左右摄像头的内参数,为标定双目摄像头外参数奠定基础。图3为单目摄像机标定结果,表1和表2分别为左右摄像头的内参标定结果。
图3 单目摄像机标定图
表1 左摄像头参数表
参数名称结果 内参数矩阵 畸变系数(-0.2821 0.0408 0.0012 -0.0001 0.1141)
表2 右摄像头参数
参数名称结果 内参数矩阵 畸变系数(-0.2961 0.1389 -0.0005 9.4724 -0.049)
(2)编写c++程序,调取OpenCv标定头文件,代码片段如下。
(3)设置摄像机分辨率及标定板横纵角点数目等参数,将之前获得的摄像机内参数输入到程序中,代码片段如下。
(4)将OpenCv中自带的标定板图片放入指定文件夹下,并在程序中写入读取图片的绝对路径,代码如下。
(5)运行程序输出左右相机标定板棋盘格角点识别结果如图4和图5所示。
(6)对标定过的图像进行校正。利用OpenCv中的StereoRectify函数计算投影矩阵,通过投影矩阵使两幅图像进行共面且平行对准,校正结果如图6所示。输出的双目摄像头外参数,即平移矩阵和旋转矩阵如表3所示。
图4 左侧相机棋盘格角点识别图
图5 右侧相机棋盘格角点识别图
图6 双目摄像头校正结果
表3 双目摄像头外参数
参数名称结果 旋转矩阵R 平移矩阵T
(7)对标定结果进行评价
对标定的结果进行评价的方法是通过摄像机得到的内外参数,对空间的三维点进行重新投影计算,得到空间三维点图像上新的投影点坐标,计算投影坐标和亚像素角点坐标之间的偏差,偏差越小,标定结果越好。如图7所示,其中Pl为投影矩阵,Q为重投影矩阵。同时可知立体标定的误差均方根值RMS为0.215 783,且图片合格已保存,所以符合标定要求,这说明此方法是可行的。
图7 误差数据图
2 立体匹配算法研究
2.1 SAD算法
灰度差累积(sum of absolute differences,SAD)算法是基于灰度的模板匹配算法。具有运算速度快、实时性好等优点,可以较好地满足多数双目立体视觉系统的需求[10]。该算法通过把双目视觉系统所拍摄的两个图像中匹配点对应灰度值的差取绝对值再进行累积求和,计算得到的结果可对两个图像块的相似度进行评估。
基本流程如下:
(1)构造一个类似于卷积核的窗口。
(2)用窗口覆盖双目视觉中左摄像头拍摄的图像,选择出该窗口覆盖图像下的所有像素点。
(3)用同样的方法覆盖右摄像头拍摄图片的像素点。
(4)利用左右图像区域相减得到差值,并求出所有像素点灰度差的绝对值之和。
(5)移动右边图像的窗口,重复(3)、(4)步的处理,超过设定好查找的范围自动跳出。
(6)找到这个范围内SAD值最小的窗口,即找到了最佳匹配像素块。
(7)编写程序运行代码,得到如图8所示的视差图。
图8 SAD算法下的视差图
通过匹配所有的图片对并对所得到的视差图观察可知,SAD算法运行速度不是很快,而且得到的匹配效果不佳,甚至还出现了重叠的部分,不能为双目视觉系统带来很好的测距目的,对后期的智能驾驶需求影响较大,因此不建议采取该方法。
2.2 SGBM算法
SGBM(semi-global block matching)算法是由Hirschmuller等人提出的半全局匹配方法,该算法算法核心步骤有匹配成本计算、成本合计、视差计算、多基线匹配和视差优化[11]。
SGBM算法大致可分为以下4个步骤。
(1)匹配代价计算。这一部分需要计算两个代价,一个是经过处理的图像使用基于采样的方法得到的梯度代价,另一个是原图像使用基于采样的方法得到的SAD(Sum of Absolute Differences)代价。
(2)成本计算。SGBM算法试图通过图像上多个方向上一维路径的约束,建立一个全局Markov energy equation。每个像素最终的匹配代价是所有路径信息的叠加,每个像素路径的选择由最大的一方决定。
(3)多基线匹配。通过计算基础图像和匹配图像之间所有对应关系的组合像素匹配成本来完成多基线匹配。
(4)后处理步骤。对匹配后的图像进行视差的优化。
参考SGBM算法编写程序得到如图9的标定板视差图,图中越白的位置代表距离拍摄点越近,越黑的位置代表离拍摄点越远,纯黑的位置代表距离拍摄点无限远或者是因为匹配错误导致匹配程序在该点没有数据输出。可以看到SGBM程序将所有关键结构的视差都很好的表现了出来,每对图片对的识别时间在6500-7000 ms范围内,可以实时为车辆提供信息。所以该方法应用到智能驾驶识别中是可行的。
图9 SGBM算法下的视差图
2.3 GC算法
GC(Graph Cut)算法是一种全局匹配算法,其处理效果最好[12-14],一般流程如下。
(1)应用分割法分割来自双目视觉系统拍摄的图片。
(2)利用立体匹配较快的算法事先求解图片各个点的视差值,为后续全局匹配做准备。
(3)根据第二步所得到的视差信息,对每一区域开展平面化建模,将各个区域组合获得一个平面集合。
(4)修正平面几何并以区域为单位全局匹配,得到每一区域的视差,最终获得视差图。
采用上述原理并参考GC算法编写程序得到如图10所示的GC算法视差图。该算法相对于SAD和SGBM算法而言效果最好,但运行速度最慢,在智能驾驶应用中无法实时为车辆提供路况信息,只适用于静态物体识别的立体匹配操作。3种算法运行时间对比结果如表4所示。
图10 GC算法下的视差图
表4 3种算法运算时间
立体匹配算法运算时间/ms SAD3310 SGBM6960 GC250000
3 结论
以双目视觉感知系统为例,介绍了传统标定法和OpenCv标定法的原理和特点,重点对OpenCv标定法进行了编程模拟;以智能驾驶目的为导向分别研究了现有的SAD、SGBM、GC三种立体匹配算法并依次编写程序模拟获得了相应的视差图,得到结论如下。
(1)利用OpenCv标定的方法较传统标定法更为简便,得到的结果也更为准确,为后续的视觉匹配提供了基础。
(2)采用SAD算法得到的视差图虽然运行速度最快,但得到的视差图整体精度较差,不利于智能驾驶汽车控制系统的信息的提取,容易造成误差引起控制失误。
(3) SGBM算法下的视差图运行速度一般,但得到的视差图效果很好,能够清晰地表达出目标距驾驶汽车的位置信息,可以实时的为控制系统提供数据,有利于智能驾驶汽车视觉行业的发展。
(4) GC算法所得到的视差图效果最好,但运行速度较慢,无法实时对智能驾驶汽车前方路况的信息进行动态提取,更适用于简单的静态物体识别操作。
[1] 陈晓冬, 张佳琛, 庞伟凇, 等. 智能驾驶车载激光雷达关键技术与应用算法 [J]. 光电工程, 2019, 46(7): 28-40.
[2] 张东清, 罗友, 孙艳玲, 等. 一种简单的摄像机标定技术在视觉定位中的应用[J]. 生命科学仪器, 2012, 10(6): 47-51.
[3] HAN J, HEO O, PARK M, et al. Vehicle distance estimation using a mono-camera for FCW/AEB systems. International Journal of Automotive Technology, 2016, 17(3): 483-491.
[4] 熊勇良, 罗志勇, 郭宝明.双目视觉定位在无人机电力巡检中的应用[J]. 集成电路应用, 2020, 37(4): 88-89.
[5] 张竞艺. 基于双目视觉的运动目标实时追踪与测距[D]. 南京: 南京邮电大学, 2020: 41-48.
[6] 王汉, 殷宏. 基于OpenCV的双目摄像头标定研究及实现[J]. 福建电脑, 2018, 34(8): 121-122,129.
[7] 杨幸彬. 双目视觉生成道路稠密点云地图的关键算法研究[D]. 北京: 北京建筑大学, 2019: 1-68.
[8] 郭伟. 基于双目视觉的行人检测与识别技术研究[D]. 长春: 长春理工大学, 2019: 1-59.
[9] 王长元, 邢世蒙, 基于OpenCv的双目摄像机标定技术[J]. 计算机与数字工程, 2004, 12: 2392-2395.
[10] 五源. 串联机器人实时双目视觉定位及跟踪技术研究[D]. 武汉: 湖北工业大学, 2017: 1-74.
[11] 李先祥, 陈思琪, 肖红军, 等. 基于SGBM算法与BM算法的三维重建分析[J]. 自动化与信息工程, 2019(5): 6-12.
[12] 周琼. 基于计算机的视觉立体匹配算法探究[J]. 数字通信世界, 2018(8): 108-109.
[13] HUAN Z , LI A N , QIANG Z. SGBM Algorithm and BM Algorithm Analysis and Research[J]. Geomatics & Spatial Information Technology, 2016: 495-498.
[14] 吴恩慈. 基于JAVA大规模应用中GC算法和调优技术研究[J]. 电子技术与软件工程, 2019(4): 1-249.
Key Technology and Application Algorithm of Binocular Vision in Intelligent Driving
ZHU Zi-yang, CHEN shuang
(School of Automobile and Traffic Engineering, Liaoning University of Technology, Jinzhou 121001, China)
In order to solve the optimal stereo matching algorithm problem in intelligent driving road perception, the binocular visual perception system is taken as an example, the calibration of binocular camera is completed firstly based on OpenCv calibration method. Then three programming including SAD, SGBM, GC are simulated and the parallax figures are achieved. Finally the running time and parallax figure of three algorithm are compared and analyzed. The results show that the OpenCV calibration method can perform calibration for binocular cameras simply and quickly. Among three stereo matching algorithms,the running speed of SAD algorithm is fastest but the matching effect is poorer, the running speed of SGBM algorithm is moderate, the running speed of GC algorithm is slowest but the matching effect is best.
binocular vision; OpenCv; demarcation; stereo matching
TP181
A
1674-3261(2021)04-0236-05
10.15916/j.issn1674-3261.2021.04.006
2020-09-03
国家自然科学基金面上项目(51605213)
朱子阳(1996-),男,辽宁盘锦人,硕士生。
陈 双(1979-),女,辽宁锦州人,副教授,博士。
责任编校:陈 明