0 引言
基于计算机视觉的高速公路防撞系统是当前智能交通管理系统研究的热点之一。如何在多变的环境下快速准确地从视频图像里检测到车道和前方车辆是实现这类系统面临的最关键问题。近20年来,国内外很多研究人员对这个问题进行了大量研究,提出了多种多样的实用算法并成功开发了一些视觉系统。这些系统所采用的算法基本上可以分为基于双目视觉的方法、基于运动的方法、基于外形的方法和基于知识的方法。基于双目立体视觉的方法计算量大,需要特殊硬件支持;基于运动的方法,无法检测静止目标且实时性差;基于外形的方法,因建立有效的培训样本仍然是需要研究的问题;基于知识的方法,在障碍物数量较少时效率较高,但复杂环境下错误率有所增加。
针对常规算法的不足,本文设计了一种精度高,稳定性好的基于单目视觉的车载追尾预警系统。它利用一种新的边缘检测算法识别前方道路,然后利用阴影检测与跟踪相结合的方法识别前方车辆,接下来根据前后车距判断其威胁等级,最终向驾驶员提供相应的声光报警信号。
1 系统工作原理
系统硬件部分包括MCC-4060型CCD摄像机、VT-121视频采集卡、GPS、PC-104工控机和显示终端。GPS通过串口向工控机发送本车车速信息,安装在车内挡风玻璃后的CCD摄像机将图像帧通过视频采集卡送入工控机,经过软件的处理分析后,在显示终端上标注出前车障碍物和道路标线,同时根据车速、间距等判断危险等级,发出相应的声光报警信号;
系统的软件部分包括道路检测、道路跟踪、车辆检测、车辆跟踪、测距、决策和报警等模块。当车速达到60km/h时,系统开始处理实时采集到的图像序列。对于每一帧图像,首先检测并跟踪图像中的车道白线,然后在车道确定的感兴趣区域内检测车辆。如果存在疑似障碍车辆,则启动车辆跟踪,利用跟踪信息进一步排除虚警。在实现对障碍车辆稳定跟踪后,估算出两车间距和相对运动速度,判定其威胁等级,并发出相应的报警信号。
2 系统关键技术
2.1 道路检测
目前,车道线检测算法主要适用于光照充足的环境下。由于车道线与路面之间对比度大,因此很容易利用各种常规边缘检测算子获得清晰的车道轮廓信息,然后选取合适的阈值对图像进行二值化处理,最后采用Hough变换识别车道线。然而在复杂光照环境下,图像会受到各种光线直射和物体多次反射形成杂散光的干扰,图像光强不能反映车道本身突变性质,导致无法正确检测出车道。
本系统采用了一种利用光密度差得到车道标线与路面反射率差,进而进行非线性边缘检测,再进行Hough变换的车道检测算法。此算法可以有效解决在复杂光照条件下的车道检测,也可以用于夜间的车道检测。
另外,目前车道线的跟踪研究主要采用固定区域法或者Kalman滤波法,根据前一帧车道线检测的结果来划分感兴趣区域,以实时跟踪车道线。然而,固定区域法对2帧图像的相关性依赖大,划分感兴趣区域大,实时性差;而Kalman滤波法划分感兴趣区域小,容易产生检测误差,而造成跟踪误差累积,跟踪正确率不高。因此,本系统在跟踪车道线时采用了一种融合固定区域法和KaIman滤波法划分感兴趣区域的新方法。
一般来说,只将车道边界线交点(即灭点)以下、2车道线之间的区域作为感兴趣区域,考虑到跨道行驶的车辆依然对本车有威胁,算法把两车道线分别向两侧平移40个像素,使感兴趣区域扩展到可以覆盖跨道车辆的范围。
2.2 车辆检测
图像中包含车辆前方很大视野内的物体,如道路、树木、护栏、标牌以及其他车辆,要从中准确检测出前方车辆是一项困难的工作,而本文的车辆检测模块会根据图像背景自动改变设置参数,以适应不断变化的道路场景和光照条件。
要实现车辆的快速检测,首先需要根据车辆的基本特征进行初步检测,将所有可能的疑似车辆区域从图像中提取出来,然后再根据其他特征对疑似区域进行筛选排除。
2.2.1 车辆初步检测
初步检测采用的特征是车辆阴影,即一块位于目标车辆底部、灰度值明显比附近路面区域低的区域。在一般环境条件下,大部分车辆都具有这一显著特征。
车辆初步检测的流程如图1所示。车辆阴影和车道一样具有灰度突变的特点,因此可以调用车道检测算法对图2(a)中的原始图像做二值化处理,得到图2(b)中的边缘二值化图像。同时还要对原始图像进行灰度二值化,得到图2(c)中的灰度二值化图像。为提高检测实时性,以本车附近路面区域的平均灰度作为二值化阈值。由于边缘二值化图像和灰度二值化图像都包括了车辆的下底边,将这两幅图像进行“或”运算,就可以得到如图2(d)所示的车辆阴影图像。
在阴影图像中由下至上逐行搜索,寻找连续阴影点超过一定阈值的线段,并以此线段为底边划出一个矩形区域作为疑似车辆区域。为保证疑似区域包含车辆整体,矩形的宽度比线段稍宽,高度由宽度按比例给出。为避免重复搜索,将已搜索到的疑似区域内阴影完全抹去。由于同一车辆的各个部分可能分别被检测为疑似目标,因此还需要对各个相交的疑似区域进行合并。由于前方车辆的遮挡,可能会将多个目标认定为一个目标,但是对本车的安全无影响。
2.2.2 筛选验证
如果单纯采用阴影特征进行车辆检测,在保证较低“漏警”率的同时,也造成了较高的“虚警”率,因此还需要对疑似区域进行筛选和验证。
对于结构化道路,车辆宽度与车道宽度的比值应该是大致固定的,那么当摄像机的焦距、俯仰角等参数固定后,图像上车道宽度(像素数)与车辆宽度(像素数)也满足这个比例。根据之前检测的车道方程,就可以计算出感兴趣区域内任意纵坐标上车辆图像宽度的范围,并剔除宽度不在此范围内的疑似区域。
在以往的车辆验证方法中,最常用的是对称性测度验证。这种算法的计算量较大,且对于背景复杂,对称度差图像的验证效果不尽人意。为了解决这个问题,该系统采用了一种基于边缘二值化图像,通过搜索车辆左右边缘进行验证的算法。
假设疑似区域的宽度为W,区域左边缘的坐标为(X1,Y1),右边缘的水平坐标为(X2,Y2)。定义函数:
式中:f(x,y)为(x,y)点的灰度值。在区间(X1-W/4,X1+W/4)内搜索g(u)的最大值点,该点对应的水平坐标X1’就是车辆的左边缘坐标。同理也可以搜索到车辆的右边缘X2’。如果左右边缘的g(u)值均大于某阈值,那么就可以认定该车辆确实存在。实验证明,该算法能排除掉大量的“虚警”区域并得到真实车辆的两侧边缘。
2.3 车辆跟踪
现关心的是前方车辆与本车相对的二维位置和速度,因此只需要使用卡尔曼滤波器预测横坐标x、横向速度Vx、纵坐标y、纵向坐标Vy这四个状态向量。此外由于x方向和y方向的状态向量没有直接联系,所以可以将其分为两组分别处理。
在车辆行驶过程中,由于颠簸或遮挡等原因,系统可能会将路牌、灌木丛等物体误认为是车辆检测出来,产生虚警。而这些虚警物体往往只能在连续数帧图像中存在。如果不采取措施,系统就会时常产生短促的报警。
当图像采样间隔足够短时,相邻帧内同一车辆的位置会具有很大的相关性。
系统采用检测与跟踪相结合的方法,根据第n帧图像获得的信息,预测车辆在第n+1帧图像中的位置等信息,并与n+1帧图像中实际检测到的结果进行比对。如果二者匹配度最大且超出一定值,则认定为同一车辆,继续进行跟踪、报警,否则认为此车已被遮挡或消失,暂时不做处理,数帧后被剔除出去。
2.4 测距报警
车间测距通常采用几何投影模型,采用了一种简化的车距模型公式L×W=C,其中L为两车间距,单位为m;W为图像上目标车辆处车道宽度,单位为pixel;C为常数,可通过事先的标定获得。然而两车间安全车距S采用文献推导的临界安全车距公式动态得到。
式中:Vr为相对车速,由对测出车距求导得到相对车速后进行卡尔曼滤波得到;Vb为本车车速,由GPS得到。
如果告警频率过高,容易使驾驶员麻痹大意,过低可能使驾驶员来不及做出反应,因此该系统采用由远至近的三段报警。
若车距d≥1.5S,判定为3级威胁,发出长而缓的报警声,提醒驾驶员前方有障碍物,但暂无危险;若车距S≤d≤1.5S,判定为2级威胁,发出较急促的报警声,提醒驾驶员减速;若车距d≤S,判定为1级威胁,发出短而急的报警声,提醒驾驶员制动;3种状态下的告警声差异很大,驾驶员可以很容易地根据报警声判断威胁等级。
3 试验结果
系统框架及所有算法在Boiland C++ Builder 6环境下编译完成。为了验证系统算法的可靠性和实时性,利用在合肥市环城高速公路上采集不同车型、不同路段、不同环境光下多组道路图像作为测试序列,进行了大量实验。
图3为典型道路场景下的实验结果,图3(a)为大型卡车;(b)为小型面包车;(c)为远距离处;(d)为近距离处的检测结果。系统将检测到的目标用黑框标记出来。
可以看出,系统能够检测到本车道内不同距离上的各种车型车辆。在高速公路上的实验结果表明,在最大车速100 km/h的情况下,系统在Celeron M 600 MHz处理器上的处理速度为8 j/s左右,也就是说处理一帧图像的时间内车辆行驶3~4 m,基本满足实时报警的要求。在一般光照条件下,系统正常报警的纵向距离超过200 m,视场角远远大于雷达(一般为±7°)。
为了验证单目视觉测距准确性,在市内道路上采集了前车与本车距离从5~100 m的一组图像。对采集的图像进行处理后,根据公式推导出本车与前车距离以及实际距离见表1。表中数据显示,单目视觉测距的相对误差都在5%以内,可以满足实际工作中测距告警的需要。
4 结语
本文设计了一个基于单目视觉的汽车追尾预警系统。该系统采用了一种基于光密度差的道路检测算法,并使用了一种以车辆阴影检测为主、左右边缘检测为辅的车辆探测方法,同时采用了简单、实用的测距和报警方法。高速公路上的实验结果证明了该系统的实时性、鲁棒性和准确性。该系统目前还没有在雨雾天气或缺少照明的夜间环境下进行试验,未来我们将针对这些使用环境对系统做进一步改进和优化。