一种车道线检测方法与流程

文档序号:14008639阅读:241来源:国知局
一种车道线检测方法与流程

本发明属于图像处理技术领域,具体涉及一种车道线检测方法。



背景技术:

随着汽车辅助驾驶和无人车技术的飞速发展,机器视觉传感器能否精确获取车辆周围的标志、标示或车道线信息是汽车辅助驾驶系统最重要的一环,其中车道线的实时检测和预警技术保障了车辆各行其道,在偏离预警、车道保持等方面发挥了重要作用。

目前,在车道线检测的研究中,主要将车道分为直线模型、二次曲线模型或分段切换模型等。在直线模型中,多数采用边缘搜索法先检测出车道边缘,再利用hough变换来识别出车道。边缘搜索法常采用canny边缘检测算法、小波变换及sobel算法等,但是这些算法会检测出大量非纵向排列的非车道线物体的边缘信息,为后面的hough变换带来干扰,大大浪费了cpu的运算资源,使得算法速度较慢,无法在计算性普遍不强的嵌入式硬件中使用。同时采用基于hough变换的直线检测方法,需要将图像空间中的直线转换到参数空间进行描述,对所有可能落在直线边界上的点进行统计,最终确定这些点属于该条直线的概率,因此,计算量大导致耗时、实时性差是基于hough变换的车道检测的一大瓶颈。而且车载系统多数是基于嵌入式系统,基于hough变换的车道检测方法在嵌入式系统上很难广泛地应用。

针对hough变换耗时的缺点,多数处理方法是对图像中车道可能出现的区域进行限定,如剔除图像左右一定范围及图像上部分一定背景,将剩下的区域作为感兴趣区域(regionofinterest,简称roi),后续处理时只对roi进行车道检测。但是该方法没有从本质上解决算法耗时的问题。因此需要进一步探讨车道的特征信息,充分利用车道与非车道物体的差异性筛选出车道边缘。此外,由于此方法只是从全局的角度将图像背景块区域剔除,没有从本质上减少非车道信息的干扰,针对传感器本身采集的图像不包含大面积背景区域时,此方法并不适用。

因此研究出一种不受图像内容限定、且运算量小,能够基于嵌入式系统的车道线检测方法,是本领域技术人员的热点研究方向。



技术实现要素:

针对以上存在的问题,本发明提出了一种车道线检测方法,具体的实施方式如下。

本发明实施例提供的一种车道线检测方法,其中,所述方法包括:

步骤1:获取车辆前方的图像,将所述图像转为灰度图;

步骤2:利用所述图像的灰度信息对所述车道线进行粗定位,并记录粗定位点;

步骤3:对所述粗定位点进行精细化定位,并保留精细点;

步骤4:对所述精细点进行归类,获取多个直线类;

步骤5:根据多个所述直线类获取所述车道线。

在本发明的一个实施例中,所述步骤2包括:

步骤21、利用所述图像的灰度信息将所述图像均分为多个条带,将每个所述条带均分为多个像素块;

步骤22、对每个所述像素块的像素灰度值求和,每个所述像素块的sum值;

步骤23、根据每个所述像素块的sum值获取每个所述条带的梯度数据;

步骤24、在每个所述条带的梯度数据中查找极大值点和极小值点;

步骤25、将所述极大值点和所述极小值点记录为所述粗定位点。

在本发明的一个实施例中,所述步骤3包括:

步骤31、选取粗定位点pi(x,y),以所述粗定位点pi(x,y)为中心,上下各取m个像素行,左右各取xoffset个像素点;

步骤32、对每个所述像素行的粗定位点进行卷积运算,获取每个所述像素行的像素极值点;

步骤33、对上m个像素行内的多个像素极值点的横坐标求平均值x1,对下m个像素行内的多个像素极值点的横坐标求平均值x2;

步骤34、判断所述上m个像素行内的每个所述像素极值点与所述平均值x1的差值的绝对值是否大于预设值,若是,则舍弃所述像素极值点,若否,则保留所述像素极值点;

