基于matlab的红绿灯自动识别系统

   

伴随着我国城镇化进程的加快,道路交通问题日趋突出,道路上的拥堵导致了道路上的安全隐患。在发达国家和发展中国家,不断增长的交通问题对人们的身体和生命都产生了很大的影响。因此,提升公路的容量是解决城市交通问题的最有效途径。所以,公路上的交通信息采集技术是影响 ITS(智能交通系统)智能程度的关键因素。

本论文设计了基于视觉的红绿灯自动识别系统,它是以计算机视觉为基础,对交通信号灯进行自动识别,它将获得的信号灯图像信息为基础,对图像进行预处理,运用图像处理技术,利用直方图均衡增强图像,提取图像目标区域,对图像进行二值化,利用HSV颜色分割,然后提取红绿灯形状,最后检测红绿灯位置,输出结果。可以在自然场景中,对交通信号灯的信息进行提取,并对其进行识别,为司机们提供了一个有效的参考。[lJ4] 

关键词:红绿灯识别;机器视觉;图像处理

Abstract

With the acceleration of urbanization in China, road traffic problems are becoming increasingly prominent, and road congestion has led to safety hazards on the roads. In both developed and developing countries, the growing traffic problems have had a significant impact on people's bodies and lives. Therefore, increasing the capacity of highways is the most effective way to solve urban transportation problems. Therefore, the technology of collecting traffic information on highways is a key factor affecting the intelligence level of ITS. The key point of this paper is to conduct in.depth research on the traffic light Automatic identification system based on machine vision. It takes the obtained signal light image information as the basis, and uses image processing technology to extract the information of traffic lights in natural scenes, and identify it, providing an effective reference for drivers.

Key words: traffic light recognition; Machine vision; image processing

   

摘    要... I

Abstract II

1  绪论... 2

1.1 研究背景及意义... 2

1.2 国内外研究现状... 2

1.3 本文主要研究内容... 5

1.4 论文结构... 5

2  红绿灯图像的预处理... 6

2.1 概述... 6

2.2 图像灰度化... 6

2.3 图像二值化... 7

2.3.1 简单阈值法... 7

2.3.2 自适应阈值法... 7

2.3.3 Otsu阈值法... 9

2.4 图像去噪... 9

2.4.1 均值滤波... 10

2.4.2 中值滤波... 10

2.4.3 高斯滤波... 10

2.5 红绿灯候选区域提取... 11

2.5.1 基于颜色特征的候选区域分割... 11

2.5.2 基于几何形状特征的候选区域过滤... 13

3  红绿灯自动识别的检测算法... 16

3.1 I级SVM训练... 16

3.1.1 9维像素密度特征提取... 16

3.1.2 I级分类器训练... 17

3.2 II级SVM训练... 18

3.2.1 HOG特征提取... 19

3.2.2 II级分类器训练... 19

3.3 本章小结... 20

4 红绿灯自动识别算法实现... 22

4.1 红绿灯图像采集... 22

4.2 实验结果... 23

4.3 识别效果分析... 24

5  系统设计... 27

5.1 软件开发... 27

5.1.1 软件设计要求... 27

5.1.2 系统各模块功能介绍... 27

5.2 系统测试... 29

6  总结... 31

致    谢... 32

参考文献... 33

附录1. 35

1  绪论

1.1 研究背景及意义

伴随着城镇化进程的加速和小轿车的广泛应用,城市道路上出现了大量的拥,导致了城市交通环境的恶化。在发达国家和发展中国家,不断恶化的交通问题对人们的身体和生命都产生了很大的影响。因此,提升公路的容量是解决城市交通问题的最有效途径。不过,不管是哪一个国家,都有自己的财力和发展空间。近年来,随着我国机动车保有量的不断增多和人类社会道路交通活动的日益密切,国内道路交通环境呈现出交通流量大、交通参与者类型多样化以及交通秩序混乱的发展趋势。因此,驾驶车辆行经道路交通路口时严格按红绿灯的指示信号进行有序通行显得尤为重要,是缓解交通拥堵、减少交通事故的有效手段。

正是在这样的大环境下,ITS(智能交通系统)这一新兴的高科技产物被认为是未来运输系统发展的必然趋势。ITS的发展离不开汽车、公路等各种数据的支持。所以,公路上的交通信息采集技术是影响ITS智能程度的关键因素。[lJ5] 在人类所能获得的一切资料里,眼睛是最重要的一部分。机器视觉[1]指的是利用计算机来模拟人眼获得信息的一门科学,它的工作方式是依靠摄像机来获得图像信息,之后将得到的信息发送到计算机的处理系统中,将图像信号转化为数字矩阵的形式,并利用不同的矩阵来展开相应的识别与判断[1]机器视觉不但在工业领域[2],还在人脸识别、智能汽车、追踪定位等领域得到了广泛的应用。目前,关于ITS的研究已成为各个领域的热点[3]。

红绿灯的自动检测与识别既是汽车智能化的关键技术,也是国际上多个学科交叉的前沿热点问题,具有非常广泛的应用价值。但是,在实际应用中,对交通标志进行准确、快捷的检测,仍然存在着一系列亟待解决的问题,例如在气象条件较差的情况下,对于交通信号灯的识别效果不太良好,而且识别的速度需要进一步加强。在此基础上,本文针对红绿灯的自动识别问题,提出了一种基于计算机视觉技术的交通标志识别方法。

1.2 国内外研究现状

张珈铭[1]以交通信号灯的自动化探测为主要目的,以计算机视觉与图像处理技术为基础,通过采集实际环境下的交通工具的图像,并对其进行分析。本文[lJ6] 将为基于智能手机的辅助驾驶技术的发展开辟一条新的途径,也将为进一步开展道路交通信息的智能化获取奠定坚实的理论与试验依据。陈淅灿等人[lJ7] [2]对红绿灯的特征进行了分析,并根据红绿灯的特性,提出了一种利用多个红绿灯的显著度来进行红绿灯的识别新算法。乔允浩[3]对现有的交通信号灯识别算法进行了改进[lJ8] ,并结合时间序列的特征,研究了复杂交通场景、强干扰条件下的交通信号灯的检测和识别问题,从而提升了交通信号灯的识别精度和抗干扰能力。刘艳华[4]利用MATLAB/GUI(图形用户界面)设计了一个交通灯的信号识别系统,这个系统由GUI界面设计、图像预处理、BP(反向传播,backpropagation)神经网络设计组成。首先收集对象影像,并构建相应的资料库,然后对筛选出来的对象影像进行预处理,最终对资料库进行比对与判定,并输出辨识结果。

为了能够对两种类型的交通信号对象进行准确的探测,周臻浩[5]等人,提出并完善了一种深度学习的对象探测算法YOLOv4,从而获得YOLOv4.s和YOLOv4.m。YOLOv4.s从3级到4级,在减少漏检的前提下,进一步提升对多个目标的识别能力。基于YOLOv4.s的特征抽取网络和卷积模式,提出了YOLOv4.m算法,用深度可分卷积代替YOLOv4.s特征网络结构中的卷积神经网络,并利用MobileNetV3网络进行模型训练,以提取特征图。在保证总体探测准确率不下降的情况下,大幅度地减小了探测参数,从而提高了探测的效率。李琪[6]提出了一种能够在白天对红绿灯进行实时和稳定的检测和辨识的方法。同时,还对夜晚的交通信号灯的检测识别难度大,相关的研究较少,进行了一定的探讨与研究,并给出了一种实时检测的方法,将光晕给检测带来的难度转化为通过光晕的亮度逐渐变化的特征来验证检测的结果。

