APP下载

边缘检测识别道路边界时消除标识线干扰的图像处理方法

2021-12-07陈双叶

北京工业大学学报 2021年12期
关键词:交点灰度阈值

陈双叶, 刘 智

(北京工业大学信息学部, 北京 100124)

图像边缘检测是一种被普遍使用的道路边界检测方法.Canny、Sobel、Laplace等边缘检测方法可以有效提取道路边缘,但是道路中的道路标识线也具有边缘特征,有时会影响对道路真实边界的判断.Annamalai等[1]、Duan等[2]借助Canny边缘检测方法检测道路边界的实验结果就受到了道路标识线的影响.Yan等[3]、于海峰[4]的研究利用了此特性将边缘检测算法应用于识别车道线.为了能更加准确地识别道路边界,本文提出一种利用边缘检测算法检测到的边缘的图像处理方法.该方法可以有效地降低标识线的边缘特征,同时保留道路真实边界的边缘特征,从而得到道路的真实边界.

1 降低标识线边缘特征的方法

1.1 图像坐标与标识线的直线拟合

本文使用的图像坐标系以图片左上角的像素作为原点,向右、向下分别为x轴、y轴正方向.直线模型计算简单且拟合精度满足本文方法的要求,能够较准确地描述直线道路的边界和道路标识线.故本文采用直线边缘作为输入对本文方法进行说明,并且为了后文进行几何约束的方便选择斜截式直线模型y=kx+b,其中:k为直线斜率;b为图像截距[5].

1.2 道路标识线宽度的阈值判断

下文将要提出的方法在对图像中的部分点是否可能是标识线的左右两端进行判断时,其中一个判断依据为两点的距离是否小于一个阈值,而通过车载相机采集到的道路图像往往具有强烈的透视效果,具有近大远小的特点[6],因此,阈值的选择需要根据图像的位置具体调整,位于图像下方距摄像机较近位置的阈值较大,位于图像顶端距摄像机较远位置的阈值较小.本文选取的阈值d和图像纵坐标y成线性关系

式中:h中为图像高度;dmax和dmin分别为选取的图像底端、顶端阈值.

1.3 紧邻边缘的处理

图像中的边缘可能会因不确定因素的影响,如进行随机霍夫变换时将一整条直线识别成2段,导致被边缘检测算法检测成多条紧挨的冗余直线.这种紧挨的直线会影响进一步的处理,故先要通过筛选将这种直线去除.具体算法为,对于检测到的直线集中的直线l1,将其斜率kl1和截距bl1与其余所有直线一一比较.若|kl1-kl2|

1.4 图像边缘的分类

一般情况下,标识线的灰度值要比路面的灰度值高.图1是一张经过高斯模糊的道路图像,其第280行的灰度变化如图2所示.

图1 示例道路图像Fig.1 Road image example

图2 图1第280行的灰度变化Fig.2 Grayscale of line 280 in Fig.1

如图2所示,4条标识线在灰度图上体现为4个波峰.边缘检测时由路面标识线产生的边缘一般会在该行波峰的上升或者下降过程中与该行相交[7].本文把检测到的边缘分成2类:灰度从左到右上升的和灰度从左到右下降的(分别简称上升边、下降边)以供进一步处理.考虑到道路图像近大远小的透视效果且图像中距离摄像机较远的部分分辨率较低,识别出的直线与实际图像偏差可能较大的特点,本文参考了针对道路图像透视效果的非均匀处理方法[8],通过判断边缘两侧的灰度值的大小对边缘的分类进行加权投票.具体方法如下.

将边缘进行分类后的效果如图 3所示,其中蓝色直线为上升边,绿色直线为下降边.可见图中的道路标识线产生的2个边缘分别被分类为上升边和下降边.

图3 经过分类的边缘Fig.3 Classified edges

1.5 基于上升边和下降边对边缘经过点的分类

本文以逐行的方式对原始图像的灰度图像进行处理,记原始图像的灰度图像中取得的一行为ly,y为该行纵坐标.在大多数情况下,进行边缘检测时道路标识线会以一个上升边和一个下降边构成的组合的形式被识别出来.本文方法首先要识别出这种成对的边缘与ly的交点,即将这种成对的交点与其余独立交点区分开.步骤如下:

1) 首先通过直线方程计算出各个上升边和下降边与直线ly的交点,记为集合A.

2) 把A中的点以横坐标升序的顺序进行排序.

3) 如果A中只有1个交点,则认为该交点为独立交点.如果A中有大于1个交点,则取A中的第1个点P1(x1,y)和第2个点P2(x2,y).如果P1为下降边的交点,则认为P1为独立交点.如果P1为上升边的交点且P2也为上升边的交点,则也认为P1为独立交点.如果P1为上升边交点且P2为下降边交点,则对P1和P2两点间的距离d=x2-x1进行判断.如果d