步骤35、分别判断所述下m个像素行内的每个所述像素极值点与所述平均值x2的差值的绝对值是否大于预设值,若是,则舍弃所述像素极值点,若否,则保留所述像素极值点;

步骤36、对所有的所述粗定位点依次执行步骤31至步骤35;

步骤37、将保留的多个所述像素极值点的坐标转为精细点坐标。

在本发明的一个实施例中,所述步骤36包括:

所述精细点pia(x,y)的横坐标为:

pia.x=pim.x+(sumx1+sumx2)/(n1+n2)

其中,pim.x为保留的所述像素极值点的横坐标的值;sumx1为上m个像素行内保留的多个所述像素极值点的横坐标之和;n1为上m个像素行内保留的多个所述像素极值点的个数;sumx2为下m个像素行内保留的多个所述像素极值点的横坐标之和;n2为下m个像素行内保留的多个所述像素极值点的个数。

在本发明的一个实施例中,所述步骤4包括:

步骤41、将多个所述精细点中的第i个点作为基准点,根据所述基准点确定第一直线类,其中i为1,2,3,4……;

步骤42、将第i+1个精细点与所述基准点进行比较;

若所述第i+1个精细点在所述基准点确定的范围内,则将所述第i+1个精细点记录在所述第一直线类中,且以所述第i+1个精细点作为所述第一直线类的新的基准点;

若所述第i+1个精细点不在所述基准点确定的范围内,则新增直线类,且以所述第i+1个精细点作为所述新增直线类的基准点;

步骤43、将未归类的多个所述精细点分别与所述第一直线类的基准点和所述新增直线类的基准点进行比较,直至多个所述精细点归类完成。

在本发明的一个实施例中,所述步骤42包括:

步骤421、判断所述第i+1个精细点坐标的y值与所述基准点坐标的y值是否相等;

若相等,则所述第i+1个精细点不在所述基准点确定的范围内;

若不相等,则执行步骤422;

步骤422、判断所述第i+1个精细点的斜率是否在预设的斜率范围内;

若在所述预设的斜率范围内,则所述第i+1个精细点在所述基准点确定的范围内;

若不在所述预设的斜率范围内,则所述第i+1个精细点不在所述基准点确定的范围内。

在本发明的一个实施例中,所述预设的斜率范围为所述基准点坐标所在的预设区域内对应的斜率范围,包括:

根据预设的斜率信息配置表获取所述基准点所在的预设区域的斜率均值kavg;

所述斜率均值乘以最大斜率系数和最小斜率系数,以获取所述基准点所在区域内的斜率范围;

其中,所述最大斜率系数为1.2,所述最小斜率系数为0.8。

在本发明的一个实施例中,所述步骤5包括:

对多个所述直线类进行筛选,确定所述车道线的左侧直线类和右侧直线类;

将所述左侧直线类上的点按照数目均分为上部分和下部分,并分别计算平均坐标(x左上,y左上)、(x左下,y左下);

将所述右侧直线类上的点按照数目均分为上部分和下部分,并分别计算平均坐标(x右上,y右上)、(x右下,y右下);

计算中间坐标x上=(x左上+x右上)/2,y上=(y左上+y右上)/2;x下=(x左下+x右下)/2,y下=(y左下+y右下)/2;

连接所述中间坐标(x上,y上)和(x下,y下)得到所述车道线。

本发明的有益效果为:

1、本发明技术方案通过对整个图像进行纵向分条带分块降采样,检测边缘时利用纵向排列的特性,每个条带内车道水平方向变化剧烈,故采用简单的梯度算子对条带内的图像块数据做水平梯度运算,依靠车道左右边缘的梯度变化相反且在车道宽度领域内梯度极值点成对出现的特性,可以粗略检测出车道的可疑边缘点,以此来减少非纵向趋势排列的边缘信息的干扰,提高算法的实时性和车道的可靠性。

