自动驾驶 车道检测实用算法

news2024/11/23 21:55:16

自动驾驶 | 车道检测实用算法

车道识别是自动驾驶领域的一个重要问题,今天介绍一个利用摄像头图像进行车道识别的实用算法。该算法利用了OpenCV库和Udacity自动驾驶汽车数据库的相关内容。

该算法包含以下步骤:

  1. 摄像头校准,以移除镜头畸变(Lens distortion)的影响

  2. 图像前处理,用于识别车道线

  3. 道路视角变换(Perspective transform)

  4. 车道线检测

  5. 车辆定位和车道半径计算

01

摄像头校准

摄像头输出的视频可以看做一系列图像的时间序列。镜头的结构特性造成利用针孔摄像机拍摄的图像容易发生径向畸变,导致根据物体与光轴的距离而导致不一致的放大。

以下图片展示了两种典型的径向偏差。

为了 正确的识别图像中的车道,首先需要消除图像中的径向偏差。计算机视觉专家们找到了一种有效的方式来修正径向偏差:首先将图像转换成棋盘模型,然后校正摄像头,使获得的图像中白色和黑色格子达到相同规尺度。

为了修正失真效应,需要识别棋盘的中心并利用期望的棋盘尺度来计算失真系数,并用其来消除图像的径向失真。

在上图中,最左边的图像显示了原始的失真图像,最右侧的图可以看出图像顶部的角度扭曲,中间的图像是经过摄像头校准后的未失真图像。

OpenCV的findChessBoardCornerscalibrateCamera函数可以用来实现以上的摄像头校准过程。

校准完摄像头后,我们用真实的汽车摄像头图像来验证下效果,结果如下。

02

图像预处理

解决了摄像头图像失真问题后,我们继续探索检测车道的算法。在计算机视觉领域,分离和检测对象的一种常用方法是使用颜色变换和梯度来生成一个具有过滤阈值的二值化图像。

对于颜色变换,我们尝试了HSL、LAB和LUA三种颜色空间,以找出哪一种最适合于过滤在道路上的车道线的像素。

HSL:  通过对色相(H)、饱和度(S)、明度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的

LAB:  由亮度(L)和有关色彩的A, B三个要素组成。L表示亮度(Luminosity),A表示从洋红色至绿色的范围,B表示从黄色至蓝色的范围

LUV:  由CIE XYZ空间经简单变换得到,具视觉统一性。L表示物体亮度,U和V是色度

经过试验,我们发现LAB的B道和LUV的L通道是识别车道线的最佳组合。

接下来,我们试验了Sobel梯度滤波器。图像梯度度量了颜色变化的方向强度。Sobel是一种利用高斯平滑和微分运算来降低噪声影响的梯度滤波器。

03

视角变换

车道检测的难点在于准确获得车道线的方向以及角度。在摄像头的默认视角下,远离摄像机的物体显得更小,同时车道线在远离汽车的方向逐渐相交,这和实际情况是不符的。解决这种视点扭曲的一种方法是改变图像的视角,比如可以从上往下看(鸟瞰图)。

OpenCV提供了 getPerspectiveTransform

和 warpPerspective函数,可用于进行图像的视角变换。首先,我们在图像中选择想要变换的区域,在下图中,我们选择了汽车前面的车道线部分。

接下来,选择代表目标空间的点集,在本例中,任何矩形内的点集都可以。我们可以使用warpPerspective函数将选定区域变换到我们选择的视角中。

下图显示了两条不同路段的车道线进行视角变换后的结果。

04

车道检测

下面,我们正式开始进行车道检测。在前面的各步骤中,我们进行了图像的二元阈值化和视角变换,最终获得一个黑白图像,其中白色的像素代表我们试图检测的车道线的部分。

接下来,我们需要找到一个最佳起始点来寻找属于左车道线的像素和属于右车道线的像素。一种有效的方法是生成图像中车道线像素的直方图。直方图应该有两个尖峰,各代表一条车道线,左边的尖峰是左边的车道线,右边的尖峰是右边的车道线。

然后将两个峰值的位置作为起始点来搜索属于每条车道线的像素。我们采用了滑动窗口搜索技术,它从底部开始,迭代地扫描到图像的顶部,并将检测到的像素添加到列表中。如果在一个窗口中检测到足够数量的像素,那么下一个窗口将以它们的平均位置为中心,这样我们就沿着像素的路径寻遍整个图像。

在我们检测到每个车道线的像素之后,我们就可以通过这些点来拟合一个多项式,从而产生一条平滑曲线,从而实现车道线的最佳近似。

下面的图像展示了滑动窗口技术的作用,多项式曲线通过检测到的车道线像素拟合获得(红色为左车道像素,蓝色为右车道像素)。

下面是滑动窗口搜索技术的另一个视图,高亮显示并填充搜索区域:

05

车辆/车道线位置

最后,利用两个检测到的车道线的位置,并假设摄像头位于图像的中心位置,可以计算出汽车相对于车道的位置。根据图像的分辨率,能够进行从像素到米的换算。

此外,利用尺度测量,我们还可以通过拟合一个新的多项式到物理空间来计算车道线的曲率,然后计算曲率半径。这条线的曲率半径就是这两个半径的平均值,下图显示了两条车道线的曲线半径和中心偏移量(图像中不可见)。

06

结果

以上介绍了自动驾驶中进行车道线检测的实用算法,我们通过一个多边形投影区域来显示检测结果,可以看到检测结果与实际非常吻合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2194457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百度所有网页都打不开,可能是这个原因

今天笔记本连着手机热点在使用浏览器,突然百度的网页就打不开了,不管是百度一下、百家号、百度汉语、百度经验,只要是百度旗下的网页全都打不开,浏览器直接显示下图这个样子。但是别的网页都能正常打开。 然后我赶紧试了一下ping命令&#xf…

