作者:liaojiacai    

邮箱: ljc_v2x_adas@foxmail.com


从ADAS到自动驾驶(三):车道检测
        车道线检测是我最先接触并自己实践了一把的ADAS算法,车道线的检测对于无人驾驶的路径规划来讲特别重要,自动驾驶不仅要求能够避障和道路交通信息感知,还需要满足遵守交通规则,对车道线检测的要求比较高,很多的交通规则的设计使得行人和车辆必须依照一定的规则进行移动,这些规则的参考标准除了来自于交通信号等外,就是道路车道线,通过检测车道线可以进一步的检测地面指示标志、进行前碰撞预警策略设计等。
         车道线的检测方法有很多,基于视觉的车道线检测有一下几种:基于霍夫之间检测、基于LSD直线检测、基于俯视图变换的车道线检测、基于拟合的车道线检测、基于平行透视灭点的。主流的方法就是这几种吧,当然使用雷达扫描也可以的检测的。下面讲分别讲一下霍夫直线检测、拟合、仿射变换进行检测车道线的原理,并给出变换的效果。
一、基于霍夫的车道线检测
霍夫直线检测有两种,但是原理相同。

一般的车道有三车道或者四车道,固定的前方摄像头的视角范围内,由于车辆周围的其他车辆的遮挡,不能够稳定的提取所有的车道,能稳定检测摄像头安装车辆所在车道线。检测当前车道线,被检测的车辆中不处于前方同车道内的车辆就可以根据被检测车辆坐标与当前车道线距离关系划分为左右两侧车道内的车辆。

本文进行的车道线检测是基于统计概论霍夫直线检测实现的,其原理是将图像的笛卡尔坐标系统转换到极坐标霍夫空间,从而完成点到曲线的变换,对应的每个像素坐标P(x,y)被转换到(r,theta)的曲线点上面。

同一条直线上的点P(x,y)都满足x*cos(theta) + y * sin(theta)  = r ,这样一组(r,theta)常量就对应了图像中位移确定的一条直线。遍历图像感兴趣区域的像素点时,不断的累加每个(r,theta)对应的数据点个数,当某一对(r,theta) 对应的统计的点数达到我们设定的阈值时就认为这些点在一条直线上,通过霍夫检测的同一条直线上的的点的个数,可以过滤掉很多干扰直线。

1、图像前处理的方法

对于原始的车载图像,是BGR的彩色图,对于只需要提取车道线的算法,车道线是宝色的,我们只需要保留有白色车道线的厚度图即可,所以对原始图的第一步处理就是灰度化。

原图:

第一步灰度均衡化:

第二步进行边缘检测:

边缘检测有很多方法。可以使用sobel算子或者canny边缘检测,其差别是,检测算子的模板中的权值不同,造成最后保留的边缘的细节部分有差别

2、提取车道线

在感兴趣区域内寻找车道线,大大缩减图像的处理计算量

通过霍夫检测直线,找到车道线:

3、标注车道线并进行相应的预警

通过标定实验,找到直线距离车道线左右边缘30cm范围内的报警区域,一旦车辆发生在预警区域内启动报警

4、车道线的检测的适应性

车道线检测需要适应多种情况,通过测试,这种算法有良好的鲁棒性,对于白天和夜晚都具有良好的适应性,相对于以上的两种算法明显有很多的优势,白天和夜晚的车道线检测效果:

夜晚:

偏离车道时的预警:

车道偏移基本功能实现,满足了对一般环境的要求,不足之处是对于曲率半径大于100的车道线还不能够识别,还需要有深入学习和算法设计。

二、基于透视变换变换的车道线检测

        采用仿射变换的方法是将前方图像的路面通过仿射变换为俯视图,在俯视图中将车道线提取出来,提取的方法也是寻找车道线的特征,按照灰度值进行二值化,然后采用边缘检测,得到车道线的边缘轮廓,将检测到的车道线提取出来。军事交通学院采用这种方法进行车道线检测,在高速公路上得到了很好的效果,这种方法的优点是,可以找到多条车道线,实时效果比较好,但是缺点是对于复杂路况稳定性比较差,仿射变换时图像的损失比较大,在仿射图中不一定能够检测到变形后的车道线,受到周边物体遮挡影响严重。不适用于路况复杂和摄像头的视角比较小的前方视野。
三、基于拟合的车道线检测

边缘点拟合依据的原理是:车道线是白色的,而路面是灰色的,车道线和路面存在稳定的灰度梯度差,通过设定合理的阈值,就可以将车道线的边缘提取出来,提取的车道线的边缘点有很多,找到同一水平位置相邻的车道线的边缘点,取他们的中点作为车道线上的一点,依次方法得到整个车道线的点,由于车道线的与路面的颜色灰度值会受到颜色变化的影响,所以单一的阈值分割出来的边缘点并不在车道线的中间,而是在一个区域内,车道线提取的中点集合并不是在一条直线上,而是分布在直线的两侧,要得到最终的车道线需要对这些点进行拟合,一般采用拟合函数进行拟合。清华大学、重庆大学等一些高校采用这种拟合的方法。这种方法的优点是计算量较小,可以拟合带有曲率的车道线,缺点是环境适应性差,受光照干扰较大,稳定性差。

四、方法对比

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

