算法类学习笔记 ———— 车道线检测

文章目录

介绍

车道线是用来管制和引导交通的一种标线,由标化于路面上的线条、箭头、文字、标记和轮廓标识等组成。道路交通线又分为指示标线、禁止标线和警告标线。快速、准确地检测车道线在协助智能车辆路径规划和偏移预警等方面尤为重要。目前较为常见的车道线检测方案主要是基于传统计算机视觉地检测,近年出现了基于深度学习的道路特征预测来替代传统方法。同时随着智能交通地逐步发展,基于雷达等高精设备的车道线检测也成为了可能。

基于传统计算机视觉地车道线检测

传统计算机视觉的车道线检测主要依赖于高度定义化的手工特征提取和启发式的方法。广泛使用的检测方法主要分为基于道路特征和道路模型这两种方法。基于道路特征的检测方法主要利用车道线与道路之间的物理结构差异对图像进行后续的分割和处理,突出道路特征,实现车道线检测。基于道路模型的检测方法主要利用不同的道路图像模型,对模型中的参数进行估计与确定,最终于车道线进行拟合。

基于道路特征的检测方法

基于颜色特征的检测方法

基于灰度特征的检测方法

基于灰度特征的检测方法主要通过提取图像的灰度特征来检测道路边界和道路标识。可以通过直接采集灰度图进行处理,也可以通过图像转换将原始图像转为灰度图。在车道图像中,路面与车道线交汇处的灰度值变化较剧烈,可以利用边缘增强算子突出图像的局部边缘,定义像素的边缘强度,通过设置阈值的方法提取边缘点。常用的算子有Sobel算子、Prewitt算子、Log算子和Canny算子。

这种特征提取进行检测的方法结构简单,应用广泛,对于路面平整、车道线清晰的结构化道路尤为适用。但当光照强烈、有大量异物遮挡、道路结构复杂、车道线较为模糊时,检测效果会受到较大的影响。

基于彩色特征的检测方法

基于彩色特征的检测方法主要通过图像的彩色特征来检测道路边界和道路标识,主要涉及颜色空间的选择和分割策略选取两方面。颜色空间有一组数值描述图像信息的抽象模型,通常为3个数字,常用的颜色空间模型有RGB空间、HSI空间、CIE Lab空间等。具体的模型介绍可以查看本人的其他文章:车载前视摄像头学习笔记 ------------ 其他颜色模型车载前视摄像头学习笔记 ------------ 摄像头输出数据格式(RGB),这里就不展开介绍了。在不同的颜色空间中,车道线和道路有各自的特性,通过分析彩色信息的空间分布,可以利用分割策略对车道线进行检测。通道用于车道检测的分割策略为阈值分割和色彩聚类两种方法。由于色彩信息对于图像或图像区域的大小、方向邓特征变化不敏感,其对于局部特征李庸彩色信息不能有效地进行捕捉,所以仅利用彩色特征地方法往往会将大量不必要的图像检测出来。

基于纹理特征的检测方法

基于纹理特征的检测方法主要通过对包含多个像素点的区域中的纹理强度和纹理方向进行计算,从而对车道线进行检测。这种方法具备较强的抗噪能力。当光照强度改变、图像分辨率改变时,计算结果会有偏差。同时,二维图像中提取的纹理特征与三维物体实际的纹理会有一定差别,一定程度上影响了检测准确度。

纹理是由于物体表面的物理属性的多样性而造成的,物理属性不同表示某个特定表面特征的灰度或者颜色信息不同,不同的物理表面会产生不同的纹理图像。因而纹理作为图像的一个极为重要的属性,在计算机视觉和图像处理中占有举足轻重的地位。纹理是图像中特征值强度的某种局部重复模式的宏观表现。然而,对于自然纹理图像而言这种重复模式往往是近似的和复杂的,难以用语言描述,而人类对纹理的感受多是与心理效果相结合的。Hawkins曾经对纹理给出了一个比较详细的描述,他认为纹理有三个主要的标志:

1) 某种局部的序列性在比该序列更大的区域内不断重复

2) 序列是由基本元素非随机排列组成的

3) 各部分大致是均匀的统体,在纹理区域内的任何地方都有大致相同的结构尺

基于多特征融合的检测方法

针对单一道路特征提取的检测方法存在的缺陷,基于多特征融合的检测方法通过运用多种道路特征来进行车道线检测,提高检测效果。

基于道路模型地检测方法

道路的几何模型大体分为两种:直线和曲线。直线模型计算简单,是最常用的道路模型,而曲线模型较为复杂,所以应根据不同的情况结合多种模型的使用。

直线模型

直线模型主要建立在车道线为直线的假设基础上,直线模型的数学表达式如下:
u = k ( v − h ) + b u=k(v-h)+b u=k(v−h)+b

u、v分别代表道路图像的横纵坐标,k代表斜率,b为截距,h代表道路消失线在途中的纵坐标。得到了道路消失线的水平位置后,只要得到k和b就可以确定车道线在图像中的位置。在车辆行驶速度不搞,且道路弯曲曲率不大的情况下,可以有较好的识别和导航效果。

曲线模型

针对一些车道线检测算法识别不高、弯道检测不准确的问题,基于双曲线模型的车道线检测算法首先运用Canny算子对道路边缘进行检测,采用Hough变换提取道路边界点,并使用扩展的Kalman滤波进行预测和跟踪来减小道路扫描范围;最后通过左右车道边界参数与双曲线模型参数进行匹配,利用最小二乘法来求解模型参数,完成车道边界重建。