在多云、雾霾、黄昏等复杂环境下,信号源会受气象因素的影响,导致信号源的颜色发生畸变和分辨率降低。冯霞飞[7]采用了 Retinex的一种图像增强方法,在某种程度上还原并增强了图像的颜色,取得了良好的结果郭朦[8]在对YOLOv5l进行改进的基础上,对YOLOv5l进行了改进,提高了对YOLOv5l的探测能力。宋永超、巨永锋[lJ9] [9]等人针对目前大部分交通灯的辨识方法并未充分顾及同一色彩下,同一地点、不同地点的交通灯之间的色彩差别,提出了一种离线辨识方法,并通过LARA、LISA等标准测试,取得了良好的辨识效果,其辨识准确率较高,能够达到真实交通灯辨识的实时需求。.汤新蔚[10]提出了一种以深度检测为基础,融合特征信道追踪为基础,结合道路级别的高准确率定位,实现了一种新型的交通灯辨识方法。本文提出的基于探测与追踪的红绿灯影像识别方法,可用于红绿灯影像的影像识别。相对于传统的基于模型的红绿灯检测法或者单个的深度学习算法,汤新蔚所研究的红绿灯检测技术在红绿灯检测中有着更高的准确率和效率。

柳胜超等[11]为解决红绿灯中小对象检测中出现的漏报、错误等问题,提出一种基于YOLOv3的红绿灯检测算法。利用一种新的基于多比例尺的红绿灯图像分割算法,并在红绿灯图像中引入四次降样本,实现红绿灯图像的四次降维,并进一步优化红绿灯图像边缘的卷积图像,使红绿灯图像更好地处理红绿灯图像,从而提升红绿灯图像小目标的识别精度。罗雯[12]为红绿灯的自动识别提供了一种新的思路,主要包括两个步骤:选择合适的目标,首先采用一种简便、高效的影像处理方式,从行车情景中抽取出红绿灯的候选区,再使用一种基于深度学习的神经网络对候选区内的红绿灯进行二次探测和辨识。谭思奇[13]在备选区域法的基础上,提出了一种新的交通信号灯检测和识别算法(DBA.FasterR.CNN),这一方法提高了网络对交通信号灯特征提取的能力,让它可以将注意力集中在图像中的交通信号灯上,进而降低了其它背景的影响,并可以提取到更加精确的交通信号灯的特征信息。

现有的基于深度数据的物体探测算法存在着计算复杂、无法满足实时性需求等问题。因此,崔灿[14]在此基础上,提出了一种以深度学习为基础的红绿灯检测和识别的方法,该方法首先通过一种图像处理的方式来确定红绿灯的候选区,然后通过一种深度学习的算法来对红绿灯的候选区进行识别。葛俊辉[15]为了改善红绿灯的检测处理,提出了一种级联匹配(classparallel)算法。在颜色空间中,分别对红绿灯和红绿灯的背景进行识别,采用级连匹配法实现红绿灯的精确定位。该方法可以很好地处理红绿灯设备的遮挡问题。楚婉艺、叶莹莹等人[lJ10] [16],提出了一种基于彩色分割与形态抽取的新型探测与辨识算法,该算法可有效地克服外界表面环境(如车辆灯光)的干扰,并根据交通信号灯图像与背景差异大的特性,从交通信号灯图像中抽取出一块黑屏,然后根据HSV彩色空间不容易受到光线的影响来辨识交通信号灯图像的颜色,并将其信息传送给MCU,根据传送的信息来调节蜂鸣器的工作频率,从而实现交通信号灯的功能。

NelsonH.C.Yung[17]和AndrewH.S.Lai[18]提出了一种基于视觉的自动检测闯红灯车辆方法。本文提出一种基于静态摄像头的交通违法行为检测新算法,利用静态摄像头跟踪交通流中的交通违法行为,实现了高精度、高稳定性的目标检测。Yun.ChungChung[19]等人提出的自动交通信号灯检测系统,主要是为智能交通系统而设计的,相机也为固定安装。它可以利用背景照片的生成来估算目前的光照强度,并对颜色模型和形态学操作进行模糊处理,从而获得交通信号灯候选区域。最后,以空间和时间信息为依据,包括区域比例、位置和信号灯转换时序,从而最终确定识别结果。该方法在不同光照条件下的交通信号灯识别方面展开了研究[lJ11] 。ZhangYue等人提取图像的亮度、颜色、blob和形状等特征并加以融合,提出了一个实时的智能汽车红灯和绿灯识别算法,在测试数据集中达到了85%的平均识别率[20]。RaouldeCharette等人主要采用模板匹配方法,将红绿灯分为圆形灯体、矩形框体以及矩形灯柱,设置权重,将匹配估值高的区域认定为交通灯。然后再判断颜色,确定信号灯状态,评测数据取自中国、法国和美国,该方法有较好的表现[21]。MarkP.Philipsen等人使用聚合通道特征的检测器,成功实现了基于学习的红绿灯识别,算法基于10个通道的特征,包括6个梯度直方图通道,1个无定向梯度强度通道,3个CIE.LUV颜色空间通道,使用正负样本训练AdaBoost分类器,最后对算法进行性能测试,得到了较好的AUC值[22]。

1.3 本文主要研究内容

在智能交通系统发展过程中,对道路上的交通数据进行快速的抽取与辨识是一个十分重要的问题。本文对信号灯的智能提取展开了深入的探索,并将其作为一个核心内容,运用机器视觉、图像处理、模拟识别等方法,从图像预处理、特征判别与结果分析三个方面展开描述。[lJ12] 以Matlab为平台,基于图像识别技术,对信号红绿灯进行定位和颜色识别,实现红绿灯自动识别的同时,给出判断信号。

1.4 论文结构

本文共有五章,各章节内容安排如下:

第一章,绪论。对红绿灯自动识别技术的背景及其意义进行了简单的阐述,分别介绍了各类红绿灯检测与识别方法的研究现状及优缺点,同时分析了当前红绿灯检测与识别技术的难点。

第二章,红绿灯图像预处理。介绍了红绿灯图像预处理的步骤流程,在研究基于颜色、形状、背板特征等红绿灯图像特征的基础上,引入红绿灯的空域尺度分布和位置分布特征进一步检测。

第三章,红绿灯自动识别的检测算法。针对红绿灯成像条件相对理想的简单情况,首先基于9维像素密度特征训练I级SVM,对红绿灯候选区域进行初步判别并快速删选干扰物;然后基于HOG特征训练Ⅱ级SVM,对I级SVM的判别结果进行精确判断。

第四章,系统的集成开发。以上研究成果为核心,利用matlab平台设计了GUI界面,设计了一个红绿灯检测与识别系统。

第五章,总结与展望。对本文的工作做全面的总结,详述本文算法或方案的优势和存在的问题,并针对存在的问题提出未来对于红绿灯自动检测和识别技术的研究方向。

 

