OpenCv

每天一个知识点(九)

2020-04-03  本文已影响0人  少年小马

车道线的检测方法有很多,基于视觉的车道线检测有一下几种:基于霍夫之间检测、基于LSD直线检测、基于俯视图变换的车道线检测、基于拟合的车道线检测、基于平行透视灭点的。

1. 边缘检测+霍夫变换

方法流程:彩色图像转灰度,模糊处理,边缘检测,霍夫变换 这种方法一般能够检测出简单场景下的车辆目前行驶的两条车道线,以及偶尔的相邻车道(依赖前视相机的角度)。

该方法可以利用霍夫变换的结果(线的斜率),进一步过滤出左右车道线。不过同时,该方法也依赖于边缘检测的结果,所以调参(边缘检测、霍夫变换)以及其他的trick(roi选取等等)是很重要的。

2. 颜色阈值(拟合原理)

方法流程:将图像转颜色空间(一般HSV),对新的color space中的各个通道设置阈值(大于阈值取值为1,小于取值为0),得到结果。

该方法依赖于各通道的阈值的选取,只需要调整几个阈值参数,但个人认为该方法鲁棒性会较差,例如当前车辆前方的车辆可能会被全部置1。

边缘点拟合依据的原理是:车道线是白色的,而路面是灰色的,车道线和路面存在稳定的灰度梯度差,通过设定合理的阈值,就可以将车道线的边缘提取出来,提取的车道线的边缘点有很多,找到同一水平位置相邻的车道线的边缘点,取他们的中点作为车道线上的一点,依次方法得到整个车道线的点,由于车道线的与路面的颜色灰度值会受到颜色变化的影响,所以单一的阈值分割出来的边缘点并不在车道线的中间,而是在一个区域内,车道线提取的中点集合并不是在一条直线上,而是分布在直线的两侧,要得到最终的车道线需要对这些点进行拟合,一般采用拟合函数进行拟合。

这种方法的优点是计算量较小,可以拟合带有曲率的车道线,缺点是环境适应性差,受光照干扰较大,稳定性差。

3. 透视变换

方法流程:获取透视变换矩阵,透视变换,车道线检测(1或者2) 。

该方法的优点是将前视摄像头抓拍的图像转为鸟瞰图,能够检测到多条线。其关键在于透视变换矩阵的准确性(不考虑转换后的车道线检测),对于转换后的鸟瞰图,可以通过上述两种方式检测车道线。

在实际场景中,传统方法的鲁棒性确实不行,除去光照和邻近车辆的影响外,车道中间的指示箭头和人行道也是此类算法很难处理的挑战。因此,需要结合很多技巧。

4. 对比

上述方法为基本的车道线检测方法,其他方法在这些方法上融合出来的,比如放射变换后使用拟合或者霍夫检测直线,加上灭点的约束等方法。霍夫直线检测方法准确、简单,不能直接做弯道检测。拟合方法不稳定,优点是可以检测弯道。仿射变换优点是可以做多车道检测,缺点是在复杂情况下,前方车辆或者其他物体容易遮挡,受干扰严重。后面延伸的很多方法讲各种方法融合到一起,但是基本的变化还是有这几种方法的影子。

5.追踪法

车道线检测时容易丢失,为了保证检测效果的准确,使用追踪可以提升检测速度和准确率,追踪的基本思想是,车辆在前进的过程中,是一个连续的位移移动过程,对应的车道线变化也是一个连续到变化,这种变化体现在车道线的斜率上,前后两帧图像中的车道线的斜率相差不大所在的位置也不会差到太远,所以通过控制比较前后两帧中的车道线的斜率,在之前检测到的车道线区域附近进行限定。这就是跟踪的基本思想。

Project3代码原理:

一)目前国内外广泛使用的车道线检测方法主要分为两大类:

(1)基于道路特征的车道线检测;

(2)基于道路模型的车道线检测。

基于道路特征的车道线检测作为主流检测方法之一,主要是利用车道线与道路环境的物理特征差异进行后续图像的分割与处理,从而突出车道线特征,以实现车道线的检测。该方法复杂度较低,实时性较高,但容易受到道路环境干扰。

基于道路模型的车道线检测主要是基于不同的二维或三维道路图像模型(如直线型、抛物线型、样条曲线型、组合模型等),采用相应方法确定各模型参数,然后进行车道线拟合。该方法对特定道路的检测具有较高的准确度,但局限性强、运算量大、实时性较差。

(二)在这我介绍一种车道线检测方法,效果在高速上还可以,对于破损道路,光照变化太大等道路效果不佳,后续继续改进(直方图均衡以及多特征融合等等),这里有个基础版本的接口,大致步骤如下

(1)图像灰度化

失去了色彩信息,但保留了梯度信息,梯度意味着边缘。灰度化之后,像素矩阵的维数下降,运算速度提高,我们关注的梯度信息仍然保留。

(2)图像高斯滤波

模糊图片并消除噪声。

原理:重新计算图片中每个点的像素值,计算时区附近点的加权平均值,权重符合高斯分布(正态分布)。高斯滤波器对于抑制符合高斯分布的噪声很有效,是一种低通过滤器,能够有效过滤掉高频噪声。

(3)边缘检测

John F. Canny在1986年发明了Canny Edge Detection技术,其基本原理是对图片中各个点求gradient,gradient较大的地方往往是edge。Canny Edge Detection精妙的地方在于它有两个参数:low_threshold和high_threshold。算法先比较gradient与这两个threshold的关系,如果gradient > high_threshold,就承认这是一个edge point;如果gradient < low_threshold,就断定这不是edge point;对于其他的点,如果与edge point相连接,那么这个点被认为也是edge point,否则不是。

(4)获取掩膜,获取感兴趣区域

(5)霍夫变换检测直线

(6)将检测到的车道线分类,设置阈值,以图像中线分为左右两边的车道线,存入一个vector

(7)回归两条直线,即左右分别两个点,且求出斜率方程

(8)确定车道线的转弯与否

直线 转弯且有阴影 黄色车道线
上一篇下一篇

猜你喜欢

热点阅读