点击上方“小白学视觉”,选择“星标”公众号

重磅干货,第一时间送达

图0 印度泰米尔纳德邦安纳马莱森林公路上的车道检测

本文源码:https://github.com/KushalBKusram/AdvancedLaneDetection

计算机视觉在自动化系统观测环境、预测该系统控制器输入值等方面起着至关重要的作用。本文介绍了使用计算机视觉技术进行车道检测的过程,并引导我们完成识别车道区域、计算道路RoC 和估计车道中心距离的步骤。

摄像机校准(calibrateCamera.py)

几乎所有摄像机使用的镜头在聚焦光线以捕捉图像时都存在一定的误差,因为这些光线由于折射在镜头边缘发生了弯曲。这种现象会导致图像边缘的扭曲。以下视频用示例解释了两种主要的失真类型,强烈建议观看。

假设我们现在了解什么是径向失真,需要利用失真系数(k1、k2 和 k3)来校正径向失真。calibrateCamera.py是摄像机校准程序,默认情况下不运行该程序。建议在生成目标上的特征点和图像上的特征点的过程中至少使用20个棋盘图像。Main中的calibrate()将在/data/calibration中查找图像,但是我们也可以选择其他目录。

图1 左图:图像失真;右:未失真的图像

去除图像失真的整个过程是相当有趣的,OpenCV有一个很好的教程,解释了概念并举出一些例子。

透视变换(preprocess.py:8–19)

检测车道的第一步是调整我们的视觉系统,以鸟瞰的角度来观察前方的道路,这将有助于计算道路的曲率,因此将有助于我们预测未来几百米的转向角大小。自上而下视图的另一个好处是,它解决了车道线相交的问题。实际上只要沿道路行驶,车道线就是平行线。

鸟瞰图可以通过应用透视变换来实现,即将输入图像中车道区域四个点映射到所需点上,从而生成自顶向下的视图。这些点是根据个案确定,决定因素主要是摄像头在车辆中的位置及其视野。图2中的图片分别表示输入和转换后输出图像。

图2 左图:之前、右侧:之后

阈值(preprocess.py:22)

现在车道线是平行的,下一步将它们从输入图像上分割出来。输入图像包含RGB3个通道,车道线为白色或黄色。基于这个假设,输入图像可以转换为单个通道灰度图像,从而消除我们不需要的通道。另一个要转换为的颜色空间是HLS颜色空间,其中S通道可能会根据照明情况提供较好的结果。在以下示例中,将使用图像阈值,因为在给定的输入图像中它可以正常工作。图3在阈值处理后可视化输出。

图3 cv2.threshold(image, 220, 225, cv2.THRESH_BINARY)

下阈值(220)和上阈值(225)将根据输入图像手动调整。OpenCV有基于整体嵌套边缘检测的先进技术,而无需对阈值进行任何手动调整,但本文仍然使用的是简单的阈值技术。

车道像素查找(laneDetection.py:4~70)

预处理输入图像后,将在图像空间中确定并绘制车道。方法是在二进制图像(阈值图像)的下半部分绘制非零像素直方图,以观察模式:

图4直方图x=像素,y = 计数

由于像素值是二进制的,峰值代表大多数非零像素的位置,因此可以很好地指示车道线。直方图中的x坐标用作搜索相应通道的起点。滑动窗口方法的概念将应用在这里,以下视频说明了滑动窗口的概念,图5中是结果。

图5.滑动窗口的概念应用于图 4 的结果。

识别车道面积(laneDetection.py:85~149)

滑动窗口有助于估计每个车道区域的中心,使用这些 x 和 y 像素定位函数search_around_poly()可以适合二阶多项曲线。该函数适合 f(y)而不是 f(x),因为通道在图像中是垂直的。图6很好地说明了这一步。

图6 在这些通道上检测到二阶多项形

下一步是计算曲率半径,该半径可以使用与曲线局部部分附近的点紧密拟合的圆进行计算,如图 7 所示。曲线在特定点的曲率半径可以定义为近似圆的半径。此半径可以使用图 7 中的公式计算。

图7 曲率概念图的半径和用于计算 RoC 的方程

最后一步是在这些点之间放置一个多边形,并将其投影回原始图像,来突出显示车道区域。曲率的车道面积和半径是根据像素值计算的,像素值与真实世界空间不同,因此必须转换为现实世界的值,这涉及到测量我们投射扭曲图像的车道部分的长度和宽度。为简单起见,我们可以假设大多数车道通常长 30 米,宽 3.7 米,并且代码使用这些值将像素空间值转换为实际仪表测量值。

图 8 最终预期结果突出显示车道区域

结果

下面的视频显示,我们的结果还是非常不错的。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