2  红绿灯图像的预处理

2.1 概述

图像预处理的根本目的就是要提取出图像中重要的信息,消除无关的信息,尽最大努力简化图片信息,然后将提取的信息进行识别匹配,达到预期目的。图像通常是JPEG格式的彩色图像,这样图片所占的空间往往很大,需要将其进行压缩处理,使其大小适应于计算机系统上的图像处理。为了方便处理,将彩色图像转换为灰度图像,这样图片的每一个像素点只需要占用一个字节,图像所占的存储空间变小。可是灰度转换后的图片仍然有噪声,这时就需要通过图像平滑处理消除噪声,使图片达到预期的效果,方便识别出其中有利信息

2.2 图像灰度化

人眼可以感知到蓝色、绿色和红色这三种颜色,所以一般将这三种颜色称作三基色,只要将它们的比例稍作变换,就可以搭配出一种新的颜色。在计算机视觉中就采用了这种方法,每一幅图片都是由一个一个像素点组成,每一个像素点都包含了蓝、绿、红这三种颜色的信息,每一种颜色都由0~255表示,0代表了纯黑色,255代表了纯白色,一幅图像的信息由此构成。常见的颜色搭配如表2.1所示。

2.1  常见的颜色搭配

颜色

红色

绿色

蓝色

黑色

0

0

0

白色

255

255

255

蓝色

0

0

255

绿色

0

255

0

红色

255

0

0

黄色

255

255

0

图像的灰度转换就是将图像的色彩信息去除,只保留亮度值,用来表示黑白像素之间的区分程度。色彩空间类型之间是可以相互转换的,但是灰度图像却不能转换为彩色图像,因为彩色图像在转换为灰度图像时,红、蓝、绿之间的颜色比例已经没有了,而且这些比例没有了就找不回来了。

灰度变换主要针对独立的像素点进行处理,通过改变原始图像数据所占据的灰度范围而使图像在视觉上得到良好的改变。如果选择的灰度变换函数不同,即使是同一图像也会得到不同的结果。因此,选择灰度变换函数应该根据图像的性质和处理的目的来决定。选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻,容易识别。使用加权均值法对图像进行灰度化,即灰度化后按照一定的权值,对R、G、B的值加权均值法。如公式(2.1)所示。

                                             R=G=B=(ω

RR+ωGG+ωBB)/3 (2.1)

ωRωGωB分别为R,G,B的权值,取不同的值形成不同的灰度图像。由于人眼对绿色最为敏感,红色次之,对蓝色的敏感性最低,因此使ωR>ωG>ωB将得到较易识别的灰度图像。当ωR=0.299,ωG=0.587,ωB=0.114得到的灰度图像效果最好。

2.3 图像二值化

图像二值化是将灰度图像转换为二值图像(黑白图像)的过程。可以利用阈值对图像进行二值化。首先需要确定一个阈值,将大于该阈值的像素值设置为255,小于该阈值的像素设置为0。处理后的图像只有两个像素值,0和255,这就是黑白颜色值,这样灰度图像就被转换为二值图像(黑白图像)。图像二值化主要用来提取图像中显著信息。下面介绍三种图像二值化的方法,并对其进行比较,分别是简单阈值法、自适应阈值法、Otsu二值化。

2.3.1 简单阈值法

简单阈值法就是手动选择阈值T,将所有大于该阈值的像素设置为255,所有小于或者等于T的像素设置为0。

在简单阈值法中,会将全局阈值应用于图像中的所有像素。另外,全局阈值是已知的。如果要批量处理大量图像,并且根据图像类型和强度变化调整阈值,那么简单阈值法的效果不太理想。

2.3.2 自适应阈值法

自适应阈值法可以对具有不同像素强度的灰度图像进行二值化,因为单一阈值无法从图像中提取信息。在自适应阈值中,算法利用像素周围的区域确定像素阈值,同一图像中不同区域将获得不同阈值。当图像的像素强度发生变化时,自适应阈值法往往比简单阈值法的效果更好。

自适应阈值法(adaptiveThreshold),它的思想不是计算图像的全局阈值,而是根据图像不同区域亮度分布,计算其局部阈值,对于图像不同区域,能够自适应计算不同的阈值,因此被称为自适应阈值法(其实就是局部阈值法)。这种方法能够保证图像中各个像素的阈值会随着其周围邻域像素的变化而变化。

这样做的好处:

1.每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的;

2.亮度较高的图像区域的二值化阈值通常会较高,而亮度低的图像区域的二值化阈值则会相适应的变小;

3.不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值。

自适应阈值化处理中确定局部阈值的思路是,计算该像素其邻域(局部)的均值、中值、高斯加权平均(高斯滤波)来确定阈值。比这个阈值大,该位置像素置为255,比这个阈值小,则置为255,如此就实现了局部阈值分割。

选取好阈值之后,需要分配阈值权重,因为图像都是连续的,越靠近待处理位置的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。如图2.1、2.2所示红绿灯图像经过二值化处理后的效果。

图2.1  红绿灯原始图像

图2.2  高斯均值自适应阈值法的二值化图像

2.3.3 Otsu阈值法

Otsu图像二值化是一种经典的自动阈值选择方法,它能够根据图像的直方图自动确定最佳阈值,将图像转换为二值图像。Otsu方法的原理基于最小化图像的内类方差或最大化类间方差的思想。

Otsu图像二值化的步骤如下:

1.计算图像的直方图:首先,对灰度图像进行直方图统计,统计每个灰度级别的像素数量。

2.计算类内方差:接下来,对不同的阈值进行循环遍历,根据当前阈值将图像分为两个类别:前景和背景。分别计算前景和背景的像素数量、像素平均灰度和像素方差。然后,根据这些值计算类内方差,作为该阈值的度量。

3.寻找最佳阈值:循环结束后,找到使类内方差最小的阈值,该阈值将图像分割为前景和背景两个类别。类内方差最小意味着同一类别内部像素的灰度相似性最高。

4.生成二值图像:根据得到的最佳阈值,将原始图像转换为二值图像,将大于或等于阈值的像素设置为前景,小于阈值的像素设置为背景。

Otsu方法的优势在于它能够自适应地选择阈值,无需用户提供先验知识或手动调整阈值。它适用于各种类型的图像,并且通常能够产生比固定阈值的方法更好的二值化结果。

这就是Otsu图像二值化的基本原理。通过计算图像的灰度直方图和类内方差,Otsu方法能够自动选择最佳阈值将图像转换为二值形式。如图2.3所示Otsu法处理后的二值化图像。

图2.3  Otsu法的二值化图像

2.4 图像去噪

图像去噪也叫做图像的模糊处理,它是图像增强的一种处理技术。图像平滑的主要目的就是在尽量保留原图的信息,去除其中的噪声,降低图片细节层次信息。在图像处理中,使用最广泛的平滑处理工具就是滤波器,通过调节其中参数,达到不同的降噪效果。本课题介绍三种常见的滤波器进行比较,分别均值滤波、中值滤波和高斯滤波。

2.4.1 均值滤波

均值滤波器也叫做低通滤波器,顾名思义,它是将图像中每一个像素点都当成滤波核的中心,计算所有像素的平均值,然后是核心像素值等于这个计算的平均值。如图2.1所示均值滤波计算过程。