4) 将已经识别的交点从集合A中移除,重复步骤3),直到所有的点分类完成.

1.6 基于成对交点对原始图像的灰度图像的处理

1) 对上一步中得到的ly中每一对成对的交点P1(x1,y)和P2(x2,y),计算P1左侧3个点P11(x-1,y)、P12(x-2,y)、P13(x-3,y)的灰度值平均值,取整记为a1.同理,计算P2右侧3个点的灰度平均值,取整记为a2.

2) 如果x1≠x2,则将P1的灰度值设为a1,将P2的灰度值设为a2;如果x1=x2,则将P1的灰度值设为a2.

3) 将x1增加1,x2减少1,即P1右移1像素,P2左移1像素.重复步骤2),直到x1>x2.

如此处理后,成对的交点中间的像素灰度值会被两边的平均灰度值“涂抹”掉.如果成对交点中间是道路标识线,其颜色就会被周围路面颜色覆盖,降低其边缘特征.如果成对交点非道路标识线,两侧的不同灰度值会在成对交点中央形成新的边缘特征,从而维护真实道路边界的边缘特征.

1.7 未能准确识别边缘情况的处理

实际操作过程中,有时边缘识别算法只能识别出道路标识线左右2条边中的1条.按本文上述方法处理后体现为只有1个上升边或者1个下降边,从而在进一步处理时只能被识别为独立交点.如在图 4中,边缘识别算法只识别出了图中左侧道路标识线的下降边和右侧道路标识线的上升边.而且,出现这种结果往往是由于道路标识线的质量较差,经常还存在识别的边缘与标识线实际边缘之间存在误差的情况.这种边缘也会影响对道路真实边界的判断,却在上述方法中无法得到有效处理.因此,有必要针对这种情况单独进行处理.

图4 未能准确识别边缘的情况Fig.4 Example of failing to identify edges accurately

对每个独立交点,均通过K均值算法对其水平附近范围内点经过高斯模糊的灰度值进行聚类,并通过聚类的临界点尝试找出其中相当于上升边交点和下降边交点的点[9].具体方法如下:

2) 对范围内的点通过K均值算法进行聚类.聚类个数为2,初始聚类中心选取为-1和256.终止条件为聚类中心不再变化或者聚类轮数超过4轮.

3) 检查2个聚类中心的灰度差值.若灰度差低于设定的阈值,则认为该灰度差是道路中正常的灰度变化,不是由道路标识线产生的;若灰度差不低于设定的阈值,则进入下一步.

4) 选取聚类中心灰度值较低的聚类的最大值作为临界点.检查范围内的点的灰度值是否从左到右先增加超过临界点,后降低低于临界点.如果符合此种特征,则认为超过临界点和低于临界点的点是一对上升边交点和下降边交点,并按照1.6中的方法进行处理.图5为图4经过本文方法处理后的灰度图像.

图5 经过处理后的图4Fig.5 Fig.4 after being processed

1.8 基于径向模糊减轻聚类误识别影响的方法

经过上述几步的处理后,图像中的道路标识线的边缘特征显著降低且道路真实边界的边缘特征基本不受影响,如图5所示.但是,上述通过聚类进行处理的方法有时会产生误识别,可能导致处理后的道路图像出现“毛刺”.这种“毛刺”可能会降低道路真实边缘的边缘特征,影响对道路边界的识别.图6为一种产生较为明显的“毛刺”的情况.

图6 道路边缘的“毛刺”Fig.6 “Spikes” on the edge of the road

径向模糊是指摄像机高速靠近或者远离目标时得到的目标图像出现的从中心到边缘的放射状的模糊.本文通过模拟径向模糊的方法对此种可能出现的“毛刺”进行处理,从而保留道路真实边界的边缘特征[10-11].

本文使用道路的消失点作为径向模糊的“中心点”.该消失点由检测到的直线的交点通过排除离群点后取坐标平均值得到,获得消失点的具体方法非本文重点,不细述[12].通过在要处理的目标点与消失点构成的直线上的目标点周围取点的灰度值进行加权运算,对图像中的点P0(x0,y0)按权重矩阵A、消失点P(x,y)进行径向模糊操作的方法为

式中:G(P)指点P的灰度值;A及其中的数值a-n~an是预先设定的权重参数.

通过计算点P0和点P的距离d0,使用反三角函数计算了点P0和点P所组成的直线与水平线的夹角θ.随后通过使用三角函数,计算距离P在[d0-n,d0+n]、位于与水平线成夹角θ的直线上的(2n+1)个点(根据选取的权重矩阵调整)的横纵坐标.最后按照矩阵A对P-n~Pn的灰度值进行加权计算,得到处理后的点P0的灰度值.即假设目标点在当前点正左方,本文的径向模糊操作相当于对当前点按矩阵A进行卷积运算.实际操作时,使用四舍五入将点坐标转换为整数,如果出现点坐标位于图像外的情况,则不计算该点并提高其他点的权重.