使用OpenCV实现车道线检测相关推荐

  1. 基于OpenCV 的车道线检测方法

    车道线检测是图像处理运用到无人驾驶的一项技术,目前也过渡到了部分汽车上,高速公路的自动车道保持就是一个应用. 最近研究了两个基于opencv的车道检的代码,先放链接: A.Udacity车道线检测代码 ...

  2. python+openCV (入门级)车道线检测 学习笔记

    文章目录 前言 一.openCV安装 二.尝试使用cv2中库函数 1.读取图片 2.图片显示 3.延时/暂停 4.保存图片 5.清楚所有窗口 三.Canny边缘检测 1.高斯滤波 2.图片转换 3.边 ...

  3. 机器学习实践系列之11 - OpenCV实战车道线检测

    ADAS 在经过资本的一轮热炒之后已经不新鲜了,Mobile Eye的技术积累和效果也让很多童鞋叹为观止,然后奋起直指! 初学者为代表的童鞋,二话不说,上来就是霍夫变换,还是直接用opencv里带的, ...

  4. Python+OpenCV实现车道线检测代码部分

    实验时 使用的是python3.7+cv2,直接在Anaconda上面直接安装,代码在Jupyter上跑的,图片是老师给的(-.-) 经过各个滤波后,划定区域 : 最终合成的图像 : 最后实际上是先把 ...

  5. python车道线检测

    车道线检测是一种利用计算机视觉技术来识别和跟踪道路上的车道线的方法,它对于自动驾驶和智能交通系统等领域有着重要的应用价值.车道线检测的基本步骤如下: 边缘检测:使用Canny算法对输入的图像进行边缘检 ...

  6. 基于Python+OpenCV车道线检测(直道和弯道)

    基于Python+OpenCV车道线检测(直道和弯道) 基于Python+OpenCV车道线检测(直道和弯道)

  7. python opencv车道线检测

    python3 opencv车道线检测 简介 特征提取 车道检测 鸟瞰图 找到车道起点 滑动窗口向上扫描 多项式拟合 鸟瞰图还原到原图 评估 总结 参考 简介 记录一下车道检测的过程.本文使用传统方法 ...

  8. 入门版的车道线检测(python+opencv)

    入门版的车道线检测 参考资料 参考资料 链接1 链接2 这个代码,我只是仿写.不同的地方在于,能不用函数就不用.应该客观性好点.代码步骤如下.我也学着装B,在GitHub上存了我的完整代码.还有利用这 ...

  9. python+opencv车道线检测(简易实现)

    python+opencv车道线检测(简易实现) 技术栈:python+opencv 实现思路: canny边缘检测获取图中的边缘信息: 霍夫变换寻找图中直线: 绘制梯形感兴趣区域获得车前范围: 得到 ...

最新文章

  1. Nhibernate常见的错误
  2. ORA-39095: Dump file space has been exhausted: Unable to allocate 8192 bytes
  3. EIGRP路由协议的数据库
  4. 论文浅尝 - ICML2020 | 对比图神经网络解释器
  5. w7计算机的收藏夹里弄出桌面,Win7电脑桌面的便签怎么弄出来?
  6. Linux 监视文件、文件夹改动
  7. KVM虚拟化平台搭建实操+KVM理论详解
  8. 1分钟链圈 | 有趣!BM评价V神新共识算法:这是「非拜占庭容错机制」的终结者...
  9. OA实施周期:易用性才是关键因素
  10. Python:实现fuzzy operations模糊运算算法(附完整源码)
  11. Vue2竖向文字滚动
  12. CentOS7 安装cellranger-4.0.0
  13. 2020年汽车驾驶员(中级)模拟考试题及汽车驾驶员(中级)考试软件
  14. 详谈QTableWidget / QTableView
  15. 移动最小二乘法(MLS)曲线曲面拟合C++代码实现
  16. 利用c++进行程序词法分析
  17. ubuntu安装android应用程序,Anbox将使Ubuntu手机能运行Android应用程序
  18. 计算机网络基本知识(一):分类
  19. 我所认为的高级软件工程师
  20. 同花顺_代码解析_交易系统_J01_08

热门文章

  1. Java跌落神坛,Python继续夺冠....凭啥?
  2. 漫画:有趣的海盗问题 (完整版)
  3. 马斯克连发三推,发布退出OpenAI内情
  4. 百度15篇论文被AAAI 2019收录
  5. 警方披露Uber撞人案细节,解密Uber自动驾驶系统
  6. 干货 | 成为一名推荐系统工程师永远都不晚
  7. 快讯 | 百度发布Apollo1.5 开放五大核心能力,未来3年花100亿投资100家公司
  8. 频频曝出程序员被抓,我们该如何避免面向监狱编程?
  9. Java项目构建基础:统一结果,统一异常,统一日志(好文推荐)
  10. 面试官:你能说说MyBatis拦截器原理吗?