图2.1  均值滤波计算过程

2.4.2 中值滤波

中值滤波器它的适用原理跟均值滤波器差不多,不同之处在于两种滤波器计算像素的方式不同。中值滤波不是计算像素的平均值,而是将所有像素值进行排序,取最中间的像素,赋值给像素核的中心。如图2.2中值滤波计算过程。

图2.2  中值滤波计算过程

2.4.3 高斯滤波

最后介绍的是高斯滤波,也叫做高斯模糊或者高斯平滑,这是目前在图像领域所应用的最广泛的平滑处理算法。它可以最大限度的降低图像噪声,去除不重要信息的同时保留更多的图像信息。均值滤波在进行图像去噪处理时,像素核心中每一个像素都一样重要,所以只需要进行取平均值就可以,但是在高斯滤波中,越靠近滤波核中心像素的权重越重要,越远离就越小,所以就需要对像素进行卷积计算,滤波核中的像素跟卷积核进行卷积计算,最后将结果传递给滤波核中心。如图2.3所示高斯滤波计算过程。

图2.3  高斯滤波计算过程

2.5 红绿灯候选区域提取

2.5.1 基于颜色特征的候选区域分割

红绿灯颜色分割常在RGB、HSV、HIS、YCbCr、LAB等颜色空间下进行,且都能取得一定的分割效果。事实上,红绿灯是一种具有确定颜色的自发光体,其色度不受外界光照影响。基于此性质,本文选取三个通道相互独立、对光照具有较好鲁棒性的HSV色彩空间进行红绿灯图像颜色特征提取。HSV空间模型如图2.4所示,其中色度H、饱和度S和亮度V的阈值是决定提取效率和效果的关键参数。

图2.4  HSV颜色空间模型

为了获得HSV颜色空间的图像,通常需要对RGB空间图像进行转换,转换公式如下所示,然后查询颜色模糊范围表确定阈值

Vmax=maxR,G,B,Vmin=minR,G,B

H=60×R-GVmax-Vmin+240,Vmax=B60×B-RVmax-Vmin+120,Vmax=G60×G-BVmax-Vmin+360,Vmax=&R&&60×G-BVmax-Vmin+240,Vmax=R0,Vmax=Vmin

s=1-VminVmax0,otherwise

V=Vmax

本文为了获得准确的红绿灯图像像素H通道阈值,以200幅红灯和绿灯的前景图像为素材,借用Matlab分离HSV三通道,分别计算所有前景像素H通道值的分布情况,分布图如图2.5所示。

(a)红灯像素H通道分布图         (b)绿灯像素H通道分布图

图2.5  H通道概率统计

(a)原图                    (b)阈值分割结果

图2.6  HSV颜色空间阈值分割效果

HSV颜色空间中色度与亮度独立,阈值分割时可以降低光线明暗的干扰,虽然图像从RGB颜色空间转换到HSV空间会有时间消耗,但对系统的整体影响不大,适合交通场景下红绿灯图像的分割。如图2.6所示。

2.5.2 基于几何形状特征的候选区域过滤

红绿灯候选区域提取是进行红绿灯识别的前提。本节着重研究红绿灯图像的颜色特征分布规律和几何形状特征变化规律,并在此基础上设计一种基于颜色特征分割和几何形状特征过滤的候选区域提取算法。

如图2.6所示,在基于HSV颜色空间转换后的H阈值分割后,图像中大部分的非红绿灯像素区域被过滤掉,但仍有较多与红绿灯颜色相近的伪红绿灯区域被保留下来,如汽车制动灯、红灯笼、红色字体等。每个国家对红绿灯光源的形状都有严格的标准,所以在颜色分割过程之后,使用形状特征进一步过滤伪红绿灯区域。

(1)形状特征提取与过滤

首先,要获取图像的连通区域,并标记每一个独立的连通区域,获取其最小外接矩形。但在某些情况下,如图2.7所示因方向指示灯的“箭头”和“箭杆”之间有空隙,特别是当汽车靠近红绿灯时,部分红绿灯图像“箭头”和“箭杆”并不连通。

图2.7  方向指示灯图像获取最小外接矩形

为了避免不连通的红绿灯图像对形状特征检测造成影响,甚至导致红绿灯漏检,我们发现如图2.7所示,在获取最小外接矩形时总是存在“箭头”对应的最小外接矩形(蓝色)与“箭杆”对应的最小外接矩形(红色)相交的部分,且求取两外接矩形的并集像素区域的最小外接矩形(黄色)即为红绿灯像素区域的最小外接矩形,通过此方法对不连通的红绿灯图像进行处理,可以准确地提取箭头红绿灯的最小外接矩形。

接下来,利用几何形状特征过滤掉伪红绿灯区域,常用的有高宽比和轮廓像素密度特征,计算过程如式3.2所示:

    Rhw=Rh/Rwρ=ARh×Rw

       (3-2)

其中Rh

是最小外接矩形的高度,Rw

是最小外接矩形的宽度,A是轮廓的区域面积,由于红绿灯的最小外接矩形近似为正方形,当取0.8<Rhw

<1.2时,0.5< ρ

<1对示例图 像进行几何形状过滤效果如图2.8所示。

         (a)日间原图                     (b)颜色分割结果

(c)几何形状过滤效果

图2.8  几何形状过滤效果示例

由图2.8(c)所示,通过以上提取的两个形状特征,可以很好的保留红绿灯区域,并过滤掉大部分的伪红绿灯区域。但在环境复杂的情况下,仅仅通过外接矩形长宽比、像素密度等几何形状特征过滤还是会保留较多伪红绿灯区域,所以还需要引入其它有效特征进一步过滤。

(2)夜间连通区域获取

特别地,对如图2.9所示夜间交通红绿灯图像呈现光晕的情况,很难直接获取红绿灯的连通区域,无法进行几何形状过滤,反而光晕中的孔洞是红绿灯灯体,因此本文提出使用包围零点筛选法去光晕。

(a)夜晚光晕原图1               (b)夜晚光晕原图2

图2.9  夜晚成像光晕图

首先,对夜间颜色分割后的图像进行连通区域标记,获得彼此独立的连通区域,如图2.10(a)所示光晕被标记为连通区域(图2.10)为使打印效果清晰图像分割后经过了取反处理)。然后统计连通区域的空洞大小即零点数:对某一连通区域,从连通区域一端的第一行开始,遍历每个像素点,保存该行中像素值为零的数量记为Zi

。然后遍历下一行,直到遍历完整个连通区域,将所有像素值为零的数量求和可得孔洞像素个数记为Z。

(a)颜色分割效果图

       (b)包围零点筛选结果       (c)外接矩形局部取反效果图

图2.10  去光晕效果图

由图2.10(c)可见孔洞(即红绿灯灯体)已经被提取出来,同时引入了外接矩形和光晕连通区域的差集干扰,不过,紧接着进行上文所述几何形状过滤,便可以完全剔除掉差集干扰,获得更准确的待定区域图像。

3  红绿灯自动识别的检测算法