2、本发明实施例通过对粗定位的点再经过精细定位后得到车道边缘的精细点位置,然后根据精细点之间的斜率信息与预先设置的车道配置表中的数据进行查表判断,将满足条件的点归类到不同直线类中,在大于阈值点数的归类点中选出最多数目的直线类作为车道线左右两侧,将这些直线类上下位置求平均即可得到车道线,完成车道线的检测。因此无需进行非纵向趋势排列的干扰点的计算,从而减少了大量无用计算,很大程度上减小了系统的处理压力,提升了处理速度。

附图说明

图1为本发明实施例提供的车道线检测方法的流程图;

图2为本发明实施例中对所述图像分条带分块的示意图;

图3为本发明实施例中单个条带的梯度数据的示意图;

图4为本发明实施例中粗定位点示意图;

图5为本发明实施例中精定位后示意图;

图6为本发明实施例中归类后示意图;

图7为本发明实施例中直线显示示意图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。

如图1至图7所示,图1为本发明实施例提供的车道线检测方法的流程图;图2为本发明实施例中对所述图像分条带分块的示意图;图3为本发明实施例中单个条带的梯度数据的示意图;图4为本发明实施例中粗定位点示意图;图5为本发明实施例中精定位后示意图;图6为本发明实施例中归类后示意图;图7为本发明实施例中直线显示示意图。本实施例较为详细地对车道线检测方法的工作原理进行详细介绍如下。

如图1所示,本发明实施例提供的车道线检测方法,首先将处理的图像转为灰度图,再依次进行粗定位、精定位、归类点、直线显示处理。具体包括:

步骤1:获取车辆前方的图像,将所述图像转为灰度图;

步骤2:利用所述图像的灰度信息对所述车道线进行粗定位,并记录粗定位点;

步骤3:对所述粗定位点进行精细化定位,并保留精细点;

步骤4:对所述精细点进行归类,获取多个直线类;

步骤5:根据多个所述直线类获取所述车道线。

<粗定位>

进一步的,利用所述图像的灰度信息对所述车道线进行粗定位,并记录粗定位点,包括:

步骤21、利用所述图像的灰度信息将所述图像均分为多个条带,将每个所述条带均分为多个像素块;

步骤22、对每个所述像素块的像素灰度值求和,每个所述像素块的sum值;

步骤23、根据每个所述像素块的sum值获取每个所述条带的梯度数据;

步骤24、在每个所述条带的梯度数据中查找极大值点和极小值点;

步骤25、将所述极大值点和所述极小值点记录为所述粗定位点。

具体的:

粗定位时,对于w*h大小的图像,以720*200为例,将图像纵向分为多个条带(通常选取40),每个条带包含h行图像数据(通常选取5),再对每个条带以w(通常选取5或者10)像素宽分块,总共分为w/w个块。分块后依次进行如下步骤:

1、对条带内每个w*h大小的块进行像素灰度值求和得到sum,即每个条带得到w/w维数据sum。

2、对求和后的各个块i的数据sum[i]进行水平梯度计算,采用图像数据和模板进行卷积运算,模板采用简单的算子如[-1,0,1]或[1,0,-1]即可。

以[-1,0,1]为例,得到单个条带的梯度数据为:

diff[i]=sum[i+1]-sum[i-1],i=1,2,3...(w/w-1)(1)

以图2中720*200大小的图像为例,以左上角为坐标原点,对于图中以y=50为起点的条带按h=5,w=5的大小进行分块求像素值之和后,用式(1)对条带的每个块数据做水平梯度计算,得到的梯度数据如图3所示;

3、在梯度数据中依次查找若干梯度极值对。依靠车道左右边缘的梯度变化相反且在车道宽度领域内梯度极值点成对出现的特性,可以粗略检测出车道的可疑边缘点。

本发明实施例中,采用模板[-1,0,1]计算梯度时,左侧车道边缘点为梯度正向极大值处,右侧边缘点为梯度负向极小值处,同时极值的梯度幅值要大于阈值maxminth,且极大值和极小值相隔的块的个数在车道阈值范围内,即对于每个极值大点,设列块索引为nl(左侧车道),当其梯度幅值大于maxminth时,再在其右侧widthth宽度阈值内查找梯度幅度大于maxminth的极小值点,设列块索引为nr(右侧车道),若找到了一对极大极小值点(nl,nr),则认为此对点为可疑车道,将找到的极值点对(nl,nr)按照公式(2):