五、车道线检测中的跟踪算法
        车道线检测时容易丢失,为了保证检测效果的准确,使用追踪可以提升检测速度和准确率,追踪的基本思想是,车辆在前进的过程中,是一个连续的位移移动过程,对应的车道线变化也是一个连续到变化,这种变化体现在车道线的斜率上,前后两帧图像中的车道线的斜率相差不大所在的位置也不会差到太远,所以通过控制比较前后两帧中的车道线的斜率,在之前检测到的车道线区域附近进行限定。这就是跟踪的基本思想。
最近比较忙,整理的不够仔细,有错误的地方麻烦大家指出来,PS:这些方法是我15年做车道线检测的时候找到的,现在又有很多新方法,可以留言,我回头找一下总结更新本文,谢谢!!!

第七十篇:从ADAS到自动驾驶(三):车道检测相关推荐

  1. 实战:使用 OpenCV 的自动驾驶汽车车道检测(附代码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一.边缘检测 我们将使用 Canny 进行边缘检测.如果你不确定这 ...

  2. 第六十八篇:从ADAS到自动驾驶(一):自动驾驶发展及分级

    作者:liaojiacai     邮箱: ljc_v2x_adas@foxmail.com 从ADAS到自动驾驶(一):自动驾驶的发展及分级 从今天起,我将根据自己所接触的ADAS和无人驾驶技术,来 ...

  3. 第七十三篇:从ADAS到自动驾驶(六):可行驶区域检测

    ADAS到自动驾驶(六):可行使区域检测 车辆的可行驶区域包括了结构化的路面.半结构化的路面.非结构化的路面.结构化的路面一般是有道路边缘线,路面结构单一,比如城市主干道,高速.国道.省道等,这个路面 ...

  4. 第六十九篇:从ADAS到自动驾驶(二):ADAS的功能及发展

    作者:liaojiacai     邮箱: ljc_v2x_adas@foxmail.com 从ADAS到自动驾驶(二):ADAS的功能及发展          根据Wikipedia在线百科全书的定 ...

  5. 第七十一篇:从ADAS到自动驾驶(四):车辆检测

    从ADAS到自动驾驶(一):自动驾驶的发展及分级 好久没更新了,今天写一点吧!!! 下面所讲的车辆检测主要是针对车载传感器车辆检测,不是十字路口那种车辆检测,这个属于静态背景的车辆检测,和我们车载传感 ...

  6. 第四届汽车 ADAS 与自动驾驶论坛

    第四届汽车 ADAS 与自动驾驶论坛 – 21 日记录整理 3 月 21 日,CCIA 和佐思产研在上海组织举办了第四届汽车 ADAS 与自动驾驶论坛,邀请了吉利.长城.蔚来等车厂,地平线.ARM(暂 ...

  7. python路线寻优_使用模型预测控制和PID实现自动驾驶的车道保持

    本文为 AI 研习社编译的技术博客,原标题 : Lane keeping in autonomous driving with Model Predictive Control & PID 作 ...

  8. 视觉深度估计的Pseudo-LiDAR:弥合自动驾驶3D对象检测中的差距(CVPR2019)

    摘要 3D对象检测是自动驾驶中的一项基本任务.只要从精确但昂贵的LiDAR技术中获得3D输入数据,最新技术就可以以高度准确的检测率获得优势.迄今为止,基于廉价的单目或立体图像数据的方法导致精度大大降低 ...

  9. python进阶——自动驾驶寻找车道

    大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识h ...

最新文章

  1. Java异常机制及异常处理建议
  2. SharePoint 2013 开发——SharePoint Designer 2013工作流
  3. resourceAsStream
  4. .mat,.txt,.csv 数据转换为weka中的arff格式及matlab和Weka之间相互转换格式
  5. 探索.NET平台中的SIMD内在函数Vector
  6. python王者归来 pdf_OpenStack开源云:王者归来 PDF 下载
  7. 统计字符串元素出现的个数_LeetCode 1295. 统计位数为偶数的数字
  8. android mvp框架基类,Android MVP架构项目搭建封装,基类封装
  9. 一个 Python 报表自动化实战案例
  10. 网站程序 Bin目录下 dll无法删除,删除并编译后自动重新引用的解决方法
  11. 由一道CTF pwn题深入理解libc2.26中的tcache机制
  12. 基于java报刊图书征订管理系统
  13. C语言数字图像处理进阶---6 LOMO滤镜
  14. vue2中的watch监听
  15. 全网最通俗易懂的爬虫教程
  16. Redis-AKF/CAP原则
  17. 如何批量查询谷歌PR权重是多少?谷歌PR权重怎么批量查询
  18. 【笔记】ARM架构和ARM芯片(一)
  19. mysql主从 主机宕机_MySQL主从宕机的解决方法
  20. 20美金 php,树莓派|个头小本事大:13 种 20 美元以下的树莓派 Zero 替代品

热门文章

  1. 人脸检测:《MTCNN》论文详解2016
  2. git clone unexpected disconnect while reading sideband packet
  3. 基于python-opencv实现鼠标绘制矩形、直线并根据直线斜率实现图片旋转
  4. 滴水逆向学习总结第二期
  5. mac无法通过触摸版、无法通过鼠标拖曳文件?
  6. APP测试的入门书籍有哪些?
  7. Asp.Net C# - AES加密、解密
  8. 华为A1路由器虚拟服务器,华为a1路由器怎么设置端口映射规则
  9. 直播风口之下,视频社交会成为下一个流量平台吗?
  10. 自媒体人必看的几个文案网站,让文案创作更有色