在红绿灯候选区域提取的基础上,本章主要针对红绿灯成像条件相对理想的简单情况(红绿灯未被遮挡、无表面脏污或灯珠破损不亮等局部缺陷,背板未被遮挡且相对清晰,不存在与红绿灯具有相似颜色、形状和背板轮廓的强干扰),设计一种基于两级SVM的静态红绿灯识别算法,为后续的复杂情况研究奠定基础。算法流程如图3.1所示。

图3.1  红绿灯识别算法流程

3.1 I级SVM训练

3.1.1 9维像素密度特征提取

在实际交通场景中,可能存在大量颜色特征和几何形状特征都符合红绿灯条件的干扰,而真实红绿灯图像数量仅占少数。为了快速滤除大部分干扰,本文对各指向箭头灯、圆形灯和叉形灯的几何形状进行了深入剖析,发现不同类型红绿灯的点亮区域的像素点具有各自的分布规律。为此,本文将二值模式下的红绿灯图像平均分成BB2个矩形子块。通过计算每一个矩形子块区间内的红绿灯前景像素占比,定义了一种新的低维特征。其中,B1和B2的取值决定了最终的分类效果。通过大量测试发现,当B1和B2都取值为3时分类效果最优,于是我们将自定义的低维特征命名为9维像素密度特征。

然而,很多情况下红绿灯外接矩形的宽和高并不能进行3等均分。针对此类情况,常规做法是对图像进行大小归一化或进行边界扩充,使得红绿灯图像外接矩形的宽和高3的倍数。考虑到大小归一化操作的耗时成本,本文采用边界扩充方法使得红绿灯外接矩形的宽和高为3的倍数后再进行3等均分。

9维像素密度特征提取过程如图4.2所示,提取步骤如下:

步骤一:计算Φ3中每一个候选区域Φ3 (i)的外接矩形Rect3 (i),并判断矩形宽度w3 (i)和高度h3 (i)能否进行 3 等均分,若不能则进行边界扩充。然后基于w3 (i)和h3 (i)的 3 等均分比例,将图像分割成 3×3 个矩形子块Rect3 (x,y),其中x,y∈{0,1,2}。

步骤二:根据公式(3.1)计算各矩形子块的像素密度,并将其归一化为一维向量。其中,p(u,v)表示坐标(u,v)处的像素灰度值。

                                            ρx,y=0.035×p(u,v)/[w3i×h3i]

                                                                      (3.1)

步骤三:基于𝜌(x,y)构造Φ3 (i)的 9 维特征量f 9 (i)。

图3.2  9维像素密度提取过程

3.1.2 I级分类器训练

SVM(Support Vector Machine),中文名为支持向量机,能较好地解决小样本学习问题,在机器学习领域具有重要地位。SVM最初用于解决二分类问题,之后通过引入核函数可将低维不可分的数据映射到高维空间,并在高维空间内构造最优超平面将非线性问题线性化,从而解决多分类问题。本文综合考虑时间成本与识别准确率,选用C类支撑向量分类机(CvSVM::C_SVC)和径向基核函数(CvSVM::RBF)训练Ⅰ级SVM分类器。

将候选红绿灯分为7类,其中类别0表示非灯体,类别1至6分别表示左箭头灯、右箭头灯、上箭头灯、下箭头灯、圆形灯和叉形灯,部分训练样本图像如图3.3所示。结合9维像素密度特征构造样本集训练I级SVM分类器,对红绿灯候选区进行初步判别并快速删除干扰物。

图3.3  I级SVM训练样本图像

3.2 II级SVM训练

为了区分汽车尾灯、夕阳等相似干扰物(如图3.4所示),本文在红绿灯图像的外接矩形基础上向四周延展一定比例,以包含背板及其白色边框。同时,由于提取红绿灯图像特征前往往需要进行大小归一化操作,使得部分干扰在经过拉伸或压缩变换后与红绿灯图像具有相似的形状和背板轮廓,导致此类干扰可能误判为灯体(如图3.5所示)。因此,本文以红绿灯图像外接矩形的宽高较大值作为基准边,使得延展后的红绿灯图像为正方形,以减小大小归一化带来的不利影响。

(a)汽车尾灯     (b)红灯笼     (c)夕阳

图3.4  圆形相似干扰举例

(a)人形横道绿灯(b)人形横道红灯(c)汽车尾灯 (d)汽车尾灯

图3.5  灯体外接矩形的宽和高进行大小归一化结果

3.2.1 HOG特征提取

HOG(HistogramofOrientedGridients),中文名为方向梯度直方图,最初由Dalal等人在2005年的CVPR会议上提出,在行人检测项目中取得了极大的成功。HOG特征是一种基于轮廓梯度和边缘分布的图像算子,能够很好的描述图像局部目标的表象和形状,且具有较好的几何与光学变化不变性,因此HOG特征非常适用于描述红绿灯这种具有特定形状的物体。HOG特征原理如图3.6所示,相应的提取步骤如下:

步骤一:计算Φ3中每一个候选区域Φ3(i)的外接矩形Rect3+(i)

,以Rect3+(i)

的中心为基点,在其宽度w3+(i)

和高度h3+(i)

方向进行适当延展获得扩展区域Rect3+(i)

,延展后的宽度w3+(i)

与高度为h3+(i)

和中较大值的2.4倍。

步骤二:基于扩展区域Rect3+(i)

,从RGB原始图像中截取红绿灯扩展图像区域P3+(i)

步骤三:提取P3+(i)

1764HOG特征向量f1764i

。具体过程为:

(1)将P3+(i)

 统一缩放到40×40像素大小;

(2)直方图均衡化、gamma校正;

(3)灰度化;

(4)计算各像素的梯度;

(5)将5×5个像素划分为一个单元;

(6)计算每个单元的梯度直方图;

(7)将2×2个单元组成一个块,计算每个块的HOG特征并串联为1764维向量。

图3.6  HOG特征原理

3.2.2 II级分类器训练

与训练Ⅰ级SVM分类器的参数一致,联合3.2.1小节提取的Φ3(i)的HOG特征f1764(i)和T(i)构造样本集(部分训练样本图像如图3.7所示)训练Ⅱ级SVM,对满足Ⅰ级SVM判别的每一个对象Φ3(i)进行精确判断。由于Ⅰ级分类器的识别准确率低于Ⅱ级SVM分类器,本文将Ⅱ级SVM的分类结果作为保留图像Φ3(i)的最终类别,最后满足Ⅱ级SVM验证的灯体图像被保留,获得集合Φ4。

图3.7  Ⅱ级SVM训练样本图像示例(RGB原图)

图3.8为利用Ⅱ级SVM对Ⅰ级SVM判别结果进一步验证后的保留结果,可以看出:图中红灯被正确识别,所有干扰物都被成功排除。

3

4

图3.8  利用Ⅱ级SVM判断的最终识别结果

3.3 本章小结

本章首先自定义了一种低维特征(9维像素密度特征)用于训练Ⅰ级SVM分类器,基于此分类器对红绿灯候选区域进行初步判别并快速删除干扰物,但由于SVM仅针对红绿灯的点亮区域,可利用的特征信息较少,误判率相对较高。为此,进一步基于红绿灯二值图像的外接矩形的宽、高较大值向四周延展一定比例以包含背板边框,并进行图像增强以提升背板与背景、灯体与背板的对比度,在此基础上提取延展图像的HOG特征训练了SVM分类器,对SVM的初步判别结果进行精确验证。