映射回原图得到车道粗定位的左右侧的点坐标pi(x,y),pi+1(x,y),保存此点位置信息,继续按照第3点寻找当前条带的其它极值点对。否则,将已经找到的极大值点从候选点中删除,再依次对条带的梯度数据进行极值对的查找。

另一方面,还可以[1,0,-1]为例进行梯度计算,具体为:先查找负向极小值,再在widthth领域块内查找正向极大值。

其中,maxminth采用自适应阈值,根据极大值附近的背景亮度和其位置信息自适应调整阈值,阈值maxminth的计算方式如下:

首先设定梯度的基本阈值baseth,由于车道线在图像中间部分倾向于垂直,越到图像两边越倾斜,在不同位置处分块求像素值之和后,像素值之和的大小和位置有关,越往中间越大,越靠近两边越小。故需要对图像不同位置设置比例系数locaterate,梯度基本阈值baseth在不同位置区域按照比例调整。对找到的每个极值点,计算出其领域m个块的亮度均值作为此极值处的背景值bkgrd,再用bkgrd与预设的背景极大值maxbkgrdth比较。

当bkgrd≤maxbkgrdth时:

maxminth=baseth*locaterate+bkgrd*lumarate(3)

当bkgrd>maxbkgrdth时,图像可能出现光照的干扰,使得梯度变化减小,故要根据极值处的背景bkgrd和背景极大值maxbkgrdth的差异bkgrd-maxbkgrdth相应地减少梯度的幅度阈值,即减少差值的overtimes倍:

对于图3所示的梯度数据,例如:最终查找出的极值点对的块坐标为(40,42)、(81,84),映射回原图即得粗定位的点坐标(202,52)、(212,52)、(407,52)、(422,52)。全图的粗定位点如图4所示。

4、对图像的其它条带依次进行上述操作,查找出全图所有条带中疑似车道的左右侧的粗定位点pi(x,y),pi+1(x,y)。

本发明通过对图像进行分条带分块后,对块的像素值之和只做水平方向的梯度计算,再根据车道宽度的限制、梯度幅度阈值自适应调整及方向的限制查找车道的极值点实现边缘检测,充分利用了车道纵向排列的趋势及车道左右两边梯度变化的方向信息,极大地避免了采用canny算子或sobel算子检测边缘时的造成的众多干扰边缘。

通过分条带实现车道候选点的降采样,后续计算都是在粗定位后的少数点上进行处理,避免了采用通过全局剔除上部分和左右部分图像块来加速的方法,使此方法在摄像头本身采集的数据不包含天空背景时能够适用,且能够检测出图像中从中间垂直分布到左右两边缓慢向中间倾斜分布的所有车道线。

<精定位>

对所述粗定位点进行精细化定位,并保留精细点,包括:

步骤31、选取粗定位点pi(x,y),以所述粗定位点pi(x,y)为中心,上下各取m个像素行,左右各取xoffset个像素点;

步骤32、对每个所述像素行的粗定位点进行卷积运算,获取每个所述像素行的像素极值点;

步骤33、对上m个像素行内的多个像素极值点的横坐标求平均值x1,对下m个像素行内的多个像素极值点的横坐标求平均值x2;

步骤34、判断所述上m个像素行内的每个所述像素极值点与所述平均值x1的差值的绝对值是否大于预设值,若是,则舍弃所述像素极值点,若否,则保留所述像素极值点;

步骤35、分别判断所述下m个像素行内的每个所述像素极值点与所述平均值x2的差值的绝对值是否大于预设值,若是,则舍弃所述像素极值点,若否,则保留所述像素极值点;

步骤36、对所有的所述粗定位点依次执行步骤31至步骤35;

步骤37、将保留的多个所述像素极值点的坐标转为精细点坐标。

粗定位的点经过精细定位后得到车道边缘的精细点位置,精定位时淘汰不符合车道纵向连续紧凑排列规律的干扰点,同时保存每个条带的精细边缘点坐标信息和此边缘的斜率信息。具体如下:

1、对于已经检测出的pi(x,y),分别对pi(x,y)的上下m行的xoffset列邻域内查找梯度极值点。对于每行的x初始坐标都设为此条带粗定位时pi(x,y)的x坐标,在pi(x,y)的xoffset范围内,依次采用前后4点或者5点像素值之和做差分,即用图像数据和模板[-1,-1,-1,-1,0,1,1,1,1]或者[-1,-1,-1,-1,-1,0,1,1,1,1,1]进行卷积,找到此xoffset范围内梯度变化最大的点作为此行的极值坐标pim(x,y)。依次求得上下m行,每一行的极值点pim(x,y)。

本发明实施例中,优选的m的取值为:5*5分块时通常取3,10*10分块时通常取5;xoffset通常根据pi(x,y)的x坐标来确定,若该粗定位点位于图像前1/3或者后1/3时取30,位于中间1/3时取15。

2、分别对上下面m行的极值点pim(x,y)求x坐标的平均值x1和x2,然后将上下m行的极值点pim(x,y)的x坐标和平均x坐标x1和x2分别对比,保留在均值坐标在xth像素内的点,优选的,xth取3,即:用每一个像素极值点与其对应的平均坐标值求差,并对差值取绝对值,以确定该像素极值点与平均坐标值之间的距离,以此来决定是否保留该像素极值点。

对上m个像素行内保留的点的个数计数为n1,对下m个像素行内保留的点的个数计数为n2。

3、当n1,n2大于预设值pnth时,再对剩下的点分别求上下部分的x坐标之和sumx1,sumx2,即对上m个像素行内保留的所有像素极值点的x坐标求和,对下m个像素行内保留的所有像素极值点的x坐标求和;再求各自的均值avg1,avg2:avg1=sumx1/n1,avg2=sumx2/n2。

需要说明的是,当m为5时,预设值pnth取值为2,当m为10时,预设值pnth取值为3。

4、利用保留点的均值,根据如下公式将条带的粗定位点pim(x,y)的x坐标变为精细点pia(x,y)的x坐标;

pia.x=pim.x+(sumx1+sumx2)/(n1+n2)。

5、得到全部粗定位点的精细点位置,如图5所示。

<归类点>

由于车道左右边缘的梯度变化相反,且在车道宽度领域内梯度极值点成对出现的特性,本发明实施例中可以针对每一个单独的精细点进行归类,也可以针对保留的所有成对精细点进行归类,通过计算精细点的斜率,判断该斜率是否在预设范围内,当它们的斜率满足斜率最大值最小值限制时,则归类为同一直线类,即为一条直线上的点。归类方法如下:

步骤41、将多个所述精细点中的第i个点作为基准点,根据所述基准点确定第一直线类,其中i为1,2,3,4……;

步骤42、将第i+1个精细点与所述基准点进行比较;

若所述第i+1个精细点在所述基准点确定的范围内,则将所述第i+1个精细点记录在所述第一直线类中,且以所述第i+1个精细点作为所述第一直线类的新的基准点;

若所述第i+1个精细点不在所述基准点确定的范围内,则新增直线类,且以所述第i+1个精细点作为所述新增直线类的基准点;

步骤43、将未归类的多个所述精细点分别与所述第一直线类的基准点和所述新增直线类的基准点进行比较,直至多个所述精细点归类完成。

其中,步骤42包括:

步骤421、判断所述第i+1个精细点坐标的y值与所述基准点坐标的y值是否相等;

若相等,则所述第i+1个精细点不在所述基准点确定的范围内;

若不相等,则执行步骤422;

步骤422、判断所述第i+1个精细点的斜率是否在预设的斜率范围内;

若在所述预设的斜率范围内,则所述第i+1个精细点在所述基准点确定的范围内;

若不在所述预设的斜率范围内,则所述第i+1个精细点不在所述基准点确定的范围内。

具体的,以成对精细点归类为例:

1、本发明实施例中,以第一对精细点p0a(x,y)为基准点,从第二对精细点pia(x,y),p(i+1)a(x,y)开始,首先判断第二对精细和第一对基准点的y坐标不相等,且y坐标之差小于阈值yth时,说明它们不在同一条带且在纵向比较的阈值范围内,则计算它与存储的此类的精细点对的斜率信息:pia(x,y)和p0a(x,y)、p(i+1)a(x,y)和p1a(x,y)点的斜率信息ki=(pia.x-p0a.x)/(pia.y-p0a.y),ki+1=(p(i+1)a.x-p1a.x)/(p(i+1)a.y-p1a.y);

当y坐标相等时,存储此点为新的直线类的基准点,然后选择下一对精细点进行上述操作。

需要说明的是,本实施例中,阈值yth取值为5。

2、针对计算出第i对精细点的斜率信息ki,ki+1,通过在预先设置的图像不同位置区域的斜率信息配置表数据得出对应精细点的斜率均值kavg,当minrate*kavg≤ki≤maxrate*kavg且minrate*kavg≤ki+1≤maxrate*kavg时,则认为此精细点与其对应的基准点属于同一直线上的点,则将它们归类到各自的直线类中,并且该对精细点替代原来的基准点对,成为其各自所在的直线类上的新的基准点。

后续的精细点则与该直线类上的新的基准点进行比较,以判断其是否是该直线类上的点。

若判断出该精细点的斜率不在该斜率范围内,则存储此点为新的直线类的基准点,然后选择下一精细点进行上述操作。

通常最小斜率系数minrate取0.8,最大斜率系数maxrate取1.2。

对所有的精细点均需进行此归类过程,最终保留的精细点分别构成多个直线类。

对每一精细点对的归类过程与对单独的每一个精细点的归类过程是相同的。本发明实施例中,对所有的精细点归类后,还包括对多个所述直线类进行筛选,确定所述车道线的左侧直线类和右侧直线类;

1、对所有精细点归类后,对分好的各个直线类利用其点的数目pmnum进行筛选,点数大于预设值的直线类,说明其具有代表性,因此保留,而当某一直线类中,点的个数特别少,小于预设值,那么说明该直线类不具有代表性,因此舍弃,通常,预设值为4个。

对保留的直线类,计算斜率km。

2、利用各个直线类的斜率对不同直线的点的数目pmnum进行调整,使得位于图像中间区域的直线的点数权重降低,位于左右两边倾斜的直线的点数权重加大。调整公式为:

pmnum2=pmnum/(moffset-poffset*km)(5)

通常moffset取1500,poffset取2;再执行步骤5;

3、如图6所示,针对选出的多个直线类,当利用斜率km计算出的直线延长线小于0或者大于图像宽度时,说明此直线类代表的直线在图像中属于倾斜直线,即位于左右两边区域,则在点数大于阈值bandnumlr的直线类中,选择点数最多的两个直线类作为最终的车道线的左右侧;否则说明车道线位于图像中间区域,舍弃。

本发明实施例中,直线检测时没有采用hough变换计算直线参数,而是充分利用车道左右侧的斜率信息和预设信息对比,通过比对预设信息将筛选出的精细点分配到不同的直线类中,这从本质上克服了hough检测参数计算耗时的问题,大大地提高了算法运算速度,使之能够在嵌入式系统上实现实时车道线检测。

<直线显示>

将所述左侧直线类上的点按照数目均分为上部分和下部分,并分别计算平均坐标(x左上,y左上)、(x左下,y左下);

将所述右侧直线类上的点按照数目均分为上部分和下部分,并分别计算平均坐标(x右上,y右上)、(x右下,y右下);

计算中间坐标x上=(x左上+x右上)/2,y上=(y左上+y右上)/2;x下=(x左下+x右下)/2,y下=(y左下+y右下)/2;

如图7所示,连接所述中间坐标(x上,y上)和(x下,y下)得到所述车道线,完成车道线的检测。

综上所述,本文中应用了具体个例对本发明实施例提供的一种车道线检测方法的实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方案及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制,本发明的保护范围应以所附的权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1