发明内容
本发明的目的就是提供一种车道线检测算法适用于各种复杂的城市道路,且由于需要其较低的计算量,在低端硬件下就能运行,简单可靠的车道线提取及偏离预警方法。
本发明的解决方案是这样的:
本发明包括步骤:
(1)、图像预处理步骤:对摄像头标定得到原始图像的逆投影透射图,提取单线的DLD特征图像和双线DLDLD特征图像,根据两种特征抽取算子并进行二值化处理,对二值化图像中的白色像素进行自底向上的聚类膨胀处理;
(2)、对聚类处理后的二值化图像进行连续分段函数拟合步骤:将待处理图像区域进行栅格化,在栅格内对各特征像素点进行误差最小二乘法拟合,在预先定义的栅格中对上述特征点进行连续线性分段函数拟合,并记录各分段函数的始末点坐标和相应斜率,若某一段函数线的终点与临近函数线的起点坐标一致或距离小于3~7个像素,则认为是二者组成一个多段线;若二者坐标不一致且距离大于或等于3~7个像素,则认为本段函数线为单独的一个线段,此时也特别地认为该线段是一种包含栅格数量为1的多段线;
(3)、虚实线判断步骤:
实线:定义为若某一栅格内一段函数线的终点与临近栅格内函数线的起点坐标一致或距离小于3~7个像素,认为这两个函数栅格内的函数线属于同一多段线。当栅格数量Num不小于5~7时,认为该多段线为实线;
虚线:定义为若某一栅格内一段函数线的终点与临近栅格内函数线的起点坐标一致或距离小于3~7个像素,认为这两个函数栅格内的函数线属于同一多段线。栅格数量Num小于5~7的多段线为虚线;
(4)、车道提取步骤:该步骤包括:
1)多线段追踪步骤:对提取出的处于最底部的本帧多段线与前帧多段线(即跟踪线)进行匹配分别得到候选实线和候选虚线,并以满足匹配条件的候选线为下一次跟踪匹配过程的参考起始线,本帧中与前帧多段线匹配的多段线,认为跟踪成功;本帧中不匹配的多段线认为跟踪不成功;
2)、为多段线的扩展步骤:在虚线匹配中,第一条虚线跟踪步骤完成且确定后,以位于最底部的跟踪匹配成功的此条多段线为参考起始线,对本帧内其他多段线进行匹配,以获得该多段线所在车道线的全部多段线部分,并认为此多段线相互关联;
3)、查验步骤;对于多个关联的多段线组成的新多段线,对其按一定规则进行评估,若满足阈值要求,则认为是一个有效的车道线,确定候选车道p;
4)、车道线确定步骤:根据分类函数对所得的候选车道线p,采用
进行计分,其中(0,0)原点定义在摄像头与地面垂直交点处;若该候选车道线p是由前帧追踪所得,则本帧候选车道线应得分值为当前分值和前帧车道线对应分值之和,以便形成积累效应;当分值不小于某一定阀值时确定为有效车道线,理想阀值设定范围为0.95~1.6;反之确定为非有效的车道线;
(4)、偏离预警决策步骤:对有效车道线,延伸获取其与处理图像区域边框的交点位置坐标,并选择左右车道线中最顶端端点与边框的交点位置坐标的沿宽度方向的子坐标值colNum,colNum的有效取值范围是0~Width,计算该值与图像宽度中心的距离Dis=|Width/2-cloNum|,同时,计算左向偏置距离L_Dist和右向偏置距离R_Dist;初始时设定L_Dist和R_Dist变量的值为Max=A*Width,其中A为比例系数,A为整数且不小于2,设定车道偏离预警距离阀值设定为DisWarn=K*Width,其中K为预警比例系数,K值取值系数范围为0.1~0.5,当左向偏置距离L_Dist或右向偏置距离R_Dist超出车道偏离预警距离阀值时报警。
更具体的方法还包括:
步骤(1)还包括步骤:
确定车道线待处理区域步骤:在原始道路图像中,获得该道路图像的灰度形式,确定车道线待处理区域,高度值
对于单线的DLD特征图像,单车道线的特征抽取算子为:
DLD(x,y)=max{min{p(x,y)-p(x-2,y),p(x,y)-p(x+2,y)},0}
对于双线DLDLD特征图像,双车道线的特征抽取算子为:
DLDLD(x,y)=max{min{p(x-3,y)-p(x-5,y),p(x-3,y)-p(x,y),
p(x+3,y)-p(x+5,y),p(x+3,y)-p(x,y)},0}
其中(x,y)为某像素点坐标,p(x,y)为该像素点的像素值。
采用局部邻域的均值阀值对抽取的两种特征算子进行二值化,二值化的推荐局部窗口范围为(15~32)*1像素,当本待处理像素点的像素值大于或等于周围像素点像素平均值时,则将本待处理像素点像素值设为255;否则设定为0。
步骤(2)还包括步骤:
预先定义栅格,每个栅格的大小推荐设置为宽*高=(20~30)*(10~20)像素。
1)、定义点A与线段
之间距离:设定r为
所在直线,A⊥r为过A点在相对直线r的垂足,那么点A与线段
之间的距离d(A,
2)、定义点A与多段线p之间的距离:多段线p={P0...Pn}表示多段线p由P0...Pn等一系列点顺序构成,则点A与多段线p之间的距离d(A,p)定义为连接A点与p上最近点之间的线段的长度,点A⊥p即为p上所述离A最近的点;
同时令
表示k为使得A到P
i距离最小时,i的值。那么显然有:
特别地,当k=0或k=n时,A⊥p可简化表示为
或
此时点A与多段线p之间的距离d(A,p)=d(A,A⊥p);
3)、定义多段线a,b之间的距离:如下图5所示,多段线a={A
0...A
m},多段线b={B
0...B
n},其中B
f=A
0⊥b,A
f=B
0⊥a,B
b=A
m⊥b,A
b=B
n⊥a ,定义
多段线a、b之间的最小距离定义为
则多段线a、b之间的距离定义为:
其中图中阴影部分表示多段线a、b之间的覆盖面积,length(p)
[Vm,Vn]代表由点Vm和点Vn所限定的多段线p之间的长度。
步骤(4)的多线段追踪步骤中包括步骤:
1)、对于实车道线,假设本帧(T时刻)候选多段线表示为{cs0...csh-1}(其中csj(j∈0...h-1)是代表组成该多段线的多个子多段线),对应的前帧(T-1时刻)多段线表示为{ts0...tsk},则本帧候选多段线分值分配公式为:j∈{0...h-1};则获得最低值的候选多线段csj在本帧内被选择,供后续处理,从而看出2条线越近,候选多段线越长score值越小,获得最小值的多段线被选择,然后自动成为下一帧候选线的参考线;
2)、对于虚车道线,本算法利用该分量和前后帧多段线距离的综合因素决定多段线的选择使得可信度提高,准确度大;本帧内的候选虚车道线段表示为{cd0...cdh-1},对应的前帧候选虚车道线段表示为{td0...tdk-1},则本帧候选虚车道线段分值分配公式为: 其中xj是cdj线段的顶上第一个点的x分量;加上该分量的好处是虚车道线段离摄像头越近,其精度也越高,本身值也越小,而获得最小分值的cdj在本帧内被选择,共后续处理;当确定了第一段虚线段后,以该段为起始线来对其他关联的虚车道线段进行分类,最终迭代产生新的跟踪多段线cp;本算法采用了如下准则:
上述算法用第一段虚线段作为比较的基准(即tdi)将其他虚线段(即cdk,cdh等)通过此算法进行两两比较,当两条虚线段与基准相互比较时,如果分别在阀值的两端,则取比阀值小的那条虚线段;但是当两条虚线段与基准相互比较时都同时比阀值小或大的时候则求与cp,tdi距离之和最小的虚线段,两两比较完之后,直到没有任何较近线段的剩余,最后确定第二条虚线段;重复上述过程依次求出以下虚线段。
步骤(4)的多线段扩展步骤中包括步骤:
在追踪阶段获得各候选多段线,对各多段线之间的位置关系进行确认,当满足下列关系时的多段线视为有效候选多段线:无论实线还是虚线,候选多段线的第一个点(自底向上)需离下方参考多段线的最后一个顶点距离较近,即候选多段线的第一个点落在阴影区域内,而该阴影区域由两个线段的方向夹角θ、连接角φ、扇形角、径向半径和横向宽度等限定,其中θ角为8~15度,φ角为2~5度,扇形角大小为25~40度,径向半径大小为30~50像素,横向宽度为的16~20像素;对于虚车道线,虚线段长度和间隔长度的比例关系应该相等,推荐比例在2∶3与1∶1之间;具有关联性的各多段线扩张生成候选车道线p。
本发明的优点是车道线检测算法适用于各种复杂的城市道路,且由于需要其较低的计算量,在低端硬件下就能运行,简单可靠。
具体实施方式
本发明的附图1表示了车道线检测算法的基本框架。首先是(一)预处理的过程,通过摄像头标定得到原始图像的逆投影透射图,通过二值化DLD滤波(单线)和DLDLD滤波(双线)特征图像,再对其进行聚类膨胀处理,将各可能特征点进行融合;随后在预先定义的栅格中对上述特征点进行连续线性分段函数拟合,并记录各分段函数的始末点坐标和相应斜率(若某一段函数线的终点与临近函数线的起点坐标一致或接近,则认为是二者组成一个多段线;若二者坐标不一致,则认为本段函数线为单独的一个线段;以下统称为多段线);完成以上步骤就能提取出多段线(此类多段线不仅包含车道线形成的多段线,也包含其他干扰因素等形成的多段线)。然后是(二)车道线提取的过程,对提取出的处于最底部的本帧多段线与前帧多段线(即跟踪线)进行匹配分别得到候选实线和候选虚线,并以满足匹配条件的候选线为下一次跟踪匹配过程的参考起始线(本帧中与前帧多段线匹配的多段线,认为跟踪成功;本帧中不匹配的多段线认为跟踪不成功);在虚线匹配中,第一条虚线跟踪步骤完成且确定后,以位于最底部的跟踪匹配成功的此条多段线为参考起始线,对本帧内其他多段线进行匹配,以获得该多段线所在车道线的全部多段线部分,并认为此多段线相互关联,该步骤称为多段线的扩展。最后对于多个关联的多段线组成的新多段线,对其按一定规则进行评估,若满足阈值要求,则认为是一个有效的车道线,此步骤称为查验;为防止新出现车道线的漏检,非有效的车道线保留若干帧以上。本车道检测算法将单线和双线的识别步骤分开处理,因此程序需分别对同一副道路图像处理两次。
具体步骤:
一、预处理过程
1、在原始道路图像中,获得该道路图像的灰度形式,确定车道线待处理区域,高度值
其中Height为图像高度,如图2所示。结合摄像头标定信息(摄像头标定方法采用专利公开号为CN1537749A的一种车载摄像机外部参数标定方法),对摄像头采集的道路图像进行逆透射变换处理,将图像上的透射投影图转换为对道路平面上的鸟瞰图,即逆透射图,如附图3所示。
2、将逆透射图进行二值化滤波处理,找出可能的车道标志线,主要有三个步骤:
A特征抽取
从逆透射图中提取出DLD特征(单线)图和DLDLD特征(双线)图,对单双线的不同特点采用不同的特征抽取算子。假设某像素点坐标为(x,y),像素值为p(x,y)。则对于单车道线的特征抽取算子为:
DLD(x,y)=max{min{p(x,y)-p(x-2,y),p(x,y)-p(x+2,y)},0}
对双车道线的特征抽取算子为:
DLDLD(x,y)=max{min{p(x-3,y)-p(x-5,y),p(x-3,y)-p(x,y),
p(x+3,y)-p(x+5,y),p(x+3,y)-p(x,y)},0}
B平均亮度二值化
采用局部邻域的均值阀值对上述结果进行二值化,二值化的推荐局部窗口范围为(15~32)*1像素。这能有效减小汽车和路边物体产生的阴影对检测结果的影响。当本待处理像素点的像素值大于或等于周围像素点像素平均值时,则将本待处理像素点像素值设为255;否则设定为0。
C聚类膨胀扩展
对上述二值化图像中的白色像素点进行自底向上的聚类扩展处理,法则如下图4所示。所谓膨胀就是对二值化边界点进行扩充,将于物体接触的所有背景点合并到物体中,使边界向外部扩张的过程。如果两个物体之间的距离比较近,则膨胀运算可能会把两个物体连通到一起,如附图4所示,其中黑色部分为参考像素点,周围斜线部分为扩展候选像素点。其中,最顶端的扩展点有利于减小噪声(比如脏污和阴影)对车道线连续性的影响。
3、将聚类处理后的二值化图像进行连续分段函数拟合。为便于处理,将待处理图像区域进行栅格化,在栅格内对各特征像素点进行误差最小二乘法拟合,同时定义该函数线段的起点为最下端的像素点,终点为最上端的像素点。若某一段函数线的终点与临近函数线的起点坐标一致或接近(距离小于3个像素),则认为是二者组成一个多段线,依此类推,可以组成由多个栅格内的线段组成的多段线。若栅格数量Num不小于5~7,则认为是实线,否则认为是虚线;若二者坐标不一致,则认为本段函数线为单独的一个线段,此时该单独的线段属于虚线,且栅格数量Num=1,但也认为属于一种多段线,由此以上二者统称为多段线。
待处理图像区域的栅格设置示意图如附图5所示,每个栅格的大小推荐设置为宽*高=(20~30)*(10~20)像素。
二、车道线提取过程
图像进行完预处理后,可以提取出多段线,接下来就进行车道线检测。车道线检测分为3个步骤:多段线追踪、多段线扩展和车道线查验。
在进行讨论之前,先作以下定义:
(a)定义点A与线段
之间距离:设定r为
所在直线,A⊥r为过A点在相对直线r的垂足,该垂足有两种状态,第一种如附图6所示,垂足在线段BC上,第二种如附图7所示,垂足不在线段BC上;
(b)定义点A与多段线p之间的距离:多段线p={P0...Pn}表示多段线p由P0...Pn等一系列点顺序构成,如附图8所示,则点A与多段线p之间的距离d(A,p)定义为连接A点与p上最近点之间的线段的长度,点A⊥p即为p上所述离A最近的点。
同时令
,表示k为使得A到P
i距离最小时,i的值。那么显然有:
特别地,当k=0或k=n时,A⊥p可简化表示为
或
此时点A与多段线p之间的距离d(A,p)=d(A,A⊥p)。
(c)定义多段线a,b之间的距离:如附图9所示,多段线a={A
0...A
m},多段线b={B
0...B
n},其中B
f=A
0⊥b,A
f=B
0⊥a,B
b=A
m⊥b,A
b=B
n⊥a,定义
,多段线a、b之间的最小距离定义为
,则多段线a、b之间的距离定义为:
,其中图中阴影部分表示多段线a、b之间的覆盖面积,length(p)
[Vm,Vn]代表由点Vm和点Vn所限定的多段线p之间的长度。
1、多段线追踪阶段
基于以上定义,确认提取多段线时,首先将本帧提取的候选多段线与前帧获取的候选多段线进行比较分析以实施跟踪。
(1)对于实车道线,假设本帧(T时刻)候选多段线表示为{cs
0...cs
h-1}(其中cs
j(j∈0...h-1)是代表组成该多段线的多个子多段线),对应的前帧(T-1时刻)多段线表示为{ts
0...ts
k},则本帧候选多段线分值分配公式为:
j∈{0...h-1}。则获得最低值的候选多线段cs
j在本帧内被选择,供后续处理,从而看出2条线越近,候选多段线越长score值越小,获得最小值的多段线被选择,然后自动成为下一帧候选线的参考线。
(2)对于虚车道线,由于候选虚线太短,若继续使用上式容易产生较大误差,本算法使用了另外一种策略。利用该分量和前后帧多段线距离的综合因素决定多段线的选择使得可信度提高,准确度大。本帧内的候选虚车道线段表示为{cd0...cdh-1},对应的前帧候选虚车道线段表示为{td0...tdk-1},则本帧候选虚车道线段分值分配公式为: 其中xj是cdj线段的顶上第一个点的x分量。加上该分量的好处是虚车道线段离摄像头越近,其精度也越高,本身值也越小,而获得最小分值的cdj在本帧内被选择,共后续处理。当确定了第一段虚线段后,以该段为起始线来对其他关联的虚车道线段进行分类,最终迭代产生新的跟踪多段线cp。本算法采用了如下准则:
此算法的含义在于用第一段虚线段作为比较的基准(即tdi)将其他虚线段(即cdk,cdh等)通过此算法进行两两比较,当两条虚线段与基准相互比较时,如果分别在阀值的两端,则取比阀值小的那条虚线段。但是当两条虚线段与基准相互比较时都同时比阀值小或大的时候则求与cp,tdi距离之和最小的虚线段,两两比较完之后(直到没有任何较近线段的剩余),最后确定第二条虚线段。重复上述过程依次求出以下虚线段,为了确保所求的多段线的正确性还会在后面进行查验。
2、多段线扩展阶段
对跟踪成功和未成功的多段线进行多种附件条件分析,来判断各多段线之间的关联性,使得各关联的多段线可以扩展成一个完整的候选车道线。在追踪阶段获得各候选多段线,但为使车道线连接平滑,没有错误分叉,需要对以上各多段线之间的位置关系进行确认,当满足下列关系时的多段线视为有效候选多段线:
无论实线还是虚线,候选多段线的第一个点(自底向上)需离下方参考多段线的最后一个顶点距离较近,即候选多段线的第一个点落在阴影区域内,而该阴影区域由两个线段的方向夹角θ、连接角φ、扇形角、径向半径和横向宽度等限定,如附图10所示,本例中推荐θ角为8~15度,φ角为2~5度,扇形角大小为25~40度,径向半径大小为30~50像素,横向宽度为的16~20像素。不仅如此,对于虚车道线,虚线段长度和间隔长度的比例关系应该相等,推荐比例在2∶3与1∶1之间。具有关联性的各多段线扩张生成候选车道线p。
2.车道线确定阶段
经过以上步骤后,根据一定的分数函数对所得的候选车道线p进行计分。
其中(0,0)原点定义在摄像头与地面垂直交点处。同时若该候选车道线p是由前帧追踪所得,则本帧候选车道线应得分值为当前分值和前帧车道线对应分值之和,以便形成积累效应。当分值不小于某一定阀值时确定为有效车道线,理想阀值设定范围为0.95~1.6;反之确定为非有效的车道线。认为非有效的车道线,为防止检测判断错误也并不被立即放弃,而是保留若干帧以上,为防止新出现车道线的漏检,以供后续参考分析,推荐采用保留5~20帧。所以该公式的使用,具有两点好处:对于较远的线,只有经过多帧的连续确认才被视为有效车道线,保证了较高的准确性;对于较近的长线,则很容易被视为有效车道线。
偏离预警决策阶段
对以上阶段确定的有效车道线,延伸获取其与处理图像区域边框的交点位置坐标,并选择左右车道线中最顶端端点与边框的交点位置坐标的沿宽度方向的子坐标值colNum,其中colNum的有效取值范围是0~Width(其中Width为图像宽度)。并计算该值与图像宽度中心的距离Dis=|Width/2-cloNum|(其中Width为图像宽度,||表示取绝对值)。同时,计算左向偏置距离L_Dist和右向偏置距离R_Dist,(初始时设定L_Dist和R_Dist变量的值为Max=A*Width,其中A为比例系数,A为整数且不小于2)。显然,但车辆从左侧偏离车道时,图像中车道线顶端点靠右侧显示;反之,靠左侧显示。同时设定,车道偏离预警距离阀值设定为DisWarn=K*Width,其中K为预警比例系数,K值取值系数范围为0.1~0.5,推荐采用K=0.3。偏离预警决策流程如附图10所示。