基于HSV颜色空间与边缘特征的黄色车道线检测

2017-07-01 14:33王怀涛曹明伟邢皎玉WangHuaitaoCaoMingweiXingJiaoyu
北京汽车 2017年3期
关键词:像素点灰度车道

王怀涛,曹明伟,邢皎玉 Wang Huaitao,Cao Mingwei,Xing Jiaoyu



基于HSV颜色空间与边缘特征的黄色车道线检测

王怀涛,曹明伟,邢皎玉 Wang Huaitao,Cao Mingwei,Xing Jiaoyu

(合肥工业大学汽车与交通工程学院,安徽合肥 230009)

车道线检测是实现汽车智能行驶的首要技术,文中阐述了一种在城市复杂道路环境中直线部分黄色车道线的检测方法。首先,利用黄色车道线在HSV颜色空间的颜色特征检测出照片中的黄色像素。为此,首先采集不同光照强度条件下的黄色车道线像素作为样本值,再以此样本值为后验知识来检测出目标照片中黄色像素,但此时会保留有较多的干扰像素;其次,利用车道线边缘的直线特征检测出目标照片中具有直线特征的像素。再次,将前2步得到的结果作与运算,去除绝大部分干扰像素;最后,在得到的结果图上运用霍夫变换,迅速得到所要检测的黄色车道线。

黄色车道线;HSV颜色空间;边缘特征;与运算;霍夫变换

0 引 言

智能化是未来汽车产业发展的趋势,车道线作为智能汽车安全行驶重要参考标线,其快速准确地检测显得尤为重要。

当前车道线检测算法主要有基于灰度图的阈值分割法[1-2],基于Canny算子的车道线边缘检测算法[3],基于车道线颜色特征的阈值分割法[4]。前2种方法未能利用车道线颜色这一重要特征,用于检测道路中的白色车道线时具有较好的效果,但检测亮度较低的黄色车道线时效果很差;后一种方法虽然利用了车道线的颜色特征,但是根据车道线颜色进行图像分割的颜色阈值会随着光照、车道线的新旧不同而变化,而且会识别出干扰像素。

文中提出一种新的车道线检测方法,专用于黄色车道线检测。先通过查找H-S(Hue-Saturation,色相-饱和度)二维表识别出具有黄色特征的像素,再在这些具有黄色特征的像素中识别出具有直线边缘特征的像素,然后滤除同时具有黄色和直线边缘特征的干扰像素,最后进行霍夫变换即可检测出黄色车道线。

1 初始H-S二维表建立

采集样本照片中黄色车道线的像素点,根据这些像素点在HSV(Hue,Saturation,Value,色相、饱和度、亮度)空间的H、S值建立一个用来描述、存储车道线黄色特征的数据库,即H-S二维表;通过将目标照片中的像素值与此H-S二维表中的值作比较即可识别出目标照片中的黄色像素点。此H-S二维表应能够随着车道线识别程序的运行而不断更新。

1.1 建表方法

拍摄20张在不同光照下含有不同干扰因素的包含黄色车道线的照片。拍摄点选在车道中间,模拟车载相机的拍摄角度。选取不同光照条件下、含有不同干扰的6张照片作为样本照片如图1(a)所示,剩下3张照片作为目标照片。用图像编辑工具提取6张样本照片中的黄色车道线,并将它们放到黄色车道线提取图如图1(b)所示,再统计黄色车道线提取图中每一对(H,S)像素特征值所对应的像素个数,该像素个数缩放后的数值就是所要建立二维表中对应(H,S)坐标处的数值,这样能建立所需要的初始H-S二维表。

在HSV空间中每个黄色车道线像素均对应H、S、V 3个值,根据不同光照、不同亮度条件下的颜色恒常性原理,仅选取H、S 2个值来建立二维表格,弱化光照强度对检测结果的不利影响。

1.2 建表过程

提取的黄色车道线如图1所示。

用OpenCV中的cvtColor函数(函数的转换格式参数选用CV_BGR2HSV_FULL,这样转换后的H、S值的范围均在0~255[5],和像素亮度范围一致)将图1(b)转换到HSV颜色空间后,用calcHist函数统计图1(b)中每一对(H,S)值对应的像素个数;不统计黑色(即H=S=0)区域的像素,因为它们不是黄色车道线像素。然后用convertTo函数将像素个数值缩放到0~255范围内。以左上角为坐标原点,以饱和度S为水平轴,以色相H为竖直轴,以缩放后的数值作为对应(H,S)坐标处的数值,得到初始二维表(表中数据太多,不便直接显示)。由于表中的数值被缩放到0~255范围内,与灰度像素的灰度值范围相同,所以可以将初始二维表看做是一张灰度图片的mat格式矩阵,以图片格式显示出来的结果如图2所示[6]。为了方便打印,图中像素点的黑色程度代表该像素的灰度值,像素点越黑,灰度值越大;以下各图的处理方式与图2相同。