4 红绿灯自动识别算法实现

红绿灯自动识别算法首先需要构建红绿灯数据集,然后对采集的红绿灯图像进行预处理,通过图像灰度化、图像二值化、中值化滤波对其进行预处理,然后利用HSV颜色特征和形状特征对红绿灯图像候选区域进行分割,最后通过II级SVM算法进行红绿灯分类选择,自动识别红绿灯图像信息。流程图如图4.1所示。

图4.1  红绿灯自动识别算法流程图

4.1 红绿灯图像采集

红绿灯数据集是进行红绿灯识别技术研究的前提。本节的主要目的是构建能大致体现国内城市主干道各种交通状态和环境下的红绿灯视频与图像数据集,为后续的红绿灯候选区域提取、识别奠定基础。

就目前而言,国内外红绿灯数据集大都仅供内部研究使用,难以获得。而少量的公开数据集主要为国外数据集,主要数据集如表4.1所示。

表4.1  国外公开红绿灯数据集

数据集名称

图像帧数

图像大小

LISA

43007

1280×960

LARA

11179

640×480

BOSCH

13427

1280×720

WPI

17527

1920×1080

由于实验条件有限,本次设计通过网络选取红绿灯数据来构建数据集,通过筛选共获得200张数据。部分采集的红绿灯图像如图4.2所示。

图4.2  部分采集图像

4.2 实验结果

由于识别结果受到各种因素影响,所以以下所展示的结果是在图像清晰,背景中干扰建筑物较少的情况下进行的。下面分别以几张图片为例,对饼状红绿灯和箭头红绿灯分别进行识别检测,最终结果如下列图所示:

3

4

图4.3  饼状红绿灯结果展示图

5

6

图4.4  箭头红绿灯结果展示图

图4.5  红绿灯读数识别结果

4.3 识别效果分析

本次设计在通过网络收集了大约200张图片进行检测识别,其中包括白天,夜晚的红绿灯图像,以及各种天气下的红绿灯图像,有图像背景复杂的,也有图像背景简单的,有近景拍摄的,也有远景拍摄的。对各种情况下的红绿灯图像,都进行了一定的检测识别,识别率约在85%左右。以下将展示二组识别效果不好,产生误判,甚至无法识别的红绿灯图片,并对其产生原因作简要分析。

误判图1

误判图2

图4.6  灯识别误判图

第一组图是:程序在对红绿的识别的过程中产生了误判的情形。左图为箭头红绿灯识别,在识别过程中,程序对右边花坛上的红花产生了误判,误识别为红色左转箭头;右图为饼状红绿灯识别,由于处于夜晚,光线不稳定,再加上图像的背景比较复杂,程序把路面上路灯映射的红色光进行了误判识别,误识为红灯,而此图明显是绿灯。

20

45

图4.7  无法识别图

第二组图是:程序无法进行识别的情形。两张图像都是夜晚拍摄,光线昏暗,且图像中都有强烈的光线散射现象,程序无法对图像进行HSV颜色空间分割和有效的形态学处理,所以无法进行识别。

由以上分析知,红绿灯识别效果的好坏与与所采集图像的环境息息相关。而经过程序对更多不同环境情形下的红绿灯图像的识别分析知:在照明条件下,当图像具有简洁、清楚的背景,在照明条件下,辨识度较高;在图像的背景中,存在着比较复杂的街景,例如,在出现了大量的房屋、车辆、树木、行人等多种不相关的事物时,识别的速度会比较慢,但是,假如交通信号灯的位置是固定的,并且交通信号灯的数量是比较少的,那么就很好进行定位,因此,识别的速度也会更高:在夜晚的图像识别中,如果仅有红绿灯发出颜色光亮就很容易识别,但当出现大量的车灯新号时,就很容易产生误判,从而发生识别错误;同时在不同天气下,识别率的高低也不行同,在阳光明媚,天气晴朗的时候识别率高且稳定,而当出现极端天气,比如浓雾、大雪、大雨等天气时,识别率会更低,有时甚至会无法识别。

5  系统设计

本章主要目的是完成软件系统的开发与实现,实现一个简单的红绿灯自动检测与识别系统。

5.1 软件开发

5.1.1 软件设计要求

(1)系统开发环境。本文系统算法采用Matlab编程语言实现,利用Matlab编程软件作为集成开发环境,图像处理方面借助于OpenCV开源计算机视觉库,此外,利用GUI嵌入式图形用户界面开发工具进行软件开发以及软件移植。

(2)软件总体设计。依据红绿灯检测与识别系统要求,本文对该系统的设计如下:图像读取/显示模块、检测和识别模块、结果输出模块。

(3)窗口界面的实现。本系统界面设计是在GUI应用程序中进行编写的,其主界面运行后如图5.1所示。

图5.1  红绿灯检测与识别软件主界面

5.1.2 系统各模块功能介绍

(1)图像显示模块。图像显示模块是用来显示输入的待检测图像或视频,并输出的检测结果图像或视频,如图5.2所示。

图5.2  图像显示模块

(2)检测控制模块。检测控制模块的功能有导入图片、交通灯检测、清除、退出等功能,如图5.3所示。

图5.3  检测控制面板

其中按钮“导入图片”:用于选择待识别视频或图像,只有在检测设置中选择本地图像或视频的情况下该按钮才能被使用。点击该按钮后,会弹出文件选择对话框,如图 5.4 所示。

图5.4  导入图像

按钮“交通灯检测”:用于启动红绿灯自动检测与识别功能,点击该按钮后,系统将对红绿灯进行检测,检测结果图像将显示在“处理结果”图像显示窗口。

按钮“清除”:点击该按钮后,将终止当前检测过程。

按钮“退出”:点击该按钮后,将退出当前界面。

(3)检测输出模块。检测输出模块用于实时显示前方红绿灯的语义理解结果,如图5.5所示。

图5.5  当前图像检测结果显示

5.2 系统测试

为了测试该系统的可行性,以离线红绿灯图像数据库为基础,以 4.5 节介绍的方法选择系统测试素材,利用“交通红绿灯检测与识别软件”分别对方向指示灯红绿灯路口、圆饼灯红绿灯路口等场景图像进行检测和识别,其运行效果如图 5.6(a)至(c)所示,系统的测试结果如表 5.1 所示。。

(a)阴雨天红绿灯检测效果

(b)日间红绿灯检测效果

(a)夜间红绿灯检测效果

图5.6  多种场景下的检测效果

6  总结

智能交通系统是国内外的研究重点领域,到目前为止,大量的算法应运而生。本文的研究主要面向实际运用中的红灯检测。主要的研究内容如下:

1.通过阅读大量的国内外文献,分析本课题在研究中存在的难点,并设计红灯自动检测的整体流程,为后续的编程与数据分析做好理论铺垫。

2.重点研究介绍了红灯信息的检测与识别。首先介绍了红灯信息提取的结构框图,使整个识别过程的思路更加清晰;其次介绍了红灯信号进行杂质的过滤;之后介绍了本文研究的重点方法:边缘判别。对于一些与红灯信号特征相类似的杂质判别效果更佳;最后简单介绍了基于红灯的多特征判别方法。

本文设计系统完全满足在自然场景中红灯自动检测的实时性和准确性。

