车辆的可行驶区域包括了结构化的路面、半结构化的路面、非结构化的路面。结构化的路面一般是有道路边缘线,路面结构单一,比如城市主干道,高速、国道、省道等,这个路面的结构层执行一定的标准,面层的颜色和材质统一。半结构化的路面是指一般的非标准化的路面,路面面层是颜色和材质差异较大,比如停车场,广场等,还有一些分支道路。非结构化的路面没有结构层,天然的道路场景。自动驾驶需要实现路径规划,就必须要实现对可行驶区域的检测。对于城市车辆,自动驾驶解决结构化路面和非结构化路面的检测和识别就可以,对于野外的无人驾驶车辆,需要解决非结构化路面的检测。本文主要讲基于视觉的路面检测方法,有些方法中结合了雷达进行可行驶区域的辅助检测。当前最热门的基于视觉和雷达的道路场景三维重建是自动驾驶的技术最成熟的方案,该方法已经脱离的传统的纯视觉路面检测方法(三维重建直接得到三维道路场景信息,可行驶区域作为三维重建中的一个面,不需要再做检测),这里不做介绍。
可行驶区域的检测主要是为自动驾驶提供路径规划辅助,可以实现整个的路面检测,也可以只提取出部分的道路信息,比如前方一定区域内的道路走向或者道路中点等,只要能结合高精度地图实现道路路径规划和障碍物躲避,不一定要完全的提取出完整的路面可行驶区域。
对不同的环境,有很多不同的检测方法,从当前的一些论文来看,不同场景中使用的方法有相同的地方,基本的方法有基于路面颜色、道路模型、路面纹理特征等获取路面的基本结构特征,通过这些特征进一步的获得灭点、道路边缘线、道路的基本方向(直走、左转、右转、左急转、右急转)等潜在信息。对这些特征使用传统的分割提取方法或者机器学习的方法进行可行驶区域的最终提取。现有的论文中每种路面的检测方法融合了以上的一种或者多种基本信息提取方法。下面主要分析一下这些基本的方法(只做具体方法介绍,每个算法的原理不详解,太多了)。
一、直接特征:颜色
对于结构化和半结构化的路面,颜色特征是非常明显的,结构化的沥青路面,颜色集中均匀,对于图像常用的RGB颜色空间,提取这些颜色特征相对来讲比较简单。在机器学习中,可以使用监督学习,通过手动标注的路面数据集,学习出非路面和路面颜色分割区域,手动标注时给路面和非路面区域贴上标签,通过学习得到路面的分割结果,当然,在这个过程中学习的不仅仅是路面与非路面的颜色差异,还有其它特征。传统的路面颜色提取的方法还有高斯模型,分离出背景路面与前景物体,这种方法的局限性在于前景的物体太多,颜色分布范围太广,前景和背景分割成两个部分比较难,在路面区域内车辆较少,前景与背景之间分割效果较好。除此之外根据颜色特征来提取路面的基本区域时,光照不变性方法使用的最为广泛,该方法可以消除光照的不均匀和遮挡产生的阴影问题。
在俯视图中基于颜色分割实现路面检测
基于光照不变性的路面检测
二、直接特征:纹理
不管是结构化的路面还是非结构化的路面,道路路面连续性决定了路面的纹理能够基本保持一致,对于路面的微小差异,这种一致性仍然非常明显。纹理提取的最基本的方法就是使用Gabor滤波器,Gabor特征对于边缘比较敏感,可提取出边缘的方向,受光照影响较小,同时具有尺度不变性。利用Gabor滤波器,可以很好的提取道路边缘特征,另一方面车辆在行驶过程中,在路面上留下的挤压和痕迹都有沿着道路方向的纹理特征,Gabor特征可以很好的提取这些特征的方向,这些方向就能够表达一些基本的路面区域特性。
Gabor特征
三、直接特征:边缘
对于结构化和半结构化的路面,有明显的道路边缘分界,提取这些道路的边缘分界,可以分割出道路路面,常用的边缘检测算子有sobel、prewitt等算子,使用算子来进行提取边缘的核心思想就是将一个待检测的像素与周围的像素关联起来,通过设定算子的水平、竖直方向的权重,计算待检测像素的左右、上下的像素差值的和,判断待检检测像素的水平与竖直的像素差异性,判断该像素点是否是边缘点。实际上图像的边缘是一个连续过度的区域,使用算子的思想利用了这个过渡区域中待判断的像素点两边像素值差别较大的特点,即待判断像素点与领域的像素灰度值差别有关。canny边缘检测算法结合了图像像素点与周围点的一阶导数和高斯二阶导数,得到更准确的边缘点信息更加准确。提取到边缘后,对道路边缘内部的噪点进行去除,提取出更加准确的路面区域。
基于边缘检测的道路路面检测
这个也是基于边缘和颜色的路面检测方法
四、间接提取:灭点
灭点又叫消失点,是平行透视变换的一个交点,通俗的理解就是在透视变换中,视场中的平行线都会相交与一点,这个点就是灭点。标准的马路道路边缘存在平行直线,平行直线在图像中的交点在灭点附近,通过提取取多对平行直线(道路边缘线、车道线)的交点,求取这些交点的中心位置,可以近似的估计出灭点。对于非结构化的路面,使用Gabor提取的方向进行统计估计出灭点。求出灭点后,可以使用灭点约束提取的道路边缘线,去除一些干扰的边缘直线,对于标准的路面,直行的路面边缘线平行度更高,灭点距离道路的边缘直线距离更近。对于非结构化的路面,提取到灭点后可以使用灭点来找大概的道路边缘,快速的提取一个三角形的路面可行驶区域。
只使用灭点来进行的道路路面估计
灭点是间接提取的,要借助前面的边缘等特征进行处理后获得。
五、分割方法:道路模型
道路模型的分割方法出发点是,沿着车辆前进方向,道路的方向和区域在变换中存在这一些不变的大轮廓特征,这些大轮廓特征概括为道路的走向,主要为直行、拐弯。根据拐弯的程度可以分为急拐弯和缓拐弯。利用这个基本的思想,我们可以提前设定一些基本的道路模型,在提取一定的道路特征基础上,拿已有的道路模型去“匹配”,也可以变换基本道路模型适应更多的路面场景。在提取基本特征的基础上获得准确度道路路面区域。
针对道路路面遮挡时,一般的路面模型不在适用,还有学者提出了有车辆的判别方式,从而保证前方车辆非常多,路面遮挡严重时,依然能够给出当前可行驶区域,避免了一般道路模型的不适应性。
六、分割方法:机器学习(SVM与深度卷进神经网络)
SVM:支持向量积在路面分割的学习中非常有效,也是使用的非常多的方法之一,主要策略是标注一幅图中的路面区域和非路面区域,通过SVM的学习,得到路面区域的检测分类器,加载分类器检测出可行驶区域的路面。
支持向量机的路面检测结果
深度卷积神经网络:语义分割是深度学习做自动驾驶场景识别的一个非常有效的方法,基本的原理是通过颜色进行聚类,分割出路面,行人等。跑过的模型中PSPNet效果非常好,实时性也比较好。一般的深度学习方法比如CNN等进行训练识别可行驶区域的方法还是需要标注的数据集,通过监督学习实现路面的分类提取。
七、图像变换方法:俯视图
在路面检测的方法中,图像的变换对于路面的提取非常有利,前视图变换到鸟瞰图,再提取道路路面区域,比较直观,方便进行路面提取的准确率评估。从前视图变换到俯视图中间存在一个透视变换,对每一个摄像头参数不同、摄像头的安装高度角度不同,都需要通过标定实验求出一组特定的变换矩阵,使用变换矩阵变换得到鸟瞰图。
在鸟瞰图中评估道路路面检测的准确性
八、总结
混合多个特征进行检测,结果比使用单个特征检测方法要好
基于颜色和灭点提取的非结构化可行驶区域
基于道路模型和灭点的路面检测方法
最后,我自己做了一下路面的检测,针对的是结构化道路和非结构化道路,使用安装在前保险杠上的摄像头提取路面
这是结果:
PS:CSDN的博客编辑器太差了
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2019.10.27更新---------------
有很多小伙伴问本文的论文,我翻了好久在硬盘中找到,大半夜的找到,真的是感人呀,我已经上传到资源了,大家可以自己去下载了!!!
下载链接:https://download.csdn.net/download/liaojiacai/11928723