大创项目推荐 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录

  • 1 前言
  • 2 先上成果
  • 3 车道线
  • 4 问题抽象(建立模型)
  • 5 帧掩码(Frame Mask)
  • 6 车道检测的图像预处理
  • 7 图像阈值化
  • 8 霍夫线变换
  • 9 实现车道检测
    • 9.1 帧掩码创建
    • 9.2 图像预处理
      • 9.2.1 图像阈值化
      • 9.2.2 霍夫线变换
  • 最后

1 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 机器视觉 深度学习 车道线检测 - opencv

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

2 先上成果

请添加图片描述

3 车道线

理解车道检测的概念

那么什么是车道检测?以下是百度百科对车道的定义:

车道,又称行车线、车行道,是用在供车辆行经的道路。在一般公路和高速公路都有设置,高速公路对车道使用带有法律上的规则,例如行车道和超车道。

在这里插入图片描述

对其进行定义是很重要的,因为它使我们能够继续进行车道检测概念。我们在建立一个系统时不能有任何含糊不清的地方。

正如我前面提到的,车道检测是自动驾驶汽车和自动驾驶汽车的关键组成部分。这是驾驶场景理解的重要研究课题之一。一旦获得车道位置,车辆就知道去哪里,并避免撞上其他车道或离开道路。这样可以防止驾驶员/车辆系统偏离车道。

以下是一些随机道路图像(第一行)及其检测到的车道(第二行):

4 问题抽象(建立模型)

我们希望执行的任务是实时检测视频中的车道。我们可以通过多种方式进行车道检测。我们可以使用基于学习的方法,例如在带注释的视频数据集上训练深度学习模型,或者使用预训练好的模型。

然而,也有更简单的方法来执行车道检测。在这里,学长将向你展示如何在不使用任何深入学习模型的情况下完成此任务。

下面是将要处理的视频的一个帧:

正如我们在这张图片中看到的,我们有四条车道被白色的车道标线隔开。所以,要检测车道,我们必须检测车道两边的白色标记。这就引出了一个关键问题——我们如何检测车道标线?

除了车道标线之外,场景中还有许多其他对象。道路上有车辆、路侧护栏、路灯等,在视频中,每一帧都会有场景变化。这很好地反映了真实的驾驶情况。

因此,在解决车道检测问题之前,我们必须找到一种方法来忽略驾驶场景中不需要的对象。

我们现在能做的一件事就是缩小感兴趣的领域。与其使用整个帧,不如只使用帧的一部分。在下面的图像中,除了车道的标记之外,其他所有内容都隐藏了。当车辆移动时,车道标线将或多或少地落在该区域内:

在这里插入图片描述

5 帧掩码(Frame Mask)

帧掩码只是一个NumPy数组。

当我们想对图像应用掩码时,只需将图像中所需区域的像素值更改为0、255或任何其他数字。

下面给出了一个图像掩蔽的例子。图像中某个区域的像素值已设置为0:

在这里插入图片描述
这是一种非常简单但有效的从图像中去除不需要的区域和对象的方法。

6 车道检测的图像预处理

我们将首先对输入视频中的所有帧应用掩码。

然后,我们将应用图像阈值化和霍夫线变换来检测车道标线。

7 图像阈值化

在这种方法中,灰度图像的像素值根据阈值被指定为表示黑白颜色的两个值之一。因此,如果一个像素的值大于一个阈值,它被赋予一个值,否则它被赋予另一个值。

在这里插入图片描述

如上所示,对蒙版图像应用阈值后,我们只得到输出图像中的车道标线。现在我们可以通过霍夫线变换很容易地检测出这些标记。

8 霍夫线变换

霍夫线变换是一种检测任何可以用数学方法表示的形状的方法。

例如,它可以检测矩形、圆、三角形或直线等形状。我们感兴趣的是检测可以表示为直线的车道标线。

在执行图像阈值化后对图像应用霍夫线变换将提供以下输出:

在这里插入图片描述

9 实现车道检测

是时候用Python实现这个车道检测项目了!我推荐使用Google Colab,因为构建车道检测系统需要计算能力。

首先导入所需的库:

import os
import re
import cv2
import numpy as np
from tqdm import tqdm_notebook
import matplotlib.pyplot as plt
# 获取帧的文件名
col_frames = os.listdir('frames/')
col_frames.sort(key=lambda f: int(re.sub('\D', '', f)))# 加载帧
col_images=[]
for i in tqdm_notebook(col_frames):img = cv2.imread('frames/'+i)col_images.append(img)
# 指定一个索引
idx = 457# plot frame
plt.figure(figsize=(10,10))
plt.imshow(col_images[idx][:,:,0], cmap= "gray")
plt.show()

在这里插入图片描述

9.1 帧掩码创建

我们感兴趣的区域是一个多边形。我们想掩盖除了这个区域以外的一切。因此,我们首先必须指定多边形的坐标,然后使用它来准备帧掩码:

在这里插入图片描述
在这里插入图片描述

9.2 图像预处理

我们必须对视频帧执行一些图像预处理操作来检测所需的车道。预处理操作包括:

  • 图像阈值化

  • 霍夫线变换

9.2.1 图像阈值化

在这里插入图片描述

9.2.2 霍夫线变换

lines = cv2.HoughLinesP(thresh, 1, np.pi/180, 30, maxLineGap=200)# 创建原始帧的副本
dmy = col_images[idx][:,:,0].copy()# 霍夫线
for line in lines:x1, y1, x2, y2 = line[0]cv2.line(dmy, (x1, y1), (x2, y2), (255, 0, 0), 3)# 画出帧
plt.figure(figsize=(10,10))
plt.imshow(dmy, cmap= "gray")
plt.show()

在这里插入图片描述

最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 卸载重装 Nvidia 显卡驱动

问题描述 我使用 airsim 的时候,发现 UE4 没法使用显卡,导致非常卡顿 输入 nvidia-smi 有显卡型号等信息的输出,但是进程 process 里面没有显示 airsim 和其他软件占用显卡情况 因此,我选择了卸载重装 一.卸载旧版本的驱动 …

[Android自定义View]实现一个环形进度条控件

[Android View]实现一个环形进度条 导言 之前的文章里我们已经介绍了自定义View相关的知识了,本篇文章我们就来实战一下,从零到一,实现一个环形进度条的控件。 具体实现 大体框架 我们说过,如果要实现一个自定义控件的话一般有…

微信小程序swiper实现层叠轮播图

在微信小程序中,需要实现展示5个,横向层叠的轮播图效果,轮播图由中间到2侧的依次缩小.如下图 使用原生小程序进行开发,没有使用Skyline模式,所以layout-type配置项也无效。所以基于swiper组件进行调整。 主要思路就是设置不同的样式&#xff…

STL之map

目录 map(常用) map的函数 multimap(几乎不用-时间复杂度不稳定) mutimap的函数 unordered_map(一般不用) unordered_map的函数 代码示例 1.map 2、multimap 3、unordered_map map(常用) map是一种关联容器,用于存储一组键值对(key-value pairs)&#xf…

03.C++内存管理笔记

1、C/C内存分布 ①内存分那么多区的原因:不同的数据,有不同的存储需求,各区域满足了不同的需求。 ②存放: 临时变量等临时用的变量:栈区; 动态申请的变量:堆区; 全局变量和静态变…

修改Echarts图表的标题和副标题的内容

直接上代码 var graphicConfig [ { type: "text", left: "center", top: "center", style: { text: "包日", // 初始化为空字符串 textAlign: "center", fill: "#000", fontSize: 14, fontWeight: "bold&qu…

【数模百科】一篇文章讲清楚层次分析法的原理和解法步骤

本文节选自 层次分析法原理 - 数模百科,如果你想了解更多关于层次分析法的信息,请移步数模百科。 层次分析法(Analytic Hierarchy Process,简称AHP)是一种解决复杂决策问题的方法。这个方法是由美国运筹学家托马斯萨蒂…

电子雨代码-html

电子雨代码 动画效果展示 代码 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>Code</title><style>body {margin: 0;overflow: hidden;}</style></head><body><ca…

vs报错TypeError: Cannot read property ‘parseComponent‘ of undefined(已解决)

目录 错误分析&#xff1a; 解决方案&#xff1a; 1.卸载 vue-template-compiler&#xff1a; 2.查看项目中已经安装的 Vue 的版本。 3.安装特定版本的 vue-template-compiler&#xff1a; 4.现在重新运行一下&#xff0c;成功&#xff01; 错误分析&#xff1a; 这是因…

Maven在java中的实现(对java的项目进行打包)

前言: 在前面的文章中我们了解了Maven的作用,并在自己的电脑上安装配置好了Maven,也成功的在IDEA中添加了Maven,但是具体的实现还是有一些些小问题,那么接下来,我将带着大家对Java项目进行一次打包,系统的完成一次,并在途中解决一下会出现的问题. 我以图片中选中的这个包为例,…

美国证券交易委员会 X 账户被黑,引发比特币市场震荡

Bleeping Computer 网站消息&#xff0c;威胁攻击者成功“占领”了美国证券交易委员会的 X 账户&#xff0c;并发布一条关于批准比特币 ETF 在证券交易所上市的虚假公告。 帖子原文&#xff1a;今天&#xff0c;美国证券交易委员会批准比特币 ETF 在注册的国家证券交易所上市&a…

二维激光雷达

目录 前言 1 单线激光雷达 激光器 接收器 信号处理单元 旋转机构 2 单线激光雷达原理 2.1 三角测距法 1、直射式 2、斜射式 2.2 TOF飞行时间测距法 总结 前言 开始干活啦&#xff0c;单线激光雷达&#xff0c;三维知道原理&#xff0c;但不研究了&#xff0c;问就是买不起。 1 …