参考文献

[1]张珈铭. 基于机器视觉的交通信号灯识别系统的研究[D]. 湖北工业大学, 2018

[2]陈淅灿. 基于特征融合的交通信号灯识别方法研究[D]. 南京理工大学, 2020

[3]乔允浩. 基于车载视觉的红绿灯自动识别技术研究[D]. 厦门理工学院, 2018

[4]刘艳华. 基于BP神经网络的交通灯信号识别系统设计[J]. 电子产品世界, 2022, 29(2): 17.19.

[5]周臻浩. 基于深度学习的交通信号检测方法研究[D]. 重庆交通大学, 2021

[6]李琪. 交通信号灯的检测与识别算法研究[D]. 吉林大学, 2018

[7]冯霞飞. 复杂环境中交通信号灯的识别[D]. 沈阳理工大学, 2018

[8]郭朦. 基于车载视觉的交通信号检测与识别技术的研究[D]. 桂林电子科技大学, 2022

[9]宋永超,巨永锋,杜凯,. 基于色度方向角的离线城市红绿灯识别算法[J]. 北京交通大学学报, 2019, 43(2): 72.79.

[10]汤新蔚. 自动驾驶汽车车道级交通信号灯识别系统研究[D]. 重庆大学, 2021

[11]柳胜超. 复杂背景下交通信号灯检测与识别方法研究与应用[D]. 长安大学, 2021

[12]罗雯. 基于深度学习的交通信号灯识别算法研究[D]. 南昌大学, 2020

[13]谭思奇. 基于深度学习的道路交通信号灯检测与识别方法研究[D]. 重庆交通大学, 2022

[14]崔灿. 基于深度学习的交通信号灯检测与识别方法研究[D]. 长春理工大学, 2018

[15]葛俊辉. 交通信号灯检测与识别算法研究[D]. 中南大学, 2014

[16]楚婉艺,野莹莹,朱禹蒙,. 基于视觉的红绿灯识别[J]. 信息技术与信息化, 2021, (5): 66.68.

[17] AVG ,BSZ ,AES ,et al. Optimization of adaptive traffic light control modes based on machine vision[J].  2021.

[18] Wang X, Jiang T, Xie Y.A Method of Traffic Light Status Recognition Based on Deep Learning[C]//Proceedings of the 2018 International Conference on Robotics, Control and Automation Engineering.2018.DOI:10.1145/3303714.3303726.

[19] Che M, Che M, Chao Z, et al. Traffic Light Recognition for Real Scenes Based on Image Processing and Deep Learning[J].Computing and Informatics, 2020, 39(3):439.463.

[20] Yue Z,Xue J,Geng Z, et al. A Multi.Feature Fusion Based Traffic Light Recognition Algorithm for

Intelligent Vehicles[C]. Control Conference, Nanjing China, 2014: 4924.4929.

[21] Shen Y, Ozguner U, Redmill K, et al. A robust video based traffic light detection algorithm for

intelligent vehicles[C]. Intelligent Vehicles Symposium. IEEE, 2009:521.526.

[22] Philipsen M P,Moeslund T B,Trivedi M M. Traffic Light Detection: A Learning Algorithm and

Evaluations on Challenging Dataset[C]. IEEE International Conference on Intelligent Transportation

Systems. 2015: 2341.2345.

[23] Zijing, Yi, Luo, et al. An Adaptive Vehicle VIN Recognition System Based on Machine Vision[C]//2019.

[21] Chen C H, Ye Y S, Hsu W T .Automatic venipuncture insertion point recognition based on machine vision[J].Journal of Advances in Technology and Engineering Research, 2018, 4.

[24] Wang G, Li X, Yang L .Dynamic Coal Quantity Detection and Classification of Permanent Magnet Direct Drive Belt Conveyor Based on Machine Vision and Deep Learning[J].International journal of pattern recognition and artificial intelligence, 2021(11):35.DOI:10.1142/S0218001421520170.

[25] Vishal K, Arvind C S, Mishra R ,et al. Traffic light recognition for autonomous vehicles by admixing the traditional ML and DL[C]//International Conference on Machine Vision.2019.

附录1

function varargout = guipic(varargin)

% GUIPIC MATLAB code for guipic.fig

%      GUIPIC, by itself, creates a new GUIPIC or raises the existing

%      singleton*.

%

%      H = GUIPIC returns the handle to a new GUIPIC or the handle to

%      the existing singleton*.

%

%      GUIPIC('CALLBACK',hObject,eventData,handles,...) calls the local

%      function named CALLBACK in GUIPIC.M with the given input arguments.

%

%      GUIPIC('Property','Value',...) creates a new GUIPIC or raises the

%      existing singleton*.  Starting from the left, property value pairs are

%      applied to the GUI before guipic_OpeningFcn gets called.  An

%      unrecognized property name or invalid value makes property application

%      stop.  All inputs are passed to guipic_OpeningFcn via varargin.

%

%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one

%      instance to run (singleton)".

%

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help guipic

% Last Modified by GUIDE v2.5 29.Mar.2019 19:44:18

% Simon's Road

% Begin initialization code . DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name',       mfilename, ...

                   'gui_Singleton',  gui_Singleton, ...

                   'gui_OpeningFcn', @guipic_OpeningFcn, ...

                   'gui_OutputFcn',  @guipic_OutputFcn, ...

                   'gui_LayoutFcn',  [] , ...

                   'gui_Callback',   []);

if nargin && ischar(varargin{1})

    gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

    gui_mainfcn(gui_State, varargin{:});

end

% End initialization code . DO NOT EDIT

% ... Executes just before guipic is made visible.

function guipic_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% hObject    handle to figure

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% varargin   command line arguments to guipic (see VARARGIN)

% Choose default command line output for guipic

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes guipic wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% ... Outputs from this function are returned to the command line.

function varargout = guipic_OutputFcn(hObject, eventdata, handles)

% varargout  cell array for returning output args (see VARARGOUT);

% hObject    handle to figure

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

% ... Executes on button press in ok.

function ok_Callback(hObject, eventdata, handles)