cnn突破五(三层bpnet网络公式)

三层网络反向传播公式推导: X【196】-》HI【80】/HO【80】-》YI【10】/YO【10】,期望是d【10】 X,HI之间用w1【196,80】 HO,YI之间用w2【80,10】 k10;j80;i196 (yo[k]-d[k])*ds(yo[k])*ho[j]; (yo[k]-d[k])*ds(yo[…

推荐一款强大的书签管理工具,让你的网址不在落灰

在信息爆炸的互联网时代,我们每天都会浏览大量的网页,收藏各种各样的网址。然而,随着时间的推移,这些杂乱无章的书签往往让我们感到头疼。别担心,今天我要向你推荐一款强大的书签管理工具,它将帮助你轻松整…

训练验证器解决数学应用题

人工智能咨询培训老师叶梓 转载标明出处 数学问题解决不仅要求模型能够理解问题的语言表述,还要求其能够准确地执行一系列数学运算,每一步的准确性都至关重要。遗憾的是,现有的语言模型在这一领域的性能远远未能达到人类的水平,它…

小绿书开启副业模式(保姆级教程)

大家好,我是凡人。 是一个不黑、不吹、不跟风、有知识、有骨气的五好小号主。 好多小伙伴给我私信,问我有最近没有非常火爆的副业项目,现在很多赛道人满为患,有没有值得推荐的,别说还真有,可能大家都没注…

理解Spring中静态代理

参考https://blog.csdn.net/weixin_43005654/article/details/109317773 无论是静态代理还是动态代理,都有四大角色: 抽象角色:一般会使用接口或者抽象类来解决真实角色:被代理的角色代理角色:代理真实角色&#xff0…

ultralytics yolo pose 示例:加载官方pose模型进行推理

Ultralytics YOLO 是计算机视觉和 ML 领域专业人士的高效工具。 安装 ultralytics 库: pip install ultralytics 官方YoLo Pose 模型列表信息: 实现代码如下: from ultralytics import YOLO import cv2 # Load a model ckpt_dir "…

基于PHP的校园二手书交易管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园二手书交易管理系统 一 介绍 此二手书交易管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈:phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注…

3. BBP系列运动控制板(飞控板)简介

3.1. 概述 Bread Board Pilot(简称BBP) 是在积累了前期 Single Pilot 及 PH7 飞控板大量设计及使用经验的基础上,全新基于PH47代码框架开发的高灵活性, 高性能, 超低成本的最新一代飞控板设计。 目前,因为其使用便捷灵活&#xf…

D30【python 接口自动化学习】- python基础之输入输出与文件操作

day30 F-strings输出 学习日期:20241007 学习目标:输入输出与文件操作﹣-42 F-strings-如何通过定义好的格式进行输出? 学习笔记: F-strings 介绍 F-strings 的计算功能 F-strings 宽度和精度调整 练习 # 宽度为10个…

【计算机网络 - 基础问题】每日 3 题(二十九)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

platformio.ini工程配置文件入门

主要参考资料: “platformio.ini” (Project Configuration File): https://docs.platformio.org/en/latest/projectconf/index.html 目录 简介语法[platformio]: PlatformIO配置选项[env]:配置环境 简介 .ini是一个配置文件,它可以设置开发环境&#x…

4.循环结构在存储过程中的应用(4/10)

引言 在数据库管理中,存储过程是一种强大的工具,它允许将一组SQL语句封装为一个独立的、可重用的单元。存储过程不仅可以提高数据处理的效率,还可以增强代码的安全性和可维护性。在复杂的数据库操作中,循环结构扮演着至关重要的角…

面试系列-淘天提前批面试

00-淘天提前批面试 在牛客上看到了淘天提前批的面试题目,这里分析一下淘天面试的问了有哪些内容,面试的重点 是偏向哪些方面 项目相关 1、秒杀架构如何设计? 问了秒杀的架构如何设计,对于秒杀的设计,秒杀符合 写多读少…

【cpp/c++ summary 工具】Visual Studio 2022 安装与cmake项目配置

Visual Studio 2022安装 https://visualstudio.microsoft.com/zh-hans/free-developer-offers/下载后选择c桌面开发安装即可: Visual Studio 2022创建cmake项目 Visual Studio 2022打开cmake项目 点击打开带有cmakelists.txt的项目文件夹 配置缓存:点…

【操作系统考研】2进程管理(1)

在翻看操作系统知识框架的时候,对一些概念的理解还比较模糊,现在我来理清他们的关系。 操作系统、处理器、进程、线程、内存、存储器、设备、文件的关系 咱们可以把计算机系统想象成一个大工厂,来理解这些概念之间的关系。 操作系统&#xf…

小目标检测利器:YOLOv8+SAHI使用教程

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

软考系统分析师知识点三:应用数学

前言 今年报考了11月份的软考高级:系统分析师。 考试时间为:11月9日。 倒计时:34天。 目标:优先应试,其次学习,再次实践。 复习计划第一阶段:扫平基础知识点,仅抽取有用信息&am…

vSAN06:ESA与OSA对比、ESA安装、新架构、工作方式、自动策略管理、原生快照、数据压缩、故障处理

目录 vSAN ESAvSAN ESA 安装ESA新架构ESA工作方式ESA自动策略管理自适应RAID5策略 原生快照支持数据压缩的改进ESA故障处理 vSAN ESA vSAN ESA 安装 流程和OSA完全一致,但要注意要勾选启用vSAN ESA ESA和OSA的底层架构不一样,但是UI上是一致的。 生产环…

【C++】第二节:类与对象(上)

1、面向过程和面向对象初步认识 C 语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C 是面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 …