第1章 绪论
1.1 课题研究的背景和意义
随着城市化的发展和汽车的普及,交通环境日趋恶劣,交通拥挤加剧,交通事故频发,交通问题已经成为全球范围内人们普遍关注的社会问题。近年来,为解决交通问题世界各国都竞相开展智能车路系统和智能交通系统等领域的研究。智能系统的发展为改善交通环境状况,提高车辆行驶的安全性与可靠性,减少驾驶员人为因素造成的交通事故等开辟了广阔的前景。随之,智能车辆导航(Intelligent Vehicle Guidance)的概念应运而生。基于视觉的智能车辆导航可追溯到19世纪70年代初期的移动机器人研究,但由于当时的硬件水平还比较低,而图像处理的计算量非常大,研究者的精力也就过多地耗费在硬件平台的设计、实现和测试上。但随着计算机硬件水平的飞速发展,该问题得到了很好的解决。在智能车辆导航诸多复杂且具有挑战性的任务中,最受重视之一的是基于视觉的道路检测问题。
从理论上分析,在道路检测中,要获得道路环境的三维信息,需要采用双目或多目立体视觉系统[1]。但是,双目或多目立体视觉系统在实际应用中所需计算量很大,而且双目或多目立体视觉系统在视觉匹配问题上很难解决,而智能车辆在较高速度下的图像处理速度比一般情况下要高,目前的微处理器计算能力还不能完全满足其实时性的要求,所以目前双目或多目立体视觉系统还不适合在较高速度下智能车辆视觉导航中应用。当前,智能车辆视觉系统主要是获取道路平面的二维路径信息,而道路中的其它车辆和障碍物信息可以通过视觉系统、激光雷达测距仪及避障传感器系统进行信息融合得到。这就极大的提高了信息获取的可靠性,所以单目视觉系统仍然能够满足较高速度情况下视觉导航的要求。实际上,世界范围内大多数智能车辆视觉导航系统都采用单目视觉来获取道路环境信息。在单目或多目视觉导航系统中最为关键的技术就是计算机视觉。计算机视觉的主要任务是完成道路的识别和跟踪,对于信息采集处理的实时性、行驶过程控制的鲁棒性以及自主运行决策的可行性都有很高的要求。这些要求就使所设计的系统必须在理论算法上给予强大的支持,针对计算机视觉部分就是要有实时高效的图像处理算法。
对基于视觉的车道线识别研究意义在于能实现智能车辆乃至机器人的自主导航,提高驾驶的安全性,改善交通环境和驾驶的舒适性。识别技术用于车辆的路径偏离预警系统,大部分由于车辆偏离车道造成的事故可以避免。用于驾驶员预警系统同样具有重要意义。其次,识别技术可以用来提高智能巡航控制中跟踪引导车辆的精度。最后,识别技术可广泛应用于公路、码头、仓库等的自动运输系统中,实现车辆运输的自动化。
1.2 国内外研究现状
目前为止,国内外智能车辆无一例外地使用机器视觉作为其重要的感知方式,基于计算机视觉系统的导航技术具有价格低廉、结构简单、方便与其他传感器进行数据融合等优点,所以利用机器视觉识别公路上的车道线实现自主导航是现阶段智能车辆常用的方法。该方法己经被实际系统证明是最有效的外部环境感知方式,道路的识别是视觉导航的关键技术,因其较大的复杂性和挑战性而备受关注。
一部分学者致力于用多目视觉技术来解决这个问题。德国学者利用立体视觉方法来提高系统的鲁棒性,可是,多目视觉中存在一个无法回避的难题是图像匹配的实时性问题。日本通过当前图像与参考图像之间像素的迅速匹配,解决了巨大运算量的实时处理的困难。与此同时,许多学者试图用单目技术来实现道路检测,而且目前也已经取得了丰富的成果。其中法国学者提出一种视觉方法,仅利用一台摄像机得到路面的信息,就能够正确地跟踪有路标和无路标情况下的道路。该方法从图像中提取出道路的边缘特征,定位机器所在车道的位置,再采用车道的统计模型进行精确匹配,结果较为准确。美国也采用单目摄像机,通过图像序列测取道路环境的信息。
目前基于视觉导航的智能车辆[2]中比较有成效的是:美国Carnegie Mellon University研制的Navlab系列智能车,可识别和跟踪S形曲线和道路行车线,平均速度达到88.5km/h;日本丰田公司1993年研制的智能车,安装了2/3英寸CCD镜头,普通高速公路上的实验车速为60km/h;德国的UBM大学研制了装有4个彩色CCD构成双目视觉系统跟踪车道白线、避障和自动超车;法国帕斯卡大学与雪铁龙技术中心合作研究的Peugeot智能车,能判别引导线是否漏检或丢失,车速达130km/h;清华大学研制的THMR智能车辆系统集成了二维彩色摄像机、GPS、超声等传感器,系统可完成白线跟踪、路标识别、道路识别等任务;吉林大学智能车辆课题组研制的视觉导航的智能车辆实现了对路面铺设的条带状路标的视觉识别以及车辆自主导航的功能。
1.3 论文的研究内容
当智能车辆在公路高速行驶,视觉系统作为最重要的感知手段之一时,图像在识别外界信息中扮演着重要角色,如何通过图像提取车道线,目前有许多算法,例如像素扫描、模板匹配、霍夫变换和边缘跟踪等常用的车道线边缘像素提取方法,其中像素扫描是普遍采用的一种提取方法,具有灵活、高效、抗干扰能力强的特点。
在研究不同的算法在道路图像的应用过程中,图像的预处理至关重要。首先对一些图像的预处理算法,如图像灰度化、图像滤波、图像边缘增强等,用MATLAB进行仿真,比较它们的处理结果。因为不同的预处理方法影响检测的实时性和正确性,其中为了更多的利用彩色图像提供的车道标记线和沥青路面色彩的信息,本设计用彩色通道提取法得到灰度化图像。由于实际情况复杂多变,如遇到雨、雪天气,因此加入椒盐噪声模拟实际情况,并用各种常用的滤波模板处理图像。从处理后图像再现清晰度的效果中,选出最优的滤波方法。一般获得的道路图像中包含的信息都有车道线和路面两种信息,而由于车道线作为图像中的一种边缘,根据边缘的属性,可以用差分算子将边缘检测出来。通过对常见的差分检测算子和自定义的差分算子比较,可以看出后者更能增强车道线标记部分。在图像边缘增强后,不仅车道线得到了增强,许多树木、行人、车辆等也得到了增强,由此增加了许多虚假的边界。为获得更准确的车道线边界,本设计用融合边缘和区域信息的方法定位车道线,并且与自适应二值化图像比较,可以看出前者克服虚假边界的能力更强。最后,建立并提取车道线模型是最为关键的部分,本设计假设在结构化道路上,智能车辆仅采集的是前方不远处的道路图像,提出直线型车道线模型,而且该模型计算量小,在一定程度上能适应车辆在高速行驶过程中对实时性的要求。基于直线型车道线的假设,在图像中提取特征直线时,用hough变换及其改进的算法和中值截距法进行提取。通过比较,改进的hough变换——随机hough变换实时性最好,并且对其它图像进行检测,一定程度上随机hough变换的鲁棒性也符合要求。
第2章 单目视觉系统
2.1 引言
为了准确识别道路环境,视觉导航系统理应获得车辆前方道路的三维信息,包括车辆与道路的位置关系和道路中障碍物信息。要正确的理解三维世界环境,理论上应该采用双目或者多目视觉系统,但从立体视觉的角度来解决环境重建问题,因为从现有的研究结果来看,直接通过对图像进行三维恢复获取环境信息有以下几个方面的困难:首先,计算量巨大。其次,匹配点寻找困难。另外,遮挡问题。例如,左右视野的部分场景不匹配、左右视野环境光的不同都使得户外环境下的基于像素的视野景物深度恢复困难重重,如今的立体视觉研究者多数简化了这些不利因素的影响。即使这样,双目或者多目视觉系统需要的计算量仍是比较大的,目前计算机的计算能力还不足以满足车辆导航系统的实时性要求,因此双目或者多目视觉系统一般用于复杂、未知环境下低速行驶的智能车辆,并且双目或者多目视觉系统也会提高系统成本。对于道路检测来说,需要获得道路方向和车辆与道路的位置关系,也没有必要一定要完全理解整个三维世界环境。目前基于视觉导航的智能车辆多采用单目视觉系统完成道路检测及跟踪,而采用多目视觉系统完成道路上的障碍物检测。当采用单目视觉系统检测道路时,由于从三维的世界环境转换到图像的二维信息,在这个转换过程中,损失了三维环境中的深度信息,而且这个过程是不可逆的。通常为了从单目视觉系统中获得道路的三维信息,对此提出了一些合理的假设,如道路平坦假设、道路边缘连续性假设、道路模型假设等。从国内外实验情况来看,采用了一些合理假设后,单目视觉系统进行道路检测是可行的。
2.2 单目视觉导航系统成像模型
为了得到图像中的像素和实际道路区域点的对应关系,必须知道二维图像信息和三维世界信息的关系模型。由于单目视觉系统损失了三维世界中的深度信息,这个过程是不可逆的,在实际应用中,根据需要作了一些假设和已知一定的信息,从而从二维图像中估计出三维的道路信息。具体的做法如下:假设车辆前方的道路是平坦的,设定摄像机的安装位置固定(安装的高度、俯视角、偏离角),摄像机的固有参数为常数(摄像机焦距、孔径张角)。由于在道路检测的过程中,只需要得到道路延伸方向、车辆的偏移距离,并不需要将道路的三维信息完全恢复,以上的假设是可以满足实际需要的。在摄像机成像几何模型中最常用最简单的是线性模型——针孔模型[3]。下面就摄像机成像模型进行介绍。
摄像机成像的实质是将三维道路场景信息变换成二维图像信息,这个变换可以用一个从三维空间(3D)到二维空间(2D)的映射如式(2-1):
来表示。上述的这种映射关系可以用透视投影针孔成像模型来近似解释。透视投影成像模型的特点是所有来自场景的光线均通过一个投影中心,它对应于透视的中心。图2-1(a)中经过投影中心
且垂直于图像平面的直线为摄像机光轴
,
为世界坐标系,
为图像平面坐标系,f为摄像机焦距。由几何关系可知,世界坐标系中的点
经投影中心
点在图像平面坐标系中的投影点为
,可以看出其成像是倒立的。为了避免这种倒立图像,现在假定图像平面位于
轴正半轴且与投影中心
的垂直距离为焦距
处,此时点
经投影中心
点在图像平面坐标系中的投影点为
,如图2-1(b)所示,可以看出
位于点
和点
之间,其投影大小与
完全相同,但是此时为正立的投影图像,这种现象在计算机视觉中也称为视网膜成像。
(a) 透视投影倒立成像图 (b) 透视投影倒立成像图
图2-1 透视投影图像
由于这种成像模型最简单,计算量小,在作了一些假设之后,适应于实际情况,因此本设计将单视目成像的针孔模型作为二维图像信息和三维世界信息的关系模型。
由图2-1(a)或图2-1(b)均可以得到
点与其在图像平面上的投影点
或
的映射关系,由图中几何关系可以得到透视投影方程式(2-2)所示:
即世界坐标系中
点与其在图像平面上投影点
或
的映射关系如式(2-3)所示:
2.3 本章小结
本章简单介绍了两种道路信息的获得方法,即采用双目或多目视觉系统和采用单目视觉系统。由于单视目系统在实时性,系统成本上优于前者,所以目前常用的是单视目导航系统。从三维世界坐标得到二维图像坐标的方法中,简要讨论了单目视觉系统中最简单、常用的成像几何模型——针孔模型,由于在实际应用中,一些假设和已知一定信息的存在,该模型应用在车道线识别中是可行的。
3.1 引言
智能车辆视觉系统完成图像采集后,需要对获取的图像进行各种处理与识别。而视觉系统在图像的生成、采样、量化、传输、变换等过程中,由于CCD传感器的噪声、随机大气湍流、光学系统的失真等原因会造成CCD摄像机成像质量的降低。另外,由于车辆行驶时视觉系统与道路环境之间存在相对运动,输出图像的质量也会降低,常产生运动模糊等现象。为了改善视觉系统图像的质量,需要突出道路图像中的有用信息并尽可能消除其它环境信息的干扰,因此需要对原始图像进行图像的预处理操作。
图像预处理是指按特定的需要突出一幅图像的某些信息,同时,削弱或去除某些不需要的信息的处理方法。其目的是使处理后的图像对于某种特定的应用,比原始图像更便于人和机器对图像的理解和分析。
3.2 道路图像灰度化
大部分道路图像是通过彩色COMS图像传感器采集的,原始图像为彩色图像。其中颜色模型为RGB模型,图像中的任何颜色都是通过红(Red)、蓝(Green)、绿(Blue)三种基本颜色按照不同的比例混合得到的。在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值。因此,灰度图像每个像素只需一个字节存放灰度值,一般将白色的灰度值定义为255,黑色的灰度值定义为0,而由黑到白之间的明亮度均匀的划分为256个等级。在道路图像提取车道线过程中,很多算法没有利用图像的彩色信息而是将其灰度化。虽然,灰度化图像无可避免的丢失一些信息,但是对灰度图像的处理,从其存放方式可以看出速度相对较快。而对彩色图像的处理,就是分别对三个分量处理,可见速度相对较慢。于是将彩色图像转换为灰度图像,下面就常用的四种方法[4]进行介绍。
3.2.1 常用的灰度化方法
(1)分量法
将彩色图像中三个分量的亮度分别作为三个灰度图像的灰度值如式(3-1)所示,可根据需要选取一种灰度图像。
其中
为转换后的灰度图像在
处的灰度值。
(2)最大值法
将彩色图像中三个分量亮度的最大值,作为灰度图像的灰度值如式(3-2)所示。
(3)平均值法
将彩色图像中三个分量的亮度求平均,得到一个灰度图像如式(3-3)所示。
(4)加权平均法
根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感度最高,对蓝色敏感度最低,因此,按式(3-4)对RGB三分量进行加权平均能得到亮度较合理的灰度图像。
用MATLAB对分量法、最大值法、平均值法、加权平均法四种常用灰度化方法,对一幅道路图像进行仿真,结果如图3-1、图3-2:
通过图3-2图像灰度化的结果可以看出:在处理道路图像时,平均值灰度化彩色图像效果最差,因为图像大部分区域是路面,灰度化后,道路标记线被弱化。其它看来,感觉差别不大,原因在于所选图像的色彩差别不是很大,选用色彩差别明显的图像,可以看出加权平均法混合后可以得到更符合人类视觉的灰度值。由于篇幅有限,这里不再用其它图像说明。
通过方法的介绍可以看出,以上的灰度化方法,并没有更多的利用彩色图像提供的色彩信息,而是大致通用的一些方法,没有考虑到图像的特征。本设计采用的是下面一种彩色通道提取[5]的方法。
3.2.2 彩色通道提取灰度化
彩色通道提取的主要目的是根据车道标志线的色彩信息,提取一定的颜色通道,形成突出车道标志线块状结构的灰度图像。车道标志线一般为黄色或白色,而路面多为沥青表面。在彩色图像中车道标志线上的点成像后,其R和G通道的颜色值相对大于B通道,而沥青表面的成像以灰色为主,其RGB三通道的颜色比较平均而且相对较小。因此试图通过提取R、G通道的方法突出车道标志线的块状结构是可行的。
为了从提取的通道合成灰度图像,在此将R、G通道的颜色值相加。具体是R、G通道颜色值之和在一定的阈值之上的像素点直接取灰度最大值255。而低于这个阈值的像素点,则被弱化。其在灰度图像中的像素值取(R+G)/2。综上所述,其变换原理如式(3-5):
式中,C——阈值;
R——像素颜色值的Red分量;
G——像素颜色值的Green分量。
从式(3-5)中可以看出,对于R、G通道颜色值较大的车道边缘点在灰度图像中其灰度值得到强化。而对于R、G通道颜色值较小的沥青路面其灰度值将被弱化。从而经过R+G处理后,得到的是车道边界强化的灰度图像。对于阈值C的选取,目前没有固定的方法,本设计的做法是,在车辆采集到的图像下方取一块条形区域,搜索B通道相对大的像素点,并计算出它们平均的(R+G)/2值,把该值作为整个图像处理时的阈值,使整个图像尤其是远方的车道线得到增强。用MATLAB对彩色通道提取法对道路图像进行仿真如图3-3:
图3-3 彩色通道提取灰度化
从图3-3中可以看出,车道边缘部分在灰度图像中得到了有效的增强,由于255表示灰度图像中的白色,因此图中车道标记部分基本都被染成了白色,起到了增强边界的作用。本设计选用彩色通道提取的方法灰度化道路图像。
3.3 图像灰度变换
道路图像灰度化后,灰度值通常只是集中在某个范围,为使图像的动态范围加大,图像对比度扩展,清晰度提高,特征明显,进行图像灰度变换[6]是必要的。灰度变换可以是线性变换,也可以是非线性变换。
3.3.1 图像灰度线性变换
首先,介绍线性变换。使用一个线性单值函数,对图像中的每个像素点做线性扩展,将有效的改善图像的视觉效果,增强对比度,而且计算复杂度低,易于实现。基本原理如式(3-6):令原始图像
的灰度范围为[a,b],线性变换后的图像
的灰度范围为[a',b'],
和
之间存在下列关系:
另外一种情况,图像中大部分像素的灰度值在[a,b]范围内,少部分像素在小于a和大于b的区间。此时,可以做如式(3-7)所示的变换:
这种两端“截取式”的变换使小于灰度级a和大于灰度级b的像素强行压缩为a'和b',显然这样将会造成一部分信息的丢失。不过,有时为了某种特殊的应用,这种“牺牲”是值得的。道路图像的大部分信息是路面,可以预见灰度值集中在某个区间,进行该变换是具有实际意义的。但是在道路图像处理中,压缩区间范围的不确定性,没有得到很好的解决,因此该方法是今后进一步研究的重点。
3.3.2 图像灰度非线性变换
图像灰度非线性变换:原始图像
的灰度范围是[a,b],可以通过自然对数变换到区间[a',b']上如式(3-8),从而求得图像
:
这一变换扩展了输入图像的中低灰度区域的对比度,而压缩了高灰度值。由于道路图像大部分信息是路面,其灰度值主要集中在相对较高的范围内,所以采用此种方法,在处理道路图像时可以预见效果是比较差的。灰度变换法图像对比度增强的结果用MATLAB仿真如图3-4:
通过此例可以看出虽然灰度线性变换可以增强图像的对比度,但是对于一些道路图像增强效果是不明显的。根据图3-4道路图像灰度直方图的特点可以看出灰度值是集中分布但范围广,从0-255灰度级范围内均有对应的像素存在。因此若对直方图均衡化,可以预见图像对比度能够得到较大程度的增强。下面介绍直方图变换[7]。
3.3.3 基于直方图的灰度变换
直方图是表达一幅图像灰度级分布情况的统计图,表示出具有某一灰度的像素数,并不表示像素在图像的具体位置。直方图的横坐标是灰度,一般用
表示,对于数字图像信号,直方图的纵坐标是某一灰度值
的像素个数
。对于数字图像有如式(3-9)、式(3-10)所示关系:
式中,
——图像的第
级灰度值;
——图像中第
级灰度的像素个数;
——图像对应的总灰度级数。
直方图均衡化技术是通过变换将原图像的直方图调整为平坦的直方图,然后用此均衡的直方图校正原图像,增加图像灰度值的动态范围,从而达到增强图像整体对比度的效果。直方图均衡化增强了靠近直方图极大值附近的亮度的对比度,减少了极小值附近的对比度。变换函数如式(3-11):
其中
是变换函数。由于变换函数需要满足2个条件:
(1)
(2)
可以证明r的累积分布函数满足上述两个条件,能将r的分布转换为s的均匀分布。用MATLAB仿真直方图均衡化技术如图3-5:
通过此例可以发现,图像的灰度值在变换后概率分布由于得到了归一化均匀分布(在直方图中有明显的体现),图像的对比度得到了增强。在主观评价上,可以看出经过变换之后突出了原图像的细节,将使其具有更好的边缘检测效果。因此本设计采用直方图均衡化技术增强图像的对比度。
3.4 图像滤波
任何一幅未经处理的原始图像,都存在着一定程度的噪声干扰。噪声会恶化图像质量,使图像模糊,甚至淹没需要检测的特征,给图像的分析带来困难。在进行进一步的边缘检测、图像分割、特征提取、模式识别等处理之前,采用适当的方法尽量减少噪声的干扰就显的非常重要的。道路图像滤波[8]主要有两大类方法:一类方法是在图像空间域对图像进行各种滤波处理,即空域处理法;另一类方法是把空间域图像
经过正交变换,如经过傅立叶变换,得到频率域的变换图像
,在频率域进行各种滤波处理后得到频率域处理图像
。然后再变换到图像的空间域,形成处理后的图像,即频域处理法。显然,频域处理法附加了图像正交变换的正变换和反变换,对于数据量较大的二维道路图像需要较大的内存,且运算时间也较长,不能满足视觉系统实时处理的要求。因此,本设计采用空间域图像滤波处理方法。下面就常用的几种空域滤波算法进行介绍。
3.4.1 线性平滑滤波
图像平滑滤波处理分为线性滤波与非线性滤波,线性滤波方法提出较早且具有较完备的理论基础。针对线性滤波处理,本设计主要尝试了均值滤波、均值滤波是对图像进行局部均值运算,每一个像素值用其局部邻域内所有值的均值置换如式(3-12),即:
式中,
——滤波窗口;
——邻域
中的像素点数。
窗口在水平和垂直两个方向上都必须为奇数,否则图像会产生偏移。均值滤波器可以通过卷积模板的等权值卷积运算来实现,本设计采用了
、
、
、
模板进行滤波比较。该算法在去除麻点噪声方面比较有效,但它不能区分有效信号和噪声信号,噪声和图像细节同时被削弱。为了改善邻域平均法中图像细节模糊问题,提出了一些改进方法,如选择平均法和加权平均法,选择平均法只对灰度值相同或接近的像素进行平均,加权平均法则按照灰度值的特殊程度来确定对应像素的权值,模板中的权值并不相同,其数学表达式如式(3-13):
式中,
——对应像素需要加权的值。可以根据需要进行修正,为了使处理后的图像的平均灰度值不变,模板中的各个系数之和为1。虽然这种改进方法,可以在一定程度上改善细节模糊的问题,但是模板中的权值的确定,由于道路图像的多样性,复杂性而没有固定的算法,因此具有很大的局限性。
3.4.2 非线性平滑滤波
理论和实验证明,虽然线性滤波具有良好的抑制噪声能力,但是对图像平滑会造成图像中的细节信息损失,从而使处理后的图像产生模糊。所以本设计也尝试了采用非线性平滑滤波处理的方法—中值滤波,中值滤波是一种非线性的图像滤波方法,它于1971年由J.W.Jukey提出的,并首先应用于一维信号处理技术中,后来被二维图像处理技术所采用。中值滤波的基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像边缘细节,在一定条件下可以克服线性滤波所带来的图像细节模糊问题,同时在实际运算过程中并不需要图像的统计特征,也给计算带来不少方便,数学表示为式(3-14):
式中,
——当前点的邻域。
用MATLAB对加入椒盐噪声的图像应用平滑滤波法去噪,进行仿真如图3-6:
用MATLAB对加入椒盐噪声的图像应用中值滤波法去噪,进行仿真如图3-7:
对不同的滤波方法,如平滑滤波法、选择平均平滑滤波法、中值滤波法,分别用MATLAB进行仿真,结果如图3-8所示:
通过对比可以看出,平滑滤波的道路图像细节变得模糊,使用改进的选择平均法平滑滤波,使滤波图像得到了改善,但是针对不同道路图像灰度值相同或接近的概念不能明确化,具有一定的模糊性,需要进一步研究。而中值滤波,可以看出对图像边缘有保护作用,且去噪声的同时可以较好地保留边缘的锐度和图像的细节。显然,这一方法是比较适合本课题要求的,因为在后续的处理中我们将要提取物体的边缘特征,所以在去噪的同时较好地保留边缘的锐度和图像细节是难能可贵的。但在实际应用中,窗口大小选择要适宜,因为从图3-7中可以看出,随着窗口的扩大,也可能破坏了图像的某些细节,从仿真结果中以选择
模板中值滤波为宜。
3.5 图像边缘增强
道路图像滤波后,对要识别车道线来讲仍存在大量的无用信息。一般有白色标记的车道线对路面而言有较强的边缘,体现在灰度或纹理结构等信息。道路图像的边缘种类大致可以分为两种[9]:一种是阶跃性边缘,两边的像素灰度值有明显的不同,另一种是屋顶状边缘,它位于灰度值从增加到减少的转折点。由于CCD摄像机传感器具有低频特性,所以图像中的边缘灰度值的变化不是瞬间的,而是跨越一定距离的,图3-9分别给出了这两种边缘的示意图及相应的一阶方向导数和二阶方向导数。
图3-9 两种常见边缘一阶导数和二阶导数
基于边缘导数的特点,可以用微分算子检测出来,通常用一阶或二阶导数来检测边缘。如
,这几种边缘检测算子的共同特点都是以梯度为基础的,首先介绍图像梯度的概念。
3.5.1 图像的梯度和边缘检测算子
梯度算子[7]是一阶导数算子。对于一幅图像
,它的梯度定义为一个向量如式(3-15):
其幅值如式(3-16):
该向量的方向角为式(3-17):
数字图像的离散性,计算
时,常用差分来代替微分,为计算方便,常用小区域模板和图像卷积来近似计算梯度值。采用不同的模板计算
时可以产生不同的边缘检测算子。设图像的模板邻域如图3-10所示:
| | |
| | |
| | |
图3-10 图像的邻域
边缘检测算子用如图3-11所示模板,来近似计算图像
对
的偏导数:
图3-11
边缘检测算子
边缘检测算子用如图3-12所示模板,来近似计算图像
对
的偏导数:
图3-12
边缘检测算子
边缘检测算子用如图3-13所示模板,来近似计算图像
对
的偏导数:
-1 | 0 | 1 |
-1 | 0 | 1 |
-1 | 0 | 1 |
-1 | -1 | -1 |
0 | 0 | 0 |
1 | 1 | 1 |
图3-13
边缘检测算子
边缘检测算子是二阶导数算子,它是一个标量,无方向的,因而只需一个模板就行了。在进行二阶导数微分计算时,常用的两个模板如图3-14:
1 | 1 | 1 |
1 | -8 | 1 |
1 | 1 | 1 |
0 | 1 | 0 |
1 | -4 | 1 |
0 | 1 | 0 |
图3-14
边缘检测算子
考察了以往边缘检测算子的应用,发现尽管这些应用出现在不同的领域,但都有一些共同的要求,归纳为三条准则:好的检测结果,好的边缘定位精度,对同一个边缘有低的响应次数。根据这三条准则,
给出了三条准则的表达式,MATLAB中集成了上述边缘检测算子函数,仿真边缘检测图像如图3-15:
图3-15 传统差分算子检测
由实验结果可以看出:
边缘检测算子和
边缘检测算子因具有非各向同性而在检测45°的道路线方面有一定优势。
边缘检测算子计算相对简单,但图像处理后,车道线出现断点现象。考虑到
算子是利用水平和垂直两个方向的梯度阈值来检测道路边缘的,而道路图像中车道线与水平方向约成45°和135°,因此许多学者提出了针对车道线方向的模板,自设计差分算子。下面介绍两种自定义的差分模板。
3.5.2 自定义差分算子
针对道路图像中车道标志线具有向左和向右倾斜的特征,如果设计针对该方向的差分算子,可以预见比
算子更能增强车道线的位置。选用的两个差分算子[10]如式(3-18)、式(3-19):
用自定义的差分算子对灰度图像进行边缘增强,并用MATLAB进行仿真,实验结果如图3-16:
图3-16 自定义差分算子边缘增强
从图3-16可以看出车道线标记在模板
检测下得到了增强,尤其对于远处的车道线效果更明显,但是车道线加强的同时,意味着像素点的增多,需要进一步细化处理。考虑到各种实际情况,本课题选用第一个自定义模板如式3-18所示。
3.5.3 加入噪声图像检测实验
前面的实验比较的是几种差分算子在无外加噪声的情况下对道路图像的边缘检测结果,但在实际应用中,系统采集到的图像多数情况下是已经被噪声污染的图像,在进行去噪处理后也会有噪声的残留干扰,所以算子的抗扰性也是选取算子关键考察的方面。通常在实际道路识别中,遇到雨、雪等恶劣气候条件的情况下,系统采集到的图像视野中经常有大量的雨雪颗粒,严重影响对道路图像中特征曲线的提取。在各种噪声模型中,椒盐噪声可以很好地模拟雨、雪颗粒对图像质量造成的影响[8],因此通过实验比较各种差分算子对椒盐噪声污染后的道路图像的边缘检测能力具有实际意义。
对加入椒盐噪声的图像,用常用的差分检测算子进行边缘检测,并用MATLAB进行仿真,结果如图3-17:
图3-17 加噪声后传统差分算子检测
从实验结果中可以看出加入椒盐噪声对几种差分算子检测都产生了的影响。其中
边缘检测算子产生了断点;
边缘检测算子和
边缘检测算子的检测效果较为理想,边缘较为完整;通过无外加噪声图像、加入椒盐噪声图像的实验结果表明在这几种情况下,
边缘检测算子和
边缘检测算子的检测效果较好,
边缘检测算子在有噪声情况下产生较多的断点,定位不准确。
对比
边缘检测算子和自定义差分算子在有噪声干扰的情况下的边缘检测结果,用MATLAB进行仿真,结果如图3-18:
图3-18 加入噪声后的边缘检测
从结果中可以看出,在椒盐噪声的影响下,自定义差分算子的检测效果较好,车道边界特征明显,没有出现断点现象。考虑各种情况后,选用第一种如式(3-18)所示自定义差分算子作为道路图像边缘检测算子最适合。
3.6 本章小结
本章主要介绍了进行道路识别前的准备工作,是后面章节的基础。主要讨论了图像的预处理问题。本设计研究的道路检测系统中的道路检测技术,行驶过程采集到的图像,由于道路不平坦、或者其它因素,视觉系统会产生振动、松动等不确定因素,使采集到的图像质量受到影响。为了增强道路图像的识别可靠性,降低道路检测算法的复杂性,有利于道路边界的正确识别和精确定位,需要对采集到的道路图像进行预处理,以提高图像的质量。
在所有的图像处理算法中,没有哪一种算法可以适用于处理各类图像。每一种算法都有一定的针对性和局限性。在实际研究过程中,为了找到各种有效的图像处理方法,需要作广泛的实验。根据当前视觉导航系统的需要,对算法加以必要的改进,从而可以得到适合本视觉系统的最优算法。本课题道路图像预处理包括图像的灰度化处理、均衡化处理、滤波处理、边缘增强处理。为后续道路图像的分割和道路标志的识别提供了很好的条件。
在研究的诸多预处理图像算法中,针对本设计提供的图像和算法自身的优点,采用彩色通道提取法灰度化道路图像,直方图均衡化技术增强对比度,对噪声图像用
4.1 引言
在视觉导航诸多复杂且具有挑战性的任务中,最受重视的是道路识别(road following),它包括道路检测和道路追踪两个部分。道路检测是视觉导航研究中的核心问题之一,也是视觉导航发展水平的重要标志之一。检测包括道路定位,行驶物相对道路边界的位置,判断驶出道路区域的可能性等,道路追踪不再对整幅道路图像进行全面的处理,只是利用前一次道路检测得到的车道信息,实现对道路的快速检测定位,这样可以进一步提高系统的实时性。由于论文时间有限,本设计只对道路检测部分进行了仿真实验。目前,道路检测技术有单目和双目或多目视觉系统之分。
本章算法没有从立体视觉的角度来解决道路环境重建问题,因为从现有的研究结果来看,直接通过对图像进行三维恢复获取环境信息有很多的困难:首先,计算量巨大。其次,匹配点寻找困难。另外,遮挡问题。如今的立体视觉研究者多数简化了这些不利因素的影响,但是就实际影响来看,任何一个因素都可能导致环境深恢复的错误,尤其是在光线环境比较复杂的户外。这就使得基于像素点进行三维重构的方式进行视觉导航只适用于比较简单的环境。而对于环境较为复杂的户外环境,多数没有采取对图像进行基于像素的三维恢复的方式,而是采用单目视觉系统。
本章将在单目视觉系统针孔成像的模型下进行道路的检测,由于检测的是一般路面,因此主要利用了道路的边缘和区域两种方法的结合。并用MATLAB进行了仿真实验。
4.2 道路检测方法简介
现有的道路检测算法[11]主要有以下三种:
(1)基于彩色图像的分割方法。这种方法是利用彩色图像中RGB彩色空间原理,根据道路在Red,Green,Blue三个彩色分量上与周围非路面环境的不同,对输入的彩色图像进行路面和非路面的二值划分,这种方法更适用于没有车道线的非标准车道。但是基于RGB的彩色图像分割方法对道路与非道路的分类标准并不是很充分,于是人们又提出了基于HSG的图像分割方法。其中Betkel等人提出图像色彩的HSG表达能提供对道路与非道路更有效的分类准则,其中的色度H和饱和度S分量对人行道、树和天空有一致的表达,并且去除了不平整路面的影响。而一些具有高亮特征的如汽车尾灯、交通信号、车道标志及道路边界等需要用灰度级G分量来识别。
(2)基于灰度图像的车道线检测与跟踪算法。这是目前车道线检测与跟踪的主流方法,它可以充分利用车道线提供的灰度信息进行自主导航,非常适用于等级较高的公路。同时这类方法有一些突出的问题需要解决,如当车道线被其它车辆遮挡时,需要准确估计被遮挡的部分车道线。还有由树木、桥梁、建筑物及其它车辆等产生的阴影对路面灰度值产生的影响进而对检测造成干扰等问题。
(3)神经网络方法。在智能车辆导航研究中,采用人工神经网络是一种很典型的方法。通过在实际景物中驾驶车辆来训练神经网络,这种方法可以用于非结构化道路跟踪,但是它也有一个很大缺点即不知道车道线的位置,因而与车道线有关的许多辅助功能无法实现,当用于等级较高公路时,效率低下。
参考近年来有关文献,当前基于视觉的道路检测技术主要有以下两个方向的研究:一个方向是侧重于研究道路边缘信息,另一个方向是侧重于研究路面区域信息。根据分析,可以得知边缘和区域是物体的两个互补特性,因为获取边缘信息时容易过分分割或合并,而导致丢失或添加图像边界,可以通过区域信息来补偿边沿的部分不确定性,因此文中提出对边缘边界和区域边界进行综合分析,以得到准确的道路边界。
4.3 边缘与区域相结合的道路检测方法
经过边缘增强处理后,从图3-16中可以看到不仅道路边缘信息,其它信息如树木、行人等轮廓线也得到增强,这些轮廓在图像中形成了许多的假边界。为了克服假边界的干扰,本设计采用区域生长[11]的方法,得到道路图像的路面区域信息。根据路面的区域信息和自定义差分算子提取的边缘信息定位车道线边界,这种方法的优点是对噪声不太敏感,即使在强阴影下也能得到大体正确的路面描述。下面首先简介区域生长法。
4.3.1 区域生长法的基本概念
区域生长的基本思想是将具有相似性质的像素点集合起来构成区域,具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素根据某种事先确定的生长或相似准则来判定合并到种子像素所在的区域中,直到再没有满足条件的像素可被包括进来,这样一个区域就长成了。其中生长准则常用的是图像的灰度、纹理、彩色等信息。通过上述分析可知,在用区域生长法处理道路图像时,有以下两个问题是非常关键的。
一、区域生长的一个关键是选择合适的生长或相似准则,使用不同的生长准则会影响区域生长的过程,目前,区域生长法在处理道路图像中大多采用灰度差准则。区域生长方法将图像以像素为基本单位来进行操作,基于区域灰度差的方法,主要有如下步骤:
(1)对图像进行逐行扫描,找出尚没有归属的像素;
(2)以该像素为中心检查它的邻域像素,即将邻域中的像素逐个与它比较,如果灰度差小于预先设定的阈值,则将它们合并;
(3)以新合并的像素为中心,检查新像素的邻域,直到区域不能进一步扩张;
(4)继续扫描直到不再发现没有归属的像素,则结束整个生长过程。
二、区域生长过程中对如何选取种子点也是关键,一般可以根据图像的特点来确定,对于有先验知识的图像可以利用先验知识,如果没有则可以借助生长准则对像素进行相应的计算,本设计根据算法所要实现的目的,所选择种子点的区域核心应满足以下三个要求:
(1)必须在道路区域内,且距道路边界有一定距离;
(2)其灰度与周围的灰度较为均匀,以便能生长出较大的区域;
(3)其灰度应能反映道路区域的亮度分布。
根据上述要求选择恰当的种子点,在道路图像理解中,可以作这样一个合理的假设[11],在距离车辆很近的正前方的一个小范围内一定是路面。这种假设在绝大多数情况下是成立的,因为一旦这个前提不成立,就标志着车辆距离危险区域太近而表明前面的导航失败。在这种前提下,进行视觉辅助导航时,就可以根据在这个小范围内的取样特征推导出整个视野空间中的道路信息。理想情况下,我们可以仅仅依赖种子点的信息正确地推出整个道路区域。通过对算法的理解,本设计用区域生长法得到路面区域的算法如下:
(1)选取灰度图像下方一个条形范围内处于灰度值中间位置的像素为种子点;
(2)用
的平滑模板处理灰度化图像,得到邻域平均化的灰度图像;
(3)根据在邻域平均化的灰度图像中的灰度值与在灰度图像中的灰度值的差在设定的阈值
内,且邻域平均化的灰度图像中的灰度值与种子点处的灰度值的差在设定的阈值
内这两个准则,生长出道路的路面区域。
从算法中可以看出,准则内的阈值选取对生长出的图像有很大的影响。选取的值过小,检测出的图像含有虚假的边缘多;选取的值过大,车道线可能出现漏检现象,实验的仿真结果也是如此。对于这两个阈值的选取,目前没有合适的选择方法,本设计在实验过程中,得到阈值
取为70,阈值
取90时,自定义差分模板
取0.28生长出的路面区域最为理想。实现该值的自适应选取是今后研究生长区域法的一个重要方向。利用区域生长法识别道路边界的仿真结果如图4-1:
图4-1 利用区域生长法得到路面区域
阈值选取小于上述值时,仿真结果如图4-2(其中阈值
取50,阈值
取70):
图4-2 利用区域生长法得到路面区域
阈值选取大于上述值时,仿真结果如图4-3(其中阈值
取90,阈值
取110):
图4-3 利用区域生长法得到路面区域
从仿真结果中可以看出,选取的值过小,检测出的图像含有虚假的边缘多;选取的值过大,车道线可能出现漏检现象。因此实现阈值的自适应选取是今后研究的重中之重。
4.3.2 融合两种信息提取的仿真实验
经过上述过程的处理,我们可以得到两组信息即区域信息和边缘信息,若对这两种信息进行融合,真实边界的存在信息就来源于此。本设计提出用下述算法计算真实的道路边缘,对已经得到的边缘信息和区域信息,根据它们在空间上应该出现在相同或相近的位置,来计算两组信息中的相应位置上离散点之间的距离。
设
为边缘边界,其中
为连续的边缘边界线段,每一个线段由离散的边缘点
组成;
为区域边界,其中
为连续区域边界线段,每一个线段由离散的边界点
组成。因为
且
则可以推出
;同理可以得出
,这样就可以把两组信息中的线段当作离散的点来处理,根据式(4-1):
其中
,对于设定距离的选取,由于路面边界的复杂性,没有固定的方法,在实验中
,检测出的车道边界更准确。用MATLAB对融合边缘和区域两种信息定位道路边界进行仿真,结果如图4-4:
图4-4 融合两种信息的检测图
通过图4-4可以看出利用边缘信息和区域信息检测道路边界,可以在一定程度上克服虚假边界的干扰,得到更准确的车道线边缘。为了突出该方法的优点,在这里介绍一种动态双阈值二值化[12]方法,同样是对两幅图像(灰度图像和边缘检测图像)处理,其中一个阈值称之为灰度阈值,另一个阈值称之为边缘阈值。只有在边缘图像中灰度值大于边缘阈值,同时在原始道路图像中灰度值大于灰度阈值的像素,才纳入车道线像素的集合中,而其余的像素则纳入非车道线的集合中。选取灰度阈值时,每一帧图像中都只对车辆前方最近的一小段长条区域进行采样。由于该段区域中一般不会存在障碍物,而且对阴影和水迹的干扰也不敏感,因此可以比较准确地反映出原始图像的道路灰度值。对比两种方法的检测结果,用MATLAB仿真如图4-5:
图4-5 对比区域生长法检测图像和自适应二值化检测图像
从图4-5中可以看出:自适应二值化图像同样在一定程度上可以克服虚假边界的干扰,但是整体效果比融合区域法差,尤其对于稍远处的虚假边界。基于此,本设计用融合区域法检测边缘,但是在阈值选取上,本设计针对预处理图像调节参数还没有达到自适应,需要很大改进。但作为图像处理的一种新方法,值得深入研究。
4.4 基于模型的道路识别
由于现实生活中的道路千差万别,道路检测是个非常复杂的模式识别问题,因此目前仍不存在通用的视觉道路检测系统,在满足一般应用的情况下,适当简化道路场景,有助于解决实际问题。使用道路形状假设就是一种有效的简化道路模型的方法。
4.4.1 道路模型假设
由于用于识别的原始图像中包含丰富的景物细节,如树木、绿化带、行人、车辆、阴影、其它遮挡物等,在经图像处理后得到的边界图像如图4-5中可以观察到,所有这些内容的区域边界,形成了大小不一、或稠或密、形状各异的区域边界的集合,而且这些边界宽窄不同,小到几个像素点,宽的则可能连成一片独立的亮区。但是其中的道路边界则为一组断断续续接近于线状排列的边界区域的集合。从这种形状特征出发,可以设想,建立一种基于形状的道路边界模型能够将其与其它边界区别开来。因此,本设计从道路边界的形状入手来定义模型,国内外许多研究人员也运用了此方法,其中有使用回旋曲线作为道路的形状模型、多项式曲线作为道路的形状模型和直线作为道路的形状模型等。其中直线道路模型[13]是最简单的模型假设。为了减小计算的复杂度,提高系统的性能本设计采用直线道路模型,因为高速公路的曲率[5]一般比较小,在高速行驶时,系统只对前方不太远处采集图像,采用直线道路模型,一般可以满足要求。这里对道路也做了假设:
(1)道路是结构化道路,具有明显的车道标线或者边界,道路宽度基本不变,可以依据颜色、边缘等信息来检测;
(2)道路是水平的,或者其高度变化服从严格的数学模型。
4.4.2 道路图像特征直线提取
在众多的直线提取方法中,霍夫变换是最常用的方法之一,其优点在于算法稳定,抗噪性能好,但缺点是计算量和存储空间太大。人们在几十年的研究中,采取了各种方法对霍夫变换进行改进。本设计通过对霍夫变换及其改进方法和另一种提取直线的中值截距法提取特征直线,并进行仿真实验,找到其中最优的方法。
4.4.2.1 传统霍夫变换提取直线
针对上述假设的车道模型,首先介绍霍夫变换提取车道线的方法[14]。霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线。在直角坐标系中,直线的方程可以用
来表示,其中
和
是参数,分别是斜率和截距。直线上任一点用
表示。那么方程
在参数
平面上是一条直线,这样,图像
平面上的一个前景像素点就对应到参数平面上的一条直线。在实际应用中,
形式的直线方程没有办法表示
形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程
,
代表直线离原点的法线距离,
是该法线对
轴的角度。这样,图像平面上的一个点就对应到参数
平面上的一条曲线上。由此可知,在图像空间中共线的点对应参数空间里相交的线。反过来,在参数空间中相交于同一个点的所有曲线在图像空间里都有共线的点与之对应,这就是点对线的对偶性。根据点对线的对偶性,当给定图像空间的一些边缘点,就可以通过hough变换确定连接这些点的方程。hough变换把在图像空间中的直线检测问题转换到参数空间里对点的检测问题,通过在参数空间里进行简单的累加统计完成检测任务。
总结霍夫变换的基本思想是:首先,我们初始化一块缓冲区对应于参数平面,将其所有数据置为0。然后对图像每一前景点用hough transform,遍历所有的
(根据区域可选择),计算出所有的
值。在对应的参数数组中加1。最后,找到参数平面上最大点的位置,这个位置就是对应原图像上直线的参数。传统hough变换的流程图如图4-6:
编程时将参数
和
量化成许多小格,对任一个
点代入
的量化值,算出各个
,所得值(经量化)落在某个小格内,便使该小格的计数器加1。当全部点
变换后,对小格进行检验有大的计数值的小格对应于共线,其(p,theta)值可用作直线的拟合参数。有小的计数值的各小格一般反映非共线点,丢弃不用。由于直线长度阈值的选取,与道路图像的大小和真实的车道边界有关,可以经过实验得到,实验中取36。应用传统hough变换提取特征直线的仿真如图4-7:
图4-7 传统hough变换提取直线
本课题只对左车道线进行了检测,对右车道线同样适用,但也可以根据已经检测出来的左车道线根据一定的约束条件,如距离、连续性等检测出临近的车道线。从hough变换检测直线的原理可以看出,算法中计算量大。在边缘点众多的情况下,这样的计算量是非常可怕的。目前有很多改进算法,本设计研究了改进的随机hough变换法。
4.4.2.2 随机霍夫变换提取直线
本设计提出一种改进的hough变换——随机hough变换[15],传统的hough变换是一种一到多的映射,即每个边缘点映射成参数空间的一条曲线。而随机hough变换采取的是多到一的映射方式,即随机选取n个像素来决定n个曲线参数。核心算法是:
(1)建立二值化边缘图像;
(2)从中随机选取一对像素点;
(3)如果这两个点不满足预定义的距离约束,回到Step2,否则继续Step4;
(4)将这两点的坐标代入直线方程解得参数(
);
(5)在参数空间中对参数点(
)累加;
(6)继续第二步。
基于算法的理解,本设计提出一种新的算法,流程图如图4-8:
图4-8 改进hough变换流程图
用MATLAB对比随机hough变换法和传统hough变换提取特征直线的实验仿真结果如图4-9:
图4-9 传统hough变换及其改进算法的比较
在本例可以看出改进的hough变换与传统的hough变换检测直线型左车道线时精度相当,但改进算法的实时性提高了3-5倍,更利于车辆的高速行驶。本设计在改进的hough变换后研究另一种算法——中值截距法[16]。
4.4.2.3 中值截距法提取车道线
由透视投影的基本原理可知,路面投影图像基本位于整个图像的下半平面,车道线大多分为左右两部分,以左车道线为例,遍历图片的左半部分得到N个点
,定义图像的左上角为坐标原点,由于任何一条直线都可由截距表示,因此设定左车道线方程如式(4-2):
其中
分别是直线
在
轴上的截距。
为该直线的斜率。
基本原理是:任意选取图像上2个点
,过这两点做一条直线,并分别计算出在
轴上的截距如式(4-3):
对于
个点,相应的可以做出
条直线,由于有些点处于同一条直线上,因此最多只能做
条,从而可得到两组截距值
。分别取截距的中值如式(4-4),并令
所得的
就是对整个集合
的中值估计。而得到的直线方程就是对该组数据的拟和直线。在取值时,如果集合个数为奇数,那么就可以直接取集合的中间元素作为中值截距;而集合个数为偶数时,取中间两数值和的平均值作为中值截距。
基于算法的理解,本设计不从新定义坐标原点(基于点与点之间的坐标关系只是相对关系),但是将图像的左上角理解为坐标原点,图像上的直线可以写成截距的形式,同样先找到图像下方的第一个左(或右)车道线像素点,计算与其它前景像素点的斜率,取其中值作为中值截距。本设计的算法流程图如图4-10所示:
用MATLAB仿真中值截距法提取特征直线如图4-11:
从图4-11中可以看出中值截距可以对检测出的左车道线进行延长,但是从算法可以看出非车道线像素点对其影响较大,下面对三种算法比较,提出最优算法。
4.5 算法比较
首先,智能车辆在高速公路上行驶,要求检测算法应具有快速性,对比三种检测算法在处理上幅图4-9、图4-11的实时性如表4-1:
表4-1 三种算法实时性比较
方法 | hough变换 | 改进的hough变换 | 中值截距法 |
实验1 | 0.1720 | 0.0310 | 0.0790 |
实验2 | 0.1720 | 0.0320 | 0.0780 |
实验3 | 0.1710 | 0.0310 | 0.0760 |
实验4 | 0.1724 | 0.0320 | 0.0780 |
平均时间(s) | 0.1718 | 0.0315 | 0.0780 |
注:实验所用同一台计算机,实验室402,5号机。
从表4-1中可以看出,改进算法的实时性比传统算法提高了3-5倍,具有一定优势,因为在车辆高速行驶的情况下,对实时性的要求是相当高的。中值截距的实时性处于两者之间,但是它可以对检测的车道线长度进行选择。这里除了实时性以外,算法的鲁棒性,也是道路检测中不可忽视的问题。首先用阈值
,阈值
的适当变化,检测算法的鲁棒性,实验仿真如图4-12、图4-13:
图4-12 阈值变化后的hough变换及其改进算法的检测图
图4-13 阈值变化后的中值截距检测图
从图4-12、4-13中可以看出,当阈值变化时,由于区域生长法获得的道路边界信息出现了漏检或虚假边界多的现象,致使hough变换和中值截距提取特征曲线出现了偏差,而改进的hough变换算法检测精度基本不受影响,可见其鲁棒性较好。从对处理该图像的实时性和鲁棒性来看,提出改进的hough变换算法更符合道路检测的要求。
4.6 随机霍夫变换提取直线的检验
虽然,在算法比较中本设计提出用随机hough变换提取特征直线具有优越性,即实时性好、鲁棒性好。但是,由于道路图像的复杂性和多样性,针对一幅图像的处理结果理论上是不应该定为结论的。为了更有利的说明该方法的优越性,下面用其它图像再次检验算法的性能是非常必要的。对其它图像的预处理算法同上,但是某些参数会有适当的调整,因为这些参数还没有达到自适应。例如图4-14,其中阈值
取为15,阈值
取180时,自定义差分模板
取0.2,用MATLAB进行仿真,实验结果如图4-14、图4-15:
图4-14 传统hough变换及其改进算法的比较
图4-15 中值截距提取车道线
从实验结果中可以看出,三种方法检测车道线的效果在精度和长度上稍有区别,但是,在实际情况下,这并不是影响智能车辆行驶的主要因素。检测的实时性如表4-2:
表4-2 三种算法实时性比较
方法 | hough变换 | 改进的hough变换 | 中值截距法 |
实验1 | 0.1630 | 0.0320 | 0.0470 |
实验2 | 0.1560 | 0.0320 | 0.0469 |
实验3 | 0.1560 | 0.0310 | 0.0470 |
实验4 | 0.1570 | 0.0330 | 0.0470 |
平均时间(s) | 0.1580 | 0.0320 | 0.0470 |
注:实验所用同一台计算机,实验室402,5号机。
从表4-2中可以看出,改进算法的实时性确实具有一定优势。当阈值变化时,由于hough变换实时性低,这里只对另两种算法进行比较如图4-16:
图4-16 对比阈值变化后的改进hough变换和中值截距法检测图
从图4-16中可以看出,中值截距法的检测精度较改进的hough变换确实易受阈值的影响,不但如此,考虑到实际情况中,车体前方存在阴影时,为了尽量避开阴影对道路检测的结果,选取种子点的区域就要适当的向图像的上方移动。这样就使的种子点的选取具有某种不确定性。下面用带有阴影的图像说明当种子点的选取具有不确定性时,对算法检测精度的影响。首先用MATLAB获取该图像的道路边界检测图如图4-17:
图4-17 道路边界检测图像
用改进的hough变换提取检测图像中的特征直线,实验仿真如图4-18:
图4-18 改进的hough变换提取特征直线
用中值截距提取检测图像中的特征直线,实验仿真如图4-19:
图4-19 中值截距提取特征直线
从图像可以看出下方存在阴影,在许多实际情况中,车体前方出现阴影是常见的,因此在选取种子点时不得不考虑避开阴影,可以将种子点所处的区域适当向上移,当种子点有所变化时,由于计算机是对每帧图像连续处理的,实验可能出现如图4-20、图4-21所示结果:
图4-20 种子点变化后改进的hough变换提取特征直线
图4-21 种子点变化后中值截距提取特征直线
从实验结果可以看出,中值截距检测的左车道线在前方出现了偏离现象,而改进的hough变换几乎没有变换,综合各种情况考虑,改进的hough变换,在实时性和鲁棒性能上都优于另两种算法,因此提出改进的hough变换算法更适合车道线检测。但是,从上面的实验可以看出,改进的hough变换算法检测的车道线长度比中值截距法检测的长度要小。但是当出现曲率较小的车道线时,检测长度小的算法在检测精度上占有优势,而检测长度大的算法可能出现误检。对有小曲率的车道线图像,用MATLAB进行实验仿真,结果如图4-22、图4-23:
图4-22 曲率较小时三种算法提取特征直线
图4-23 曲率较小时三种算法提取特征直线
从图4-22、图4-23中可以看出,中值截距法提取小曲率的车道线精度较差,改进的hough变换算法检测精度最好。但是改进的hough变换检测长度不如传统的hough变换算法,结合实际情况,在转弯时智能车辆速度不会很大,而且改进的hough变换算法实时性最好。在满足论文要求的前提下,选取改进的hough变换提取车道线最为合适。
4.7 本章小结
本章主要是针对预处理后的图像如何获得车道线像素点和提取直线型车道线的问题进行了研究,在获取车道线像素点过程中,采用融合区域和边缘信息检测车道线像素,为了突出该方法的优点,并和自适应二值化图像做了对比,从实验仿真结果中可以看出,融合区域和边缘两种信息检测车道线边界更能克服存在的虚假边界。之后,对车道线形状提出用直线模型假设,因为该模型计算量小,更适合车辆高速行驶,而且对于结构化的高速公路,曲率一般较小,用直线模型在一般情况下也是适用的。提取图像中的特征直线即车道线,是研究的重点,本设计对同一幅道路图像,在基于直线型车道模型的假设的基础上,应用传统hough变换、改进的hough变换和“中值截距”算法提取并标记车道线。从仿真结果可以看出,改进的hough变换实时性更高。为了提出最优算法,本设计选取了另外两幅图像,对算法的鲁棒性和实时性做比较,提出改进的hough变换在一定程度上更适合车道图像中提取直线。
虽然本设计的研究取得了一定的进展,可以在一定的程度上解决前方道路识别算法的鲁棒性和实时性之间的问题。但是,由于时间和知识水平的限制,目前的研究程度离实际工程应用还有很大差距,存在许多的问题有待研究。对进步的展望和设想,主要有以下几个方面:
由于路面情况是千变万化的,所拍摄到的图像也是复杂多变的,所以本设计中的一些算法或相关处理不可能面面俱到,特别是当道路边缘复杂多变时,道路上存在较多障碍物时或者道路由于特殊原因内部边缘强度大于外部时等等,这些情况下可能出现一些不可预料的结果,因此本设计提出的观点和研究的内容有待进一步深入。而且本设计处理的方法不够全面,没有对道路的区域生长法做深层次的研究,如果生长准则和种子点选的不够理想,所得出来的结果就会很糟。实现动态的选取是本课题进一步研究的方向。
本设计只识别直线道路边界,还不能实现弧形道路的边界识别,建立曲线道路边界模型,进行曲线道路的识别也将是今后进一步研究工作的重点。
本设计对许多阈值的选取还有待向着自适应的方向改进,如获得检测图像过程中,融合两种信息所需要的约束条件,因此实现自适应阈值化是本课题今后研究的一个重要方向。
本设计识别的方法在车道标记线基本清晰的情况下使用,在当车辆上坡、下坡或标记线褪色时,可能出现意想不到的结果。当然还可以引入更多更新的技术补充到道路检测系统中来,比如模式识别的特征提取,人工神经网络的学习以及建立道路模板库等技术。
总之,道路检测是一个仍需要不断补充完善的课题,需要更多新技术新思想融入其中。而新技术、新思想源源不断的充实进来的过程,也就是智能视觉导航从一种理念、一种模型走向实用的过程。
[1] 蒋杰.新型智能车辆视觉系统及图像处理技术的研究[C].硕士学位论文,吉林大学,2003, 6~7.
[2] 董因平.高速汽车偏离预警系统的算法研究[C].博士论文,吉林大学,2004,4~5.
[3] 王驰.基于单视目视觉的道路检测算法研究[C].硕士学位论文,长春理工大学,2008,17~25.
[4] 姚敏等.数字图像处理[M].北京:机械工业出版社,2006.
[5] Xin Li, XiaoCao Yao, Yi L. Murphy. A real-time vehicle detection and tracking system in outdoor traffic scenes[C]. Proceedings of the 17th International Conference on Pattern Recognition, 2004 23~26.
[6] 周金萍编著.图形图像处理与应用实例[M].北京:科学出版社,2003.
[7] 张兆礼.现在图像处理技术及MATLAB实现[M].北京:人民邮电出版社,2001.
[8] ZuWhan kim. Robust lane Detection and Tracking in Challenging Scenarios[J],in IEEE 2008,9.
[9] 孔即祥编著.图像分析[M].北京:科学出版设,2005.
[10] 李兵,张鹏飞.基于增强转移网络的室外移动机器人道路图像理解[J].中国图象图形学报,VOL.9.2004,30~32.
[11] 杨正帅.基于视觉的道路识别技术在移动机器人导航中的应用研究[C].硕士学位论文,南京理工大学,2007,42~45.
[12] 李若皓,丁东花.一种基于扫描线的车道线识别算法[J].2004,12~13.
[13] 胡斌,何克忠.基于分段直线模型和ATN的车道识别方法[J].2006,40(10):15~18.
[14] 虞凡,吴惠思,等.从图像中快速检测直线的并行算法[J].2006,40(12):7~8.
[15] 赵颖,王书茂,等.基于改进hough变换的公路快速检测算法[J].2006,11(3):21~23.
[16] 刘丹编著.计算机图像处理的数学和算法基础[M].北京:国防工业出版社,2005.
实验中用到的部分程序如下:
clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%读图最后得到灰度图像rg
A=imread('w516.jpg');
[r c d]=size(A);
r2g=zeros(r,c);
red=zeros(r,c);
green=zeros(r,c);
blue=zeros(r,c);
rg=zeros(r,c);
for i=1:r;
for j=1:c;
red(i,j)=A(i,j,1);%提取图像的红色分量
green(i,j)=A(i,j,2);%提取图像的绿色分量
blue(i,j)=A(i,j,3);%提取图像的蓝色分量
end
end
for i=1:r;
for j=1:c;
rg(i,j)=0.5*red(i,j)+0.5*green(i,j);
end
end
rg=uint8(rg);
for i=1:r;
for j=1:c;
if rg(i,j)>178;
rg(i,j)=255;
end
end
end
figure;
subplot(2,2,1);imshow(A);title('原图')% 显示原图像
subplot(222);imshow(rg);title('彩色通道提取法-灰度图');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I3(i,j) = 1; % 二值化
else
I3(i,j) = 0;
end
end
end
subplot(222);
imshow(I3);title('sl、sr算子处理的图像')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;subplot(221);imshow(A);title('原图')
gg=bwmorph(I3,'thin',inf);
subplot(222);imshow(gg);title('细化的图像')
I = rg;
[x,y]=size(I);
[height,width] = size(I);
seedx=round(x);
seedy=round(y/2);
gr=I(seedx,seedy)
W_H = [ 1 1 1; % the model in the horizon direction
1 1 1;
1 1 1];
I1 = double(I);
I2 = zeros(height+2,width+2); % put the image's data into a bigger array to void the edge
I2(2:height+1,2:width+1) = I1;
for i=2:height+1 % move the window and calculate the grads
for j=2:width+1
sum1 = 0; % the cumulus
for m=-1:1
for n=-1:1
sum1 = sum1 + W_H(m + 2,n + 2) * I2(i + m,j + n);
end
end
grey=sum1/9;
I1(i-1,j-1) = grey;
end
end
I1=uint8(I1);%邻域平均化灰度图像
[x,y]=size(I1);
I2=zeros(x,y);
I=double(I);
I1=double(I1);
for i=1:x;
for j=1:y;
if abs(I1(i,j)-I(i,j))<=70&abs(I(seedx,seedy)-I1(i,j)<=90)
I2(i,j)=1;
end
end
end
subplot(223)
imshow(I2);title('区域生长-路面区域图像')
I4=zeros(x,y);
for i=round(5):x-4;
for j=5:y-4;
if gg(i,j)==1
for m=i-4:i+4;
for n=j-4:j+4;
if I2(m,n)==0&sqrt((i-m)^2+(j-n^2))<=2
I4(i,j)=1;
end
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
figure;
t0=clock
ff=I4;subplot(221);imshow(ff);title('检测的图像')
%===========提取特征直线==========%
[x,y]=size(ff);
rho_max=floor(sqrt(x^2+y^2))+1; %由原图数组坐标算出ρ最大值,
%并取整数部分加1
%此值作为ρ,θ坐标系ρ最大值
rho_max1=max(rho_max,180);
accarray=zeros(rho_max1,180); %定义ρ,θ坐标系的数组,初值为0.
%θ的最大值,180度
%Theta=[0:pi/180:180*pi/180]; %定义θ数组,确定θ取值范围181
Theta=[0:pi/180:180*pi/180];
%cos=cos(Theta);
%sin=sin(Theta);
for m=1:round(y/3);
for n=round(x/3):x;
if ff(n,m)==1;
for k=1:180;
%将θ值代入hough变换方程,求ρ值
rho=(n*cos(Theta(k)))+(m*sin(Theta(k)));
%将ρ值与ρ最大值的和的一半作为ρ的坐标值(数组坐标),这样做
%是为了防止ρ值出现负数
rho_int=round(abs(rho/2+rho_max/2));
%在ρθ坐标(数组)中标识点,即计数累加,存于第ρ行θ列。
accarray(rho_int,k)=accarray(rho_int,k)+1;
end
end
end
end
subplot(222);colormap(hot); gray;
imagesc(accarray);title('hough变换后的图')
xlabel('\theta'), ylabel('\rho');
%=======利用hough变换提取直线======%
k1=1; %存储数组计数器
for rho_n=1:rho_max; %在hough变换后的数组中搜索
for theta_m=1:180;
if accarray(rho_n,theta_m)>=36;
%设定直线的最小值。
case_accarray_n(k1)=rho_n; %存储搜索出的数组下标
case_accarray_m(k1)=theta_m;
k1=k1+1;
end
end
end
%把这些点构成的直线提取出来,输出图像数组为I_out
end
end
end
end
subplot(223);imshow(I_out);title('利用经典hough变换提取的图像')
time = etime(clock, t0)
%=====================end=======================%
%求最长直线
maxacc=accarray(1,1);
for ii=1:rho_max1;
for jj=1:180;
if accarray(ii,jj)>=maxacc;%rho行,theta列
maxacc=accarray(ii,jj);
rhomax=ii;%记录最长直线的参数rho值
thetamax=jj;%记录最长直线的参数theta值
end
end
end
rhomax;%显示rho值
thetamax;%显示theta值
Theta(thetamax);
II_out=zeros(x,y);
k=1;
for n=1:round(x);
for m=1:round(y);
if ff(n,m)==1;
rho=(n* cos( Theta(thetamax)))+(m* sin( Theta(thetamax)));
rho_int=round(abs(rho/2+rho_max/2));
if rho_int == rhomax ;
II_out(n,m)=1;%找到像素点在角度Theta(thetamax)变换下等于最长直线变换的rho值点
end
end
end
end
subplot(224);
yend=yb(lasty);%找到起始点
hold on;
line( [y1,yend] ,[x1,xend],'linewidth',3);title('根据hough做标记线');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
t0=clock
ff=I4;%输入检测的图像
[x,y]=size(ff);
a1=zeros(x,1);
b1=zeros(y,1);
k=1;
for i=1:x
for j=1:round(y/2);
if ff(i,j)==1;
a1(k)=i;
b1(k)=j;
k=k+1;
end
end
end
m=length(a1);
a2=max(a1)
h=1;
for i=1:m;
if a1(i)==a2;
jiaobiao(h)=i;
h=h+1;
end
end
b1=b1(jiaobiao);
b11=max(b1);
%ff(a1,b1)为选中的车道线第一个像素点
k=1;
for i=round(1):round(x);
for j=1:round(y/2 );
if ff(i,j)==1&i~=a2&j~=b11;
kkb(k)=(b11-j)/(a2-i);
bbc(k)=b11-kkb(k)*a2;
k=k+1;
end
end
end
theta=atan(-1./kkb);
theta1= theta+pi,
roi=bbc.*sin(theta);
roi1= roi+abs(roi);
maxtheta=max( theta1);
maxroi=max(roi1);
accum=zeros(round(maxtheta)+1,round( maxroi)+1);
for i=1:length(theta);
thetaint=round( maxtheta/2+theta1(i)/2);
roiint=round( maxroi/2+roi1(i)/2)+1;
accum(thetaint,roiint)=accum( thetaint,roiint)+1;
end
p=max(max(accum))%出现峰值处的累加器的值
for i=1:length(theta);
thetaint=round( maxtheta/2+theta1(i)/2);
roiint=round( maxroi/2+roi1(i)/2)+1;
if accum(thetaint,roiint)==p;
ji=i;
end
end
k=1;
m=1;
for i=round(x/2):x;
for j=1:round(y/2);
if ff(i,j)==1&i~=a2&j~=b11;
kk(k)=(b11-j)/(a2-i);
bb(k)=b11-kk(k)*a2;
theta(k)=atan(-1./kk(k));
if theta(k) ==theta(ji) ;
xji(m)=i;
yji(m)=j;
m=m+1;
end
k=k+1;
end
end
end
%xji=median(xji);
%yji=median(yji);
ji;
theta(ji);
imshow(I4);hold on;
line( [yji,b11] ,[xji,a2],'linewidth',3);title('根据改进的hough做标记线')
time = etime(clock, t0)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
subplot(221);imshow(A);title('原图');
subplot(222);imshow(I4);title('检测图像');
subplot(223);imshow(I4);hold on;
line( [y1,yend] ,[x1,xend],'linewidth',3);title('根据hough做标记线');
subplot(224);imshow(I4);hold on;
line( [yji,b11] ,[xji,a2],'linewidth',3);title('根据改进的hough做标记线')
%%%%%%%%%%%%%%%%%%%%%
%中值截据输入检测图像
t0=clock
clc;
I_out=I4;
ff=I4;
[x,y]=size(ff);
za1=zeros(x,1);
zb1=zeros(y,1);
k=1;
for i=1:x
for j=1:round(y/2);
if ff(i,j)==1;
za1(k)=i;
zb1(k)=j;
k=k+1;
end
end
end
m=length(za1);
za2=max(za1)
h=1;
for i=1:m;
if za1(i)==za2;
jiaobiao(h)=i;
h=h+1;
end
end
%jiaobiao=max(jiaobiao)
zb1=zb1(jiaobiao);
zb2=max(zb1);
za2
zb2
%ff(za2,zb2)为选中的车道线第一个像素点
[x,y]=size(I_out)
[xindex,yindex]=find(I_out);
lengthy=length(yindex);
number=zeros(lengthy,1);
k=1;
for i=1:lengthy;
sym=yindex(i);
for j=i:lengthy;
if sym == yindex(j);
number(k)= number(k)+1;
end
end
k=k+1;
end
if 3<number<=5;
display ('图像没有垂直的车道线')%判断垂直的车道线
dis=1;
else
display ('图像有垂直的车道线')
dis=0;
end
%中值截距法
if dis==1;
k=1;
for i=round(1):round(2*x/3);
for j=1:round(y/2);
if I_out(i,j);
for m=i+1:i+2;
for n=j+1:j+2;
if I_out(m,n);
a(k)=(m*j-i*n)/(j-n);
b(k)=(i*n-m*j)/(i-m);
k=k+1;
end
end
end
end
end
end
a;
b;
a1=median(a)
b1=median(b)
%b1=abs(b1);
kk=b1/a1;
%ff(za2,zb2)为选中的车道线第一个像素点
%kk为中值截距法求出的斜率
yxia1=abs(round(zb2-(za2-1)*kk))
yxia2=abs(yxia1)-x
figure;
imshow(I_out);hold on;
hold on
yxia=72;
line( [yxia1,zb2],[1,za2],'linewidth',3)
%line( [72,zb2],[1,za2],'linewidth',1)
za2;
zb2;
end
time = etime(clock, t0)
figure;
subplot(221);imshow(A);title('原图');
subplot(222);imshow(I_out);hold on;
line( [yxia1,zb2],[1,za2],'linewidth',3);title('中值截距法求出的斜率')