由图2可知,灰度值非0的像素大部分分布在H为15~30、S为30~105范围内。其他范围内灰度值为0,说明在这些范围内的每对(H,S)值在图1(b)中对应的像素个数为0(H=S=0的像素除外)。图2中某像素越黑,说明该像素对应的(H,S)值在图1(b)中对应的像素个数越多,则该对(H,S)属于黄色车道线特征的概率越大。

有了初始二维表,就可以将其用于后面的查表操作。之所以将其称作初始二维表是因为该表是不断更新的。当用初始二维表检测出黄色车道线后,用检测出的黄色车道线替换掉图1(b)中的车道线,得到新的二维表;不断地更新二维表可以使查表结果图(图4)中的干扰像素更少,使检测过程更快速准确。

2 H-S二维表查找

选择一张目标照片如图3所示,可看出照片中的干扰。

先用cvtColor函数将彩色目标照片1(图3)转换到HSV空间,再用OpenCV中的lut函数对图3中的每个像素按照(H,S)分量值在初始二维表(图2)中进行查表操作,查表后得到一张灰度图,如图4所示。

由图4可知,运用查表法,无论是在教学楼阴影中的黄色车道线还是在阳光下的车道线都能被顺利检测出来;查表法能滤除大部分非黄色干扰像素。但是对于显示为黄色的干扰像素(人体外露的黄色胳膊和小腿皮肤、法国梧桐树干下端表皮脱落露出的黄色内皮、黄色树叶、黄色落叶以及在阳光下反射淡黄色光的柏油路面),查表法无法滤除;因此需要利用车道线的边缘特征来滤除余下的干扰像素。

3 车道线边缘特征像素检测

黄色车道线的边缘像素连线是一条倾斜的直线,这一特征是其他黄色干扰像素所不具备的,利用这一特征可以滤除这些黄色干扰像素。

各种斜率的道路右侧车道线(道路左侧车道线类同)的模拟放大图如图5所示,即以未经过消除锯齿处理的直线放大后的边缘模拟实际车道线的边缘,达到清楚显示车道线边缘特征的目的。检测车道线的目的是获得车道线的数学方程,因此只需要检测出车道线上能反映其形状特征的那一部分像素即可,无需检测出车道线上的所有像素。选择道路右侧车道线的左边缘像素和道路左侧车道线的右边缘像素为待检测目标像素,这样检测出的车道更窄,更有利于车辆偏离车道预警控制。

对于图5中保留锯齿的模拟道路右侧车道线,待检测目标像素为车道线的左边缘锯齿尖像素,因为锯齿尖像素特征最为明显,最易区分。将以锯齿尖像素为中心的9个像素(3×3,编号1~9,锯齿尖编号为5)局部放大并显示在图5中。由图可知,不论右侧车道线斜率多大,其左边缘以锯齿尖像素为中心的9个像素的亮度分布具有相同的特征:编号2、编号3、编号6这3个像素的亮度均比编号4、编号7、编号8这3个像素大了许多(命名为特征①)。利用这一特征来检测道路右侧车道线左边缘锯齿尖像素和道路左侧车道线右边缘锯齿尖像素。

用于检测出锯齿尖像素的原图可选择目标照片的查表结果图(图4)或者其在HSV空间的S或V分量图(H分量图中车道线在阳光下的部分不可见,所以不能选H分量图)(图6)。由图4和图6中的部分车道线边缘放大图可知,边缘锯齿特征最明显且最满足特征①的是V分量图,选择从V分量图中检测出锯齿尖像素。

为了提高检测速度,采用在前面识别出的黄色特征像素点内部检测出具有直线边缘特征(特征①)的像素点。对于查表结果图中每个不为0的像素点,找到与它位置相同的在V分量图中的像素点a;在V分量图中以像素点a为编号5像素,考察其周围的8个像素亮度分布情况(图5中的放大图),如果编号2、编号3、编号6这3个像素的最小亮度比编号4、编号7、编号8这3个像素的最大亮度大10(之所以取10,是因为经对比分析,亮度差值小于10的分界线,人眼基本无法区分),就认为这个像素是目标像素并将其像素值设为255,否则设为0;二值化后的检测结果如图7所示。

4 像素灰度值按位与运算

在图7中,虽然检测出了黄色车道线边缘,但是也保留了白色车道线和白色人行横道线的边缘干扰像素。在多数情况下,经过黄色特征提取和直线边缘特征提取后,均能成功检测出黄色车道线像素。但对于夕阳照射下柏油路面,由于白色线为无色,柏油路面显示淡黄色,导致白色线与柏油路面的交接处既具有黄色特征也具有直线边缘特征,从而被检测算法误认为是黄色车道线而被检测出来。为了滤除此类干扰,可以将检测出来的锯齿尖像素(图7)向车道线中心方向水平移动(右边车道线检测算法向右移,左边车道线检测算法向左移)4个像素的距离,然后再与查表结果图(图4)作与运算;由于查表结果图中白色车道线和人行横道线内部像素灰度值为0,而黄色车道线内部像素灰度值不为0,与运算便滤除了白色车道线和人行横道线的边缘干扰像素。图7中的非0像素水平移动4个像素后的结果与图7类似,不再给出。

