自动驾驶车辆中的车道检测技术

大约十年前,还在对原型进行实验。立刻被这个想法吸引住了。诚然,不得不等待一段时间,直到这些概念对社区开源,但等待是值得的!

最近,尝试了一些与计算机视觉相关的自动驾驶汽车概念,包括车道检测。想一想——这实际上是设计任何自动驾驶车辆的一个核心概念。

以下是将在本视频中构建的车道检测系统的概览:

非常酷,对吧?迫不及待地想要开始,并引导踏上这次受计算机视觉启发的车道检测和自动驾驶汽车之旅,使用OpenCV库。当然也会在这个教程中经历Python代码。

对于任何深度学习或计算机视觉新手——如果想要开始,可以查看以下资源。这些资源是开始计算机视觉之旅的好地方:

目录

  1. 理解车道检测的概念
  2. 制定问题陈述
  3. 什么是帧掩码?
  4. 车道检测的图像预处理
  5. 使用OpenCVPython中实现车道检测

理解车道检测的概念

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

“车道是道路(车行道)的一部分,被指定由单行车辆使用,以控制和引导驾驶员,减少交通冲突。” ——

将其正式定义非常重要,因为它使能够继续进行车道检测概念。在构建系统时不能有任何歧义,对吧?

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

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

制定问题陈述

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

然而,也有更简单的方法来执行车道检测。在本文中,将向展示如何在不使用任何深度学习模型的情况下进行车道检测。但将使用流行的Python中的OpenCV库。

以下是一个将要处理的视频帧的示例:

正如在这幅图像中看到的,有四个由白色车道标记分隔的车道。因此,要检测一个车道,必须检测该车道两侧的白色标记。这引出了一个关键问题——如何检测车道标记?

除了车道标记之外,场景中还有很多其他物体。路上有车辆,路边有障碍物,路灯等。在视频中,每个画面的场景都会变化。这很好地反映了现实生活中的驾驶情况。

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

可以立即做的一件事就是缩小感兴趣区域的范围。

不是处理整个画面,而是只处理画面的一部分。

在下面的图像中,除了车道标记之外,画面中的所有其他东西都被隐藏了。随着车辆的移动,车道标记将或多或少地落在这个区域内:

什么是帧掩码?

在这里,一个帧掩码只不过是一个NumPy数组。当想要对图像应用掩码时,只需将图像中所需区域的像素值更改为0、255或任何其他数字。以下是一个图像掩码的例子。图像中某个区域的像素值已被设置为0:

这是一种非常简单但有效的方法,用于从图像中移除不需要的区域和物体。

车道检测的图像预处理

首先将掩码应用于输入视频中的所有帧。然后,将应用图像阈值处理,然后是霍夫线变换来检测车道标记。

在这种方法中,灰度图像的像素值根据阈值被分配为代表黑色和白色的两个值之一。因此,如果像素的值大于阈值,则被分配一个值,否则被分配另一个值。

如上所述,在对掩码图像应用阈值处理后,在输出图像中只得到车道标记。现在可以很容易地使用霍夫线变换来检测这些标记。

霍夫变换是一种可以检测可以用数学表示的任何形状的技术。例如,它可以检测矩形、圆形、三角形或线条等形状。对检测可以表示为线条的车道标记感兴趣。强烈建议查看霍夫变换的。

在执行图像阈值处理后对图像应用霍夫线变换将给以下输出:

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

让首先导入所需的库:

# 导入必要的包 import os import re import cv2 import numpy as np from tqdm import tqdm_notebook import matplotlib.pyplot as plt

从这个YouTube视频中采样了一些视频帧。可以从这个下载帧。

# 绘制其中一个帧

感兴趣区域是多边形形状。想要掩码这个区域之外的所有内容。因此,首先必须指定多边形的坐标,然后使用它来准备帧掩码:

# 指定多边形的坐标

必须对视频帧执行几个图像预处理操作以检测所需的车道。预处理操作是:

  • 图像阈值处理
  • 霍夫线变换
# 1. 图像阈值处理 # 2. 霍夫线变换

现在将对每一帧应用所有这些操作。还将保存结果帧到一个新的目录:

# 应用操作并保存结果帧 # 获取所有检测到车道的帧 # 将帧组合成视频
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485