如果对整张图片中所有点都进行径向模糊处理,则对没受到前一步错误识别的影响产生“毛刺”的图像区域进行处理时会浪费很多时间,因此,本文方法只对前一步中选取的进行聚类的点进行处理.图6经过此方法处理后如图7所示,可见,图像中的“毛刺”变得平滑,由于这种模糊是以道路消失点为基准的,图像只会沿着道路边界的方向模糊,所以处理后不会对道路边界的边缘特征产生影响.

图7 图6经过本文径向模糊方法处理后的图像Fig.7 Image of Fig.6 processed by the radial blur method proposed in this paper

经过上述几步的处理后,图像中的道路标识线的边缘特征显著降低且道路真实边界的边缘特征基本不受影响.将此时的图像再次进行边缘识别,即可有效排除道路标识线对道路真实边界识别的影响.

2 基于本文方法的道路识别系统

因为上述方法需要边缘检测得到的图像边缘,无法单独使用,所以为了确认上述方法的效果,本文搭建了一套简单的基于边缘识别的道路边界检测系统.系统整体结构如图8所示.

图8 系统整体结构Fig.8 Overall structure of the system

2.1 图像的预处理

图像预处理的目的是通过减少图像中的无关信息,增强有关信息的可检测性来提高图像识别的准确度和可靠性.本系统通过图像灰度化、图像尺寸调整、高斯模糊、灰度拉伸以及感兴趣区域截取来对图像进行预处理.

因为本文所使用的算法没有使用图像中的颜色信息,所以系统将原始图像进行灰度化.图像尺寸如果过大,会显著降低本文中使用的各种算法的运行速度,而且大尺寸图片中提供的图像细节信息也没有用处.因此,预处理时选择将输入的图片大小缩小.图片中的细节,如道路的纹理,会对边缘检测产生影响,可利用高斯模糊来忽略图片中这种不必要的细节[13].随后使用灰度拉伸来使图像的直方图充满整个灰度范围,提高图像的动态范围[14].最后,根据道路边界可能出现的位置拟定图像的感兴趣区域,可以缩小进一步图像处理的范围,提高运算速度.一般情况下,道路处于图像的下方位置,因此,系统截取图片的下半部分作为感兴趣区域供进一步处理.具体的截取位置根据相机的角度进行调整[15].

2.2 边缘识别

系统使用OpenCV中Canny边缘检测算法进行边缘识别,再通过随机霍夫变换得到边缘直线[16].最后,通过几何约束筛选直线斜率和直线位置排除部分无效直线,如部分道路上的阴影产生的直线[17].

其中,Canny边缘检测的阈值选择会影响图像边缘检测结果.阈值选取越高,检测到的边缘越少,去除的无效边缘也越多.但是阈值选取过高,则可能会去除有效边缘.此外,道路的左右边界也可能会因结构、光照、到摄像机的距离等因素的差异,导致得到最佳的边缘检测结果时的阈值不同[18].系统就上述问题,设计了下述方法进行边缘识别.

首先,将上一步得到的图像感兴趣区域从正中分割为左右两部分,认为道路的左右边界分别存在图像的左右部分,然后选取初始的Canny边缘检测阈值对左右图像分别进行边缘检测.输出的边缘二值图像经过随机霍夫变换和几何约束筛选后,如果单侧的直线数量少于选取的最大值,则输出这组直线;如果多于选取的最大值,则增加Canny边缘检测阈值重新进行处理,直到直线数量小于选取的最大值.在处理连续的图像(如视频或者实时采集的图像)时,使用的左右图像Canny边缘检测阈值可供下一帧图像处理时使用,从而提升系统运行效率.

2.3 应用本文算法后图像的再次边缘识别

使用最后得到的左右直线按照第1节中的算法对原始图像的灰度图像进行处理.处理完成后重新使用上一步中选取的Canny边缘检测阈值进行边缘检测,再次得到左右2组边缘直线.

2.4 道路边界直线的选取

上一步得到的2组边缘直线一般在道路之外仍然存在多条直线.系统对每一条边缘直线l,计算其与图像感兴趣区域下方1/4位置的一行的交点Pl(xl,y).选取xl最大的左侧边缘直线l作为最终选定的道路左侧边界,选取xl最小的右侧边缘直线作为最终选定的道路右侧边界.

3 实验结果及分析