多种路况下的车道线检测结果

基于深度学习的车道线检测

LaneNet + H-Net车道线检测

卷积神经网络中产生的二值化车道线分割图需要进一步分离到不同的车道线实例中。收到语义分割和实例分割中对每个像素点进行预测的启发,LaneNet将车道线检测问题转化为实力分问题,即每个车道线形成独立的示例,但是都属于车道线这一类别。H-Net由卷积层和全连接层组成,利用转换矩阵H对同一车道线的像素点进行回归。对于某张输入的图片,LaneNet负责输出示例分割结果,每条车道线输出一个标识ID,H-Net输出一个转换矩阵,对车道线像素点进行修正,并对修正后的结果拟合出一个三阶多项式作为预测的车道线。

SCNN车道线检测

虽然CNN具有强大的特征提取能力,但由卷积块堆叠的CNN架构没有足够充分的探索图像行列之间的空间关系能力,这个能力对于学习前先验形状的对象尤为重要。如下图所示,CNN对于被遮挡的车道线识别效果并不好。针对此问题,新的网络Spatial CNN(SCNN)将传统卷积层接层(layer-by-layer)的连接形式转为特征图中片连片卷积(slice-by-slice)的形式,使图像中的像素行和列之间可以传递信息。SCNN对于长距离连续形状的目标、大型目标以及有着极强空间关系但外观线索不明显的目标具有很好的检测效果。可以从下图看出,SCNN相较于CNN对车道线的识别效果优秀。

尝试在深度网络中使用空间信息的工作一直在持续。使用循环神经网络(RNN)按每行或每列传递信息,但每个像素点只能接受来自同一行或同一列的信息;使用长短期记忆网络(LSTM)的变体来探测语义分割中的上下文信息,但是计算量较大;使用CNN和图模型(如马尔可夫随机场(MRF)和条件随机场(CRF)结合)通过大卷积核来传递信息。相较于上述方案,SCNN在信息传递过程中计算效率比MRF和CRF高,同时由于使用残差进行信息传递,使训练更容易进行并适用于多种网络。传统CNN和图模型结合时,每个像素点接受来自整个图像的其他像素的信息,这导致计算的代价过大,不利于车道线的检测。MRF大卷积核的权重在学习上也比较困难。SCNN在信息传地上与MRF/CRF的不同之处主要在于信息传递方向,MRF/CRF在信息传递方向上较为无序,每个像素点需要接收大量的信息,计算量大,存在过多的冗余信息;而SCNN的信息传递方向是顺序的。对于行列数较多的图像,SCNN可以减少大量的计算。

(a) _ MRF/CRF信息传递,(b)_SCNN信息传递


SCNN与其他方法在车道线检测中的表现

基于激光雷达的车道线检测

基于视觉的方法存在较多的局限:光照敏感、依赖于完整且较为统一的车道线标识、有效采样点不足以及车道线被水覆盖时视觉系统会失效等。这里就衍生出了基于激光雷达的车道线检测,主要是基于反射强度信息的方法。此方法主要是基于激光雷达反射强度信息形成的灰度图,或者根据强度信息与高程信息配合,过滤无效信息,然后对车道线拟合。

在激光雷达获取的点云中,通过反射强度值,可以区分出道路、车道线。在激光雷达获取的道路环境的三维点云中,检测每一个激光层采集到的可行驶区域的回波强度是否发生变化。如果发生变化,将变化点提取并标记。同时,还可以通过对点云数据中由高程数据的点进行滤波,一定程度上可以确定出行驶区域,同时剔除一些和车道线回波强度接近的物体。通过对提取的车道线点云进行聚类和去噪,再利用最小二乘法进行拟合,最终提取出车道线。

附录

颜色阈值分割

以期刊《基于HSV颜色阈值分割的车道线检测中的》介绍,经过高斯滤波和HSV颜色转化后,对于马路两边的黄色车道线的颜色与周边物体的颜色存在明显区别。如下图所示。

在这里我们则需要基于HSV的颜色空间模型选取适合的颜色阈值,上下阈值均需要明确定义。在使用特定的函数将图片中的车道线与其他背景区域分开来。在选取了合适的颜色与之后,黄色车道线就可以与背景区分割开来,形成下方最终的效果图。

色彩聚类

详细内容设计可参考期刊《LaneAF: Robust Multi-Lane Detection with Affinity Fields》

相关推荐
wclass-zhengge34 分钟前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌34 分钟前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.35 分钟前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
大二转专业3 小时前
408算法题leetcode--第24天
考研·算法·leetcode
凭栏落花侧3 小时前
决策树:简单易懂的预测模型
人工智能·算法·决策树·机器学习·信息可视化·数据挖掘·数据分析
hong_zc4 小时前
算法【Java】—— 二叉树的深搜
java·算法
吱吱鼠叔5 小时前
MATLAB计算与建模常见函数:5.曲线拟合
算法·机器学习·matlab
嵌入式AI的盲6 小时前
数组指针和指针数组
数据结构·算法
Indigo_code8 小时前
【数据结构】【顺序表算法】 删除特定值
数据结构·算法
阿史大杯茶9 小时前
Codeforces Round 976 (Div. 2 ABCDE题)视频讲解
数据结构·c++·算法