基于OpenCV-Python的高速公路车辆识别与计数功能研究

2023-06-12 00:45朱景昊曹立波陈凯戴丽华朱李平陶强
汽车工程师 2023年6期
关键词:图像处理高斯轮廓

朱景昊 曹立波, 陈凯 戴丽华 朱李平 陶强

(1.湖南大学,长沙 410082;2.长沙立中汽车设计开发股份有限公司,长沙 410205)

1 前言

智能交通系统(Intelligent Transportation System,ITS)可以有效缓解交通拥堵问题,在一定程度上保障车辆行驶安全[1]。道路车辆实时监测在智能交通系统中占有重要地位,其中基于视频的车辆检测与车流量统计方法具有不破坏路面、安装简单、成本低、监测范围广等优点,因此被广泛采用[2]。

在道路车辆实时监测系统中,为了能够准确地识别出视频中的车辆并统计车流量,国内外学者基于视频图像处理开展了大量研究。Kamijo等[3]提出用于时空图像分割的时空马尔可夫随机场模型对交通图像中的车辆进行检测与跟踪,较好地解决了车辆跟踪时受到光照和遮挡的困扰。Magee 等[4]提出一种结合混合高斯背景模型和基于对象特征(大小、位置、速度和颜色分布)的前景模型的车辆跟踪算法,在硬件、图像分辨率和车辆尺寸满足要求时取得了很好的效果。王洪建等[5]提出一种基于颜色变化的车流量统计检测方法,采用水平投影技术和双差分技术识别车辆。檀甲甲等[6]采用对比度失真和亮度失真参数作为车流量视频检测方法,缓解了传统方法存在的阴影干扰问题和车距过近问题。黄霞[7]提出一种在HSV颜色空间下基于鲁棒主成分分析的运动车辆检测算法和基于双虚拟检测线的车辆统计方法。Peng等[8]提出一种改进的基于帧差法的Horn-Schunck光流算法和基于连通域分析的运动车辆最小包围矩形的获取方法,在运动车辆提取和车辆流量检测方面得到了更准确的结果。潘翯[9]提出一种融合帧差分法和自适应均值背景建模的运动车辆检测方法,算法耗时短,且目标检测完整度得到提高。Yang 等[10]对YOLOv4 网络模型进行改进,增加特征层后的卷积次数,并结合车辆跟踪和虚线检测方法进行车辆统计,改进后模型的统计准确率有所提高。

上述研究均不同程度地实现了对交通视频中车辆的准确检测,但采用的方案较为复杂,且缺少对基于传统图像处理和基于深度学习方案的有效对比。本文主要利用传统的图像处理方法对高速公路监控视频中车辆的识别与计数方法进行研究,采用Python 编程语言,基于OpenCV 库,通过传统图像处理方法实现高速公路监控视频中车辆识别与计数功能的设计,并与利用深度学习中的YOLOv3 模型及简单在线和实时跟踪(Simple Online and Realtime Tracking,SORT)算法相结合的方法取得的效果进行对比。

2 基于传统图像处理的车辆检测

本文综合利用灰度化、去噪、去背景、形态学处理、查找轮廓和逻辑处理等系列传统图像处理的方法,提出基于OpenCV-Python 的高速公路车辆识别与计数方案,具体流程如图1所示。

图1 本文方案流程

3 视频图像的处理

本文采用基于混合高斯模型建模的背景减除法检测高速公路上的运动车辆,得到去除背景后运动车辆的二值化图像,然后采用形态学运算来消除二值化图像上的瑕疵。

3.1 基于混合高斯模型的背景减除法

3.1.1 背景去除和背景减除法

背景去除是从图像中提取出静态的背景,然后利用当前获取的图像减去背景得到前景,再将前景二值化,如图2所示。

图2 图像背景去除过程

但很多情况下,事先未获得背景图像,无法通过帧差法[11]计算像素差来获得前景对象,故需直接从现有图像中提取背景,为此,本文引入背景减除算法[12]。其中,基于混合高斯模型建模的背景减除法已成为运动目标检测的主流方法。