此处的与运算是指按位与运算。如果水平移动4个像素后的结果图(图7)像素灰度值为255,二进制表示1111 1111,那么查表结果图(图4)中相应位置的像素灰度值与其作按位与运算后结果不变;如果其像素灰度值为0,二进制表示0000 0000,那么查表结果图(图4)中相应位置的像素灰度值与其作按位与运算后结果为0。与运算的结果图二值化后如图8所示。

由图8可知,与运算不但滤除了白色车道线和人行横道线边缘干扰,还滤除了其他大部分干扰像素,只保留少量的孤立干扰像素点。

5 孤立点清除

通过霍夫变换来得到车道线方程的参数,霍夫变换涉及到坐标空间变换,耗时很长,为了缩短霍夫变换的运算时间,图8中剩下的干扰像素点越少越好;因此,有必要滤除图8中的少量孤立干扰像素点。

若以一个灰度值大于0的像素点为中心,以5个像素长度为边长的5×5正方形区域内没有其他非0像素(除了它自身),则称此像素点为孤立点,如图9所示。

将图8放大后发现其中的干扰像素大部分为孤立点,而车道线像素大部分为非孤立点;根据这一区别可滤除孤立点干扰。具体算法是,对于图8中的每个非0像素点a检查其周围5×5区域内的24个像素点的灰度值,若这24个像素的灰度值均为0,则令a为0;否则a值不变。算法运行后的结果如图10所示。

由图10可知,经过孤立点清除运算后,不仅清除了大部分孤立的干扰像素点,还保留了黄色车道线像素。

6 霍夫变换

在仅存在极少量干扰像素时,使用OpenCV函数库中的HoughLinesP函数来检测黄色车道线的参数,不仅精度高而且耗时少[2]。可以将该函数的threshold参数设定为较小值,经过多次比较存在各种干扰情况的threshold最佳设定值,特取threshold=10,即图9中在同一条直线上的像素点数量大于10时才能检测到该直线。检测结果以蓝色显示在原图中,并以白色显示在黑色背景图中,如图10所示。霍夫变换结果如图11所示。

7 验 证

为验证黄色车道线检测算法具有普适性,需要在其他目标照片上进行验证。验证结果如图12和图13所示。

图12和图13分别是在校园两条路上的验证结果图,图中均准确检测出了黄色车道线而且滤除了其他所有干扰像素;但是两图中都仅仅检测出了离相机较近的几段黄色车道线,未能检测出照片中远处的车道线。这是因为较远处的黄色车道线经相机处理转换为照片后,其像素的黄色特征很不明显,甚至不再显示为黄色。这样的检测结果并不影响智能车辆的自动化行驶,因为车道线的检测结果会随着车辆的前行不断更新。

8 结 论

经过试验验证可知,算法具有很好的普遍适用性。在实时性方面,检测算法首先采用快速方便的查表法滤除大部分干扰像素,其后的每一步操作都是在查表结果图上亮度非零的像素点上进行,参与计算的干扰像素点数量大大减少,检测速度得到很大优化,保证了算法的实时性。

[1]白冰洁,韩峻峰,潘盛辉,等. 基于双阈值分割的车道线检测方法[J]. 信息技术,2013(3):43-45.

[2]金辉,吴乐林,陈慧岩,等. 结构化道路车道线识别的一种改进算法[J]. 北京理工大学学报,2007,27(6):501-505.

[3]马小龙. 基于视觉的复杂光照条件下的车道检测及识别[D]. 成都:电子科技大学,2013.

[4]张远. 基于车道线边缘及分布特征的车道线识别算法研究与实现[D]. 沈阳:东北大学,2010.

[5]毛星云. OpenCV入门教程[EB/OL]. [2016-09-01]. http://blog.csdn.net/zhmxy555/article/category/1923021.

[6]毛星云,冷雪飞,王碧辉,等. OpenCV3编程入门[M]. 北京:电子工业出版社,2015.

[7]张博峰. 基于机器视觉的自主无人车道路识别研究[D]. 西安:西安工业大学,2014.

1002-4581(2017)03-0014-06

U491.5+23

A

10.14175/j.issn.1002-4581.2017.03.004

安徽省科技重大专项(15czz02039)。

猜你喜欢
像素点灰度车道
采用改进导重法的拓扑结构灰度单元过滤技术
基于OpenCV的直道车道线识别技术研究
北斗+手机实现车道级导航应用
图像二值化处理硬件加速引擎的设计
天津港智慧工作平台灰度发布系统和流程设计
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
基于局部相似性的特征匹配筛选算法
Arduino小车巡线程序的灰度阈值优化方案
基于单片机的潮汐车道设计与实现
一种X射线图像白点噪声去除算法