为检验本文所提方法的有效性、实时性,本文使用134张道路图像进行实验,其中包括有道路标识线的和无道路标识线的.部分道路图像采集于百度街景地图以及谷歌街景地图.实验旨在检验本文方法是否能够降低图像中道路标识线的边缘特征以及能否保持道路边界的边缘特征.实验使用的平台为PC机(CPU Intel(R) Core(TM) i5-6300HQ CPU @ 2.30 GHz,内存8 GB,Windows 10 x64 18362,OpenCV 3.4,Python 3.6).

实验结果如下:实验使用的134张道路图片中,应用本文算法前共有235条道路真实边界体现边缘特征,共有135条道路标识线体现边缘特征;应用本文算法后,体现边缘特征的道路真实边界减少为220条,体现边缘特征的道路标识线减少为15条.即本文算法能够有效去除其中约88.9%的道路标识线的边缘特征,同时保留其中约93.6%的真实道路边界的边界特征.实验过程中用于处理图像的成对交点中,有45 467对交点是图像上升边和下降边与该行的交点,有34 769对交点是由单独的上升(下降)边交点经过本文所述聚类算法找到的.

部分实验结果如图 9所示.从实验结果可以看出,本文方法在基于边缘检测的道路边界检测系统中,能够有效地降低图像中道路标识线的边缘特征,同时对道路真实边界的边缘特征影响较小,从而能够有效排除道路标识线的干扰,得到真实的道路边界.实验处理的交点对中有很大一部分来自于聚类算法的查找,由此可以认为本文算法能够应对图像边缘检测时只识别出道路标识线单侧边缘或者识别出的边缘位置和标识线实际边缘位置有一定偏差的情况且对边缘检测的准确性要求较低,只要边缘检测能够识别出道路标识线的大体位置,就能够有效地对其进行处理.

图9 部分实验结果Fig.9 Partial results from the experiment

导致存在未能有效去除的道路标识线边缘特征的情况的主要原因如下:

1) 道路可能受到行车痕迹等因素的影响,图像本身就存在与道路方向平行的强烈灰度变化,或者道路不同车道之间由于道路材质不同等原因导致灰度值明显不同.因此,即使本文算法成功去除了道路标识线本身的边缘特征,按照1.6中的处理方法,不同车道之间的灰度差会形成新的边缘特征.事实上这种情况下即使道路上不存在道路标识线,边缘检测算法也会在灰度明显变化的位置检测出边缘.如图9中最后一组实验结果,从中间图片可以看出,本文算法已经去除了道路标识线的边缘特征,但因左侧标识线外的道路材质灰度值和右侧道路有较大差距,对道路真实边界的识别仍然受到了影响.

2) 对于标识线宽度阈值内出现的连续多个边缘特征较差的道路标识线(如双黄线),本文所采用的算法未进行考虑.

导致未能保留真实道路边界特征的主要原因是道路标识线距离道路真实边缘较近且图像道路和非道路区域灰度值差别较小,从而对道路标识线进行操作时“误伤”到真实道路边缘.

在用时方面,本文提出方法在本文实验环境下,平均运行时间为200 ms.这个较长的运行时间主要是以下2个问题导致的.

1) 本文方法需要进行大量的数学运算,而实验采用的Python这种解释型语言的运算速度显著低于编译型语言.

2) 本文方法需要大量频繁地对图像中像素的灰度值进行存取.实验所采用的OpenCV Python库使用NumPy存储图像,NumPy通过将向量操作用C进行实现来避免Python循环的开销.但是本实验逐像素对图像进行操作不是向量操作,无法享受NumPy带来的性能便利,需要承受通过Python循环逐元素访问NumPy的巨大开销.资料显示,使用向量操作NumPy的速度是逐元素访问NumPy的速度的1 000倍以上[19-20].

就上述2个问题,可以通过使用运行效率更高的方式(如采用C、C++等编译型语言)重新实现本文方法来解决,预计可显著提升本文方法的运行速度,达到对图像进行实时处理的目的.

4 结论

1) 本文提出了通过边缘检测识别道路边界过程中一种消除道路标识线干扰的图像处理方法.该方法可以利用边缘检测算法检测到的边缘对图像进行处理,达成保持道路边界边缘特征的同时降低道路标识线的边缘特征的效果.

2) 本文搭建了一套基于该方法的道路边界识别系统,并使用道路图像来对本文方法进行检验,确认了该方法能有效消除道路标识线对基于边缘检测的道路边界检测方法的干扰.

猜你喜欢

交点灰度阈值
航空滤光片阵列多光谱图像条带灰度调整算法
非平稳声信号下的小波变换去噪方法研究
土石坝坝体失稳破坏降水阈值的确定方法
基于小波变换阈值去噪算法的改进
一种改进小波阈值去噪法及其仿真
天津港智慧工作平台灰度发布系统和流程设计
Arduino小车巡线程序的灰度阈值优化方案
阅读理解
借助函数图像讨论含参数方程解的情况
试析高中数学中椭圆与双曲线交点的问题