3.1.2 混合高斯模型

单高斯模型是将图像中每个像素点的颜色值视为一个随机过程,并假设该点的像素值出现的概率服从高斯分布[13]。混合高斯模型是单高斯模型的推广,是用多个单高斯模型作为一个像素位置的模型,新图片中的像素不论与哪个高斯模型匹配都将被视为背景,使得模型在多模态背景中具有鲁棒性。

3.2 形态学运算

在图像二值化的处理中,数学形态学将其所有的像素点视为一个集合[14],通过移动结构元素在每个像素位置上与二值图像对应的区域进行特定的逻辑运算,包括腐蚀、膨胀等。

腐蚀是对二值化图像的对象进行“收缩”或者“细化”的过程,可以将2个有细小连通的物体分开,用于去除毛刺、小凸起等,如图3所示。

图3 腐蚀运算示例

膨胀运算可视为腐蚀的对偶运算,是对二值化图像的对象进行“加长”或者“变粗”的过程,可以填充目标区域中的某些空洞,如图4所示。

图4 膨胀运算示例

4 基于OpenCV-Python 的高速公路车辆识别与计数功能的实现

4.1 方案实现过程

本文使用的编程语言是Python,其解释器为Python 3.9,集成开发环境(Integrated Development Environment,IDE)为PyCharm 2021.3.3 (Community Edition),需使用的库是OpenCV 库。对于Python而言,在引用OpenCV 库时需写为import cv2。其中,cv2 是OpenCV 的C++命名空间名称,表示调用的是C++开发的OpenCV 接口。为方便描述,本文中调用的函数或方法中括号内的具体内容均省略。

4.1.1 读取视频、灰度化、高斯去噪、去背景

首先调用cv2.VideoCapture()读取导入的高速公路监控视频,读取成功之后,依次调用cv2.cvtColor()和cv2.GaussianBlur()对读取到的视频帧进行灰度化和高斯去噪处理。混合高斯模型用于背景相对稳定情况下的运动目标检测,因此接下来使用基于混合高斯模型建模的背景减除法对上述处理后的视频帧进行去背景操作。cv2.bgsegm.create⁃BackgroundSubtractorMOG()是OpenCV 中提供的一种方法,高斯混合模型(Mixture Of Gaussians,MOG)算法使用数量为K(K=3~5 个)的高斯分布混合对背景像素进行建模。调用cv2.bgsegm.createBack⁃groundSubtractorMOG()得到去背景后的运动目标检测的二值化图像,如图5所示。

图5 读取视频、灰度化、高斯去噪、去背景后的结果

4.1.2 形态学处理:腐蚀、膨胀、闭操作

由图5 可知,经灰度化、去噪、去背景后的图像存在一些瑕疵,例如背景区域(黑色区域)中有一些白色小斑点,运动目标区域(白色区域)中白色填充不完全,因此需要通过形态学处理消除这些瑕疵。本文采用5×5 的矩形卷积核,因为稍大的卷积核更有利于去除小的斑块,如草、树叶。依次调用cv2.erode()、cv2.dilate()和cv2.morphologyEx()对图像进行腐蚀运算、膨胀运算和闭运算,腐蚀运算的作用是去掉图中的小斑块,膨胀运算的作用是还原放大,闭运算的作用是去掉物体内部的小块。形态学处理后的结果如图6 所示,原背景区域中的小斑点已经消除,运动目标区域中的空洞填充得较为完全,形态学处理效果较好。

图6 形态学处理后的结果

4.1.3 查找轮廓

调用cv2.findContours()在经形态学处理后的图像中绘制运动车辆的轮廓,结果如图7所示。其中绘制出了无效轮廓,可能是前面步骤的处理结果不够完美,导致对运动车辆的误识别造成的。因此需对绘制出的所有轮廓进行筛选,剔除无效轮廓。