% hObject    handle to ok (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global im

[filename,pathname]=...

    uigetfile({'*.jpg';'*.bmp';'*.png'},'选择图片');

str=[pathname filename];

Image = imread(str);

[m,n,d] = size(Image);

% 3024*4032 

if m >2900

    Image = imresize(Image,0.1786);

% 1920*1440   

else if m >1400

   Image = imresize(Image,0.3750);

    end

end

im = Image;

%ʹÓõÚÒ»¸öAXES

axes(handles.axes9);

%ÏÔʾͼƬ

imshow(im);

title('ÊäÈëԭͼ')

% ... Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton2 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Í˳ö

close(gcf)

% ... Executes on button press in pushbutton7.

function pushbutton7_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton7 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Çå³ý

% axes(handles.axes1);

% cla;

cla(handles.axes9,'reset');

axes(handles.axes9);

set(gca,'Xtick',[]);

set(gca,'Ytick',[]);

box on;

cla(handles.axes14,'reset');

axes(handles.axes14);

set(gca,'Xtick',[]);

set(gca,'Ytick',[]);

box on;

cla(handles.axes15,'reset');

axes(handles.axes15);

set(gca,'Xtick',[]);

set(gca,'Ytick',[]);

box on;

cla(handles.axes16,'reset');

axes(handles.axes16);

set(gca,'Xtick',[]);

set(gca,'Ytick',[]);

box on;

set(handles.edit7,'String',' ');

% ... Executes during object creation, after setting all properties.

function edit1_CreateFcn(hObject, eventdata, handles)

% hObject    handle to edit1 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    empty . handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

end

% ... Executes during object creation, after setting all properties.

function axes4_CreateFcn(hObject, eventdata, handles)

% hObject    handle to axes4 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    empty . handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes4

% ... Executes on button press in pushbutton12.

function pushbutton12_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton12 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global im

%%  ʶ±ð

image =  im;

%% ½»Í¨±êÖ¾¼ì²â

% ת»¯µ½hsvÑÕÉ«¿Õ¼ä

imgHSV = rgb2hsv(image);

% ÌáÈ¡±êÖ¾ °´ÕÕÑÕÉ«À´·Ö

% ·ÖÀëÑÕɫͨµÀ + ÖÐÖµÂ˲¨

imgV = medfilt2(imgHSV(:,:,3));

imgS = medfilt2(imgHSV(:,:,2));

%  ³õʼ»¯±êÖ¾¿Õ¼ä

sz = size(imgHSV(:,:,1));

% imgSignR = zeros(sz,'logical');

% hsvÑÕÉ«¿Õ¼ä·Ö¸î

imgSignR = imgS  >= 0.32 & imgV >= 0.5;

% ͼÏñÏÂ1/3²¿·Ö²»»á³öÏÖºìÂ̵Æ

[m,n] = size(imgSignR);

imgSignR(2*round(m/3):end,:) = 0*imgSignR(2*round(m/3):end,:) ;

axes(handles.axes14);

imshow(imgSignR);

title('HSVÑÕÉ«¿Õ¼ä·Ö¸î')

% ¶þÖµ»¯Í¼ÏñÐÎ̬ѧ´¦Àí

imgSignR = bwareaopen(imgSignR,1);

imgSignR = imfill(imgSignR,'holes');

seYR = strel('disk' ,2);

imgSignR = imclose(imgSignR,seYR);

imgSignR = imfill(imgSignR,'holes');

axes(handles.axes15);

imshow(imgSignR);

title('ÐÎ̬ѧ´¦Àíºó')

% ÌáÈ¡±êÖ¾

blobR = BlobSignR(imgSignR);

% ÏÔʾ½á¹û

count = 0;alltitle = [] ;

axes(handles.axes16);

imshow(image);

% zÔØÈësvmÄ£ÐÍ

load model.mat

% ¿ò´¦±êÖ¾

if max(size(blobR)) ~= 0

    for j = 1 : max(size(blobR))

    II = imcrop( image, blobR(j).BoundingBox );

    imwrite(II,['./output/' num2str(clock) '.jpg'])

    %%%%%         1  ÑÕÉ«¾Ø             %% %%%%%%  1*225

      feature1=colorMom(II);

%     »Ò¶È»¯

      if size(II,3) >1

          II = rgb2gray(II);

      end

  %%%%%         3   gaborÎÆÀí    %%%%%%    1*160

      image0 = imresize(II,[32 32]);

      feature2  = Gabor_palm(image0);

      feature  = [feature1,feature2];

      [p_svm, accuracy_svm, p_svm_prob] = svmpredict(1,double(feature), model_svm);

      if p_svm~=1 

         rectangle('Position',blobR(j).BoundingBox,'EdgeColor','b','LineWidth',2);

         text(blobR(j).BoundingBox(1),blobR(j).BoundingBox(2), Name{p_svm}, 'color','b','fontsize', 12);

         alltitle = [alltitle  '  ' Name{p_svm}] ;

      end

    count = count + 1;

    end

end

 title(alltitle)

%   ÏÔʾʶ±ð½á¹û

set(handles.edit7,'String',alltitle);

set(handles.edit7,'ForegroundColor',[0,0,1]);

function edit7_Callback(hObject, eventdata, handles)

% hObject    handle to edit7 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit7 as text

%        str2double(get(hObject,'String')) returns contents of edit7 as a double

% ... Executes during object creation, after setting all properties.

function edit7_CreateFcn(hObject, eventdata, handles)

% hObject    handle to edit7 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    empty . handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

end

function edit8_Callback(hObject, eventdata, handles)

% hObject    handle to edit8 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit8 as text

%        str2double(get(hObject,'String')) returns contents of edit8 as a double

% ... Executes during object creation, after setting all properties.

function edit8_CreateFcn(hObject, eventdata, handles)

% hObject    handle to edit8 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    empty . handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

end

function edit9_Callback(hObject, eventdata, handles)

% hObject    handle to edit9 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit9 as text

%        str2double(get(hObject,'String')) returns contents of edit9 as a double

% ... Executes during object creation, after setting all properties.

function edit9_CreateFcn(hObject, eventdata, handles)

% hObject    handle to edit9 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    empty . handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

end

function edit10_Callback(hObject, eventdata, handles)

% hObject    handle to edit10 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit10 as text

%        str2double(get(hObject,'String')) returns contents of edit10 as a double

% ... Executes during object creation, after setting all properties.

function edit10_CreateFcn(hObject, eventdata, handles)

% hObject    handle to edit10 (see GCBO)

% eventdata  reserved . to be defined in a future version of MATLAB

% handles    empty . handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

end


抱歉,作为AI语言模型,我无法提供完整的代码。但是,我可以提供一些参考信息和思路,希望能对您有所帮助。 红绿灯自动识别系统是一种图像识别技术,可以通过摄像头采集到的实时视频流进行红绿灯状态的识别,从而实现自动控制车辆行驶。下面是一些可能用到的主要技术和步骤: 1. 图像采集:使用摄像头或者其他图像采集设备获取实时视频流或者图片。 2. 图像处理:对采集到的图像进行预处理,例如灰度化、二值化、滤波等,以便于后续的特征提取和分类。 3. 特征提取:从图像中提取红灯、绿灯、黄灯等特征,例如颜色、形状、纹理等。 4. 分类识别:将提取到的特征输入到分类器中进行分类,判断当前红绿灯的状态。 5. 控制输出:根据识别结果,控制车辆的行驶,例如停车、起步、减速等。 在matlab中,可以使用Image Processing Toolbox和Computer Vision Toolbox来实现上述步骤。以下是一些可能用到的函数和工具: 1. imaq.VideoDevice:用于连接和控制图像采集设备。 2. imadjust、rgb2gray、imbinarize等:用于图像预处理,例如调整亮度、灰度化、二值化等。 3. imfilter、imopen、imdilate等:用于图像滤波和形态学处理,例如平滑、开闭运算、膨胀等。 4. regionprops、bwlabel、bwconncomp等:用于图像分割和特征提取,例如区域属性、二值图像标记、连通分量等。 5. trainCascadeObjectDetector、svmtrain等:用于分类器的训练和测试。 6. imwrite、imshow等:用于图像显示和保存。 以上只是一些常用的函数和工具,具体使用方法和代码实现需要根据具体情况进行调整和完善。希望这些信息能对您有所帮助。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光头勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值