图7 查找轮廓后的结果

4.1.4 逻辑处理,显示车辆统计信息

在车辆行驶过程中,检测车辆的轮廓尺寸不断发生变化,且无效轮廓的尺寸通常比有效车辆的轮廓尺寸小得多。因此,可以考虑对获取到的轮廓的宽和高进行判断,以验证是否为有效车辆。事先设置好宽和高的最小值,调用isValid 函数排除无效轮廓,结果如图8所示。可以看出,无效的轮廓已经被剔除,且有效车辆轮廓只有在轮廓尺寸变化到满足条件时显示。

图8 逻辑处理后的结果

事先设置好检测线的高度h和偏移量o,调用cv2.line()在图像中绘制检测线。统计车辆数量的方法是:若车辆轮廓的中心点落入检测线的检测范围(h±o)内,则该车辆被计数,然后调用cv2.putText()在图像中显示统计到的车辆数量及该视频处理者的信息(右下角处),随着视频逐帧读取,车辆统计信息自动更新,如图9所示。

图9 显示车辆统计信息后的结果

4.2 数据对比

通过反复尝试,微调预先设定的参数,不断提高统计的准确度,直到实现最佳效果。最终结果如图10所示,车辆的检测和车数统计的准确度都达到了比较理想的效果。

图10 传统图像处理方案的最终结果

为了与本文方法进行对比,采用深度学习中的YOLOv3 模型与SORT 算法相结合的方案对高速公路监控视频中的车辆进行检测与计数,方案流程和思路如图11所示。

图11 YOLOv3模型结合SORT算法的方案流程

首先,使用YOLOv3 模型进行目标检测[15];然后使用SORT 算法进行目标追踪,其中使用卡尔曼滤波器进行目标位置预测,并利用匈牙利算法对比目标的相似度,完成车辆目标追踪;接着利用虚拟线圈的思想,通过叉乘的原理判断车辆是否经过检测线,进而实现车辆目标的计数,完成车流量的统计,最终结果如图12所示。

图12 YOLOv3结合SORT算法方案的最终结果

通过对比,2 种方案在本文使用的视频中取得的效果基本相同,都能实现对车辆的准确检测和车辆数量的准确统计,但是在车辆检测和车辆跟踪方面,YOLOv3模型结合SORT 算法的方案较基于传统图像处理方法的方案效果更优。

5 结束语

本文主要利用传统的图像处理方法,设计了一种基于OpenCV-Python的高速公路车辆识别与计数功能的方案,取得了较为理想的效果,车辆检测和统计的准确度均较高,并与深度学习中的YOLOv3模型结合SORT 算法的方案取得的效果进行对比,得出如下结论:

a. 传统的图像处理方法可以完成一般的运动目标检测任务,在某些场景下可以达到与深度学习相同的效果,且运行更简单快捷、效率高。而基于深度学习的方案在运行时会受到算法和网络模型复杂度的影响和计算机硬件的限制。

b. 基于传统图像处理的方案在车辆检测和车辆跟踪方面的效果通常较基于深度学习的方案效果稍差。传统的图像处理方法无法对车辆作唯一标识,且在该方案中没有实现对阴影的检测,并出现了漏识别、无效检测和重复计数的情况,虽然可以通过逻辑处理的方式在一定程度上减少类似情况的发生,但无法从根本上解决这些问题。

c. 适当增加预处理的步骤可以兼顾网络准确度和运算效率等。基于传统图像处理与深度学习相融合的道路车辆实时监测技术能够有效缓解城市交通压力,保障车辆安全行驶,解决交通拥堵等问题。

猜你喜欢
图像处理高斯轮廓
OPENCV轮廓识别研究与实践
基于实时轮廓误差估算的数控系统轮廓控制
数学王子高斯
天才数学家——高斯
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
基于图像处理的定位器坡度计算
在线学习机制下的Snake轮廓跟踪
有限域上高斯正规基的一个注记
Photo Shop通道在图像处理中的应用