基于Matlab的交通限速标志的识别系统 数字图像处理大作业

本大作业为基于Matlab的交通限速标志的识别系统,

考虑到在科技发展的今天,智能汽车行业发展迅速,所以交通限速标志的快速检测及识别对车辆的安全行驶极为重要,因此本系统可以检测到图中的交通限速标志并对其中的限速标志进行标定,通过字符匹配以及卷积神经网络CNN两种检测方式,来检测限速标志的限制速度,具有一定的研究价值。

  交通限速标志的识别系统包括检测和识别两个部分,检测部分包括图像采样、图像预处理、图像分割、数字标定、目标提取;识别部分有特征提取、特征分析与图像字符匹配等内容。系统框图如下:

1 系统框图

设计步骤详细介绍:

一、.交通限速标志识别介绍

1.选题背景

  随着交通技术的日益完善和交通工具的多样化发展,交通安全成为当前最热门的问 题,道路交通关系着人们的生命以及财产安全。

  交通限速标志的识别是保证交通安全的一个重要环节。当驾驶员在高速行驶时,很容易忘记注意路边的限速标志,而超速不仅意味着罚款,更是对自己和他人的生命有着重要隐患。

  现如今国内基础建设发展迅速,交通方式逐渐多样化,但目前占主导地位的仍旧是道路交通。然而随着经济的不断发展,越来越多的家庭拥有了自己的代步车,这也使得交通安全和堵塞成了日益严重的社会问题,同时也造成了惊人的经济损失,从而使得道路交通需要求助于智能技术。智能交通系统(Intelligent Traffic System,ITS)这一研究领域应运而生,并且迅速发展起来。本文所研究的交通标志识别(Traffic Sign Recognition, TSR)则是智能交通系统中十分重要的一部分。

2.国内外研究现状

国内外对交通标志的检测方式主要分为两类,分别是基于人工提取特征和基于深度学习的检测

2.1基于人工提取特征的交通标志检测

基于颜色特征和形状特征的交通标志检测,在中国交通标志中,红色、黄色、蓝色是构成交通标志牌的主要颜色,分别代表禁令、警示、知识3种指令,因此在交通标志的检测中可以作为主要的判断特征。对此,有学者通过对色彩区域的特征进行提取,从而定位交通标志的所在图像区域。基于RGB颜色模型方法和基于HSI颜色模型方法是基于颜色的交通标志检测的主要方法。

2.2 基于深度学习的交通标志识别

自2006年Hinton提出了在非监督数据上建立多层神经网络的方法以来,越来越多的人开始投人到深度学习的研究中,从而诞生出了大量的有关目标检测的算法,其中很多研究针对交通标识检测的复杂环境进行了优化改进。基于深度学习的目标检测目前主要有one-stage和two-stage两种类型。Two-stage一般指的是检测算法需要先获取候选区域,然后进行分类。这种算法是以RCNN为代表,主要包括Faster R-CNN, Mask R-CNN 以及Cascade R-CNN等。One-stage算法与之相对应,不需要单独寻找候选区域。这种算法以YOLO6为代表,主要包括YOLOv1, YOLOv2, YOLOv3等[1]

3. 识别的交通标志要求

1.图片中交通限速标志位置不固定,可以居中、倾斜

2.识别出交通标志的图形,并显示出对应的限速数字

二、设计思想

1.要求分析

通过查阅相关资料,主流的交通限速标志的检测识别方法分成两类。一类是利用机器学习算法,通过训练数千张交通限速标志的数字图片来进行数字的识别,通常需要一定规模的训练数据。另一类的方法,通过图像的基本操作与图像的特征来提取标志,并通过字符匹配的方法,来对数字进行识别。

通过对给定样张的分析,可以发现,限速标志作为警告示标语,边框通常常用红色,而且标识框均为圆形。本文以此为基础将一步步分析如何提取限速标志以及提取过程遇到问题以及解决策略。

通过上文给出限速标志的基本特征(外边框为红色且为圆形),本文利用颜色空间的方法,先提取出红色区域,在通过图像的开闭运算,膨胀腐蚀操作进行预处理,最后在利用不同区域是目标的可能性进行逐一筛选。这里要指出目标的可能性这一说法,是指该区域类圆的概率以及该区域的面积的加权和。最后,针对一些红的目标可能重叠的情况,进行最后的加工。

紧接着提取标志中的数字,通过对给定的图像进行统计,可以发现如果是限速标志,其直方图通常是双峰,一个峰为目标区域,另一个则为背景。这样就可以分理处数字了。然后对于提取出的比较清晰的数字图再次进行开闭运算,字符切割等操作,将其分割成单个数字,再进行识别。

下面将对步骤进行详细介绍。

①图像增强(6.5)

事实上,这并不是我在刚开始写程序时的第一步,而是在最后进行图像识别时观察到好几图片由于受天气以及光线变化的影响较多,图像的亮度变化较大,在雨雪、雾霾、黄昏等况使得亮度会变弱,不利于对图像进行颜色分割,因此通过查阅资料,在最开始使用Retinex算法进行图像增强。下面对Retinex算法进行简单介绍:

Retinex算法理论由Edwin.H.Land和John McCann在上世纪60年代提出的一种可以保持颜色恒常性的图像增强算法。

Retinex理论的基础理论是物体的颜色是由物体对长波(红色)、中波(绿色)、短波(蓝色)光线的反射能力来决定的,而不是由反射光强度的绝对值来决定的,物体的色彩不受光照非均匀性的影响,具有一致性,即Retinex是以色感一致性(颜色恒常性)为基础的。不同于传统的线性、非线性的只能增强图像某一类特征的方法,Retinex可以在动态范围压缩、边缘增强和颜色恒常三个方面打到平衡,因此可以对各种不同类型的图像进行自适应的增强[2]

Retinex 理论中,人眼获取到的外界颜色信息主要来自于太阳产生的入射光以及光线在物体表面产生的反射。如图 2 所示,I(x,y)是人眼或相机获取到的图像信息,先是由太阳产生的入射光照射,然后经过物体反射从而射入相机 I 中,最终形成人们所看到的图像。该过程为

I (x , y ) = R ( x , y ) ´ L ( x , y)

(1)

其中,I(x,y)为相机接收到的图像信息;L(x,y)为环境光照射在物体上的照射分量;R(x,y)为带有物体细节信息的反射分量。将式(4)取对数,其中的乘积关系转为和的关系,根据原图估测出 L 的值,即可

获取到物体原始的信息 R,消除光照的影响,即

log[R ( x , y )] = log[I ( x , y )] - log[L ( x , y)] (2)

单尺度 Retinex 算法(single scale retinex, SSR)

Retinex 理论中最有代表性的方法,其基本步骤如下:

Retinex算法默认一幅给定的图像S(x,y)可以分解为两个不同的图像:反射图像R(x,y)和亮度图像(也有人称之为入射图像)L(x,y)的乘积。而我们把入射图像(低频部分)去掉以后,留下的就是我们希望得到的增强边缘以后的结果了。先来看一下算法的处理流程图:

2 Retinex的编程实现

步骤 1. 输入原始图像 I,确定高斯滤波的半径范围s。当s的取值较小时,处理后图像的细节对比度能够得到提升,但是可能会出现图像颜色失真的情况;当s 的取值较大时,处理后图像的颜色信息较为自然,但是细节信息将会不明显。

步骤 2. 根据输入的原始图像 I 高斯滤波后的结果,得到照射分量 L

步骤 3. 根据式(5)计算得到带有细节信息的反射分量 logR

步骤 4. 将得到的结果归置到[0,255]的像素范围内,归置式为

图3 Retinex算法原理图

图4 Retinex算法图像增强后的限速标志

②从颜色空间中提取红色(5.31)

由于RGB空间中R,G,B三个分量不是能较好的刻画红色,这里先转换到HSV空间,在进一步提取。通过将h通道颜色值特定范围内饱和度设为0,保留范围外颜色值,这一步中的难点在于h值是多少时,将其饱和度设为0。我通过多次手动尝试调整参数,找到合适的阈值,对彩色图像的红色部分提取出来[3]

图5 颜色空间中提取红色

③初步预处理图像(5.31)

对二值化后图像进行膨胀腐蚀开闭运算等操作,并使用bwfill函数读腐蚀或膨胀后的图像产生的孔洞进行填补,使其成为一个完整的圆形。这一步对结果有这举足轻重的作用,由 图可知疑似目标均以圆环形式呈现,但是我们知道,这种比较细的纹理在进行图像运算过程中,很可能断裂,甚至缺失,那么为了防止目标的丢失,首先需要填充圆环。这样就可以通过腐蚀重建减少椒盐噪声的影响。非常细节的一步处理!

图6 图像初步预处理

④引入圆度概念(6.2)

对图像进行初步预处理后,就该考虑如何标定出我们所需的交通限速标志的目标区域,从而完成进一步提取,通过查阅资料[2],我选择采用圆度和面积的加权值来进行判断。

显然通过预处理,大部分目标已经聚集成块,那样就可以得到各个区域的面积,这样一来,便可以通过这一信息构造区域特征描述子,进一步消噪。
这里先指出圆度定义[4]

(3)

S 指该区域的面积,P指该区域的周长
由于目标大多为圆形,这里自然采用圆形结构元素,半径Radius定义如下

(4)

threshold为给定的一个阈值,n指满足分子区域块个数。
这个半径的提出,认为圆形的区域是目标的概率更大。利用这种方式既可以保证较大的非

目标区域不会对小目标造成干扰,也可以有效的去除相对可能目标的较小的噪音点[1]。

标准圆形的圆形度为1,通过计算每一块区域的圆形度,取最像圆的区域求平均面积,

图7 计算图像区域圆度并提取

⑤提取目标区域并对区域进行标定(6.2)

创新点:

目标量度有两个方面衡量,一个是面积,面积越大越有可能是目标;另一个是圆度,越圆越有可能是目标。

(5)

其中w1指类圆度权重,w2指面积权重,且w1+w2=1。

求出每个区域的W值,当大于权重阈值 WEIGHTTHRESHOLD=0.7时,则该目标被初步认定为限速标志。

图8 目标区域标定并框出

⑥对目标区域内数字部分与其他分割开来(6.3)

通过上面的的工作,以及可以较好的扣出目标,现在放在面前的工作便是数字标定。本质上就是在分割的过程,经过实验发现,圈定的目标的直方图是双峰的,于是,本文采用基于双峰阈值的分割方法。

图9 对目标区域的直方图进行观察

图10 对数字区域进行标定并框出

完美标定!

⑦分析不足并改进(同态滤波)(6.6)

但是在处理过程中,出现一些了一些不理想的情况。由于在拍摄过程中有的限速标志上会因为太阳光的照射产生反光现象,非常影响图像符号的标定,于是想到了课本202页第四章频率域滤波中的同态滤波,可以一定程度上消除原始图片中光照不均匀对识别产生的影响。

下面对同态滤波进行介绍:

是把频率滤波和空域灰度变换结合起来的一种图像处理方法,它根据图像的照度/反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。

一幅图像可看成由两部分组成,即

(6)

其中,fi代表随空间位置不同的光强(Illumination)分量,其特点是缓慢变化,集中在图像的低频部分。fr代表景物反射到人眼的反射(Reflectance)分量。其特点包含了景物各种信息,高频成分丰富[5]

同态滤波过程,分为以下5个基本步骤:

① 原图做对数变换,得到如下两个加性分量,即

(7)

② 对数图像做傅里叶变换,得到其对应的频域表示为:

(8)

③ 设计一个频域滤波器H(u,v),进行对数图像的频域滤波。

④ 傅里叶反变换,返回空域对数图像。

⑤ 取指数,得空域滤波结果。

同态滤波的关键在于滤波器H的设计。对于一幅光照不均匀的图像,同态滤波可同时实现亮度调整和对比度提升,从而改善图像质量。为了压制低频的亮度分量,增强高频的反射分量,滤波器H应是一个高通滤波器,但又不能完全cut off 低频分量,仅作适当压制。本实验中采用的高通滤波器H的参数均是手动调制得出,不具备普适性,后续仍有很大改进空间

图11 同态滤波原理框图

我们希望对低频能量进行压制,这样就降低了动态范围,而要对高频进行提高,这样就增强了图像的对比度,示意图如下:

图12 同态滤波示意图

同态滤波的编写不难,难点在于参数的选择,而对于每一张图片不同的反光点不同的对比度也就意味着每一次的同态滤波都要与之前不同,并不存在适用性,但也是一个消除图片光照不均匀的一个方法。

图13 同态滤波前后效果对比

⑧数字分割(6.4)

经过对原始图像的种种处理,已经可以得到比较清晰的数字图像了,接下来要做的就是对数字进行识别。

首先要进行数字分割:

系统在读进来的图像中一般会含有多个数字,识别的时候只能根据每个字符的特征来进行判断,所以还要进行字符分割的工作。这一步工作就是把图像中的字符独立的分割出来。

具体的算法如下:

第一步,先自下向上对图像进行逐行扫描直至遇到第一个白色的像素点。记录下来。然后再由上向下对图像进行逐行扫描直至找到第一个白色象素,这样就找到图像大致的高度范围。

第二步,在这个高度范围之内在自左向右逐列进行扫描,遇到第一个白色像素时认为是字符分割的起始位置,然后继续扫描,一直扫描直至图像的最右端。这样就得到了每个字符的比较精确宽度范围。

第三步,在已知的每个字符比较精确的宽度范围内,按照第一步的方法,分别进行自上而下和自下而上的逐行扫描来获取每个字符精确的高度范围。

图14 数字分割

⑨数字归一化(6.4)

对于字符识别来说,归一化是一个很重要的预处理因素。由于在拍摄限速标志时位置不同距离不同,可能导致获取后的数字图像字符的大小不一。对于大小不一的数字图像,处理起来很不方便,因此在通常情况下,在对字符进行预处理的时候,我们必须将单个字符进行归一化处理。 归一化处理一般的是将单字符图像进行归一化到固定的大小的数字图像,例如在后面进行的字符匹配识别中归一化后的数字图像大小为40×20,卷积神经网络识别中归一化后的数字图像大小为28×28。进过归一化处理后,将大的图像信息进行缩小到固定大小的数字图像,这样在提高识别率的同时也能提高处理的效率。

这里使用imresize()函数的来改变图像的大小,默认采用最临近插值

图15 数字归一化

然后对切割后的数字识别,本系统采用了两种识别方法:①字符匹配法②卷积神经网络识别法,下面进行详细说明:

⑩字符匹配法识别数字(6.7)

1.字符模板制作:

模板的要求是与要识别的字符的字体格式一致,制作出需要的字符模板,从0到9共10个数字。

2. 字符模板归一化

在满足识别率的条件下,尽量采用小模板识别可以提神运算速度,具体的模板大小,可以根据后面的与待识别字符的比较中调节。本实验中采用40×20大小

图16 字符模板

3.识别过程:

将待识别字符与字符模板做同样的归一化处理,然后遍历与字符模板比较,处理方法为先和字符模板做差,然后计算做差后的图像的总像素值,如果小于每一个阈值,则表示该待识别字符和该模板是同一个字符,这样就完成了一次识别。

循环对要识别的字符做同样的处理就可以识别出所有的字符,将结果保存在字符串中。

图17 模板匹配法识别效果

可以看出,因为交通限速标志上的数字是标准的印刷体,所以字符模板匹配识别效果非常好

卷积神经网络法识别数字(6.9)

考虑到使用卷积神经网络需要大量的训练集进行训练,而网络上又没有关于交通限速标志的训练集资源,于是我想到了matlab自带的一个关于手写数字的MNIST数据集来训练,在搜集资料过程中,我看到了一篇写的非常好的微信文章[6],让我对卷积神经网络有一个很深入的认识。

Matlab有很强的深度学习的功能,MATLAB分别提供了拟合、分类、聚类以及动态时间序列方面的浅层网络算法,在训练网络时,我们只需要初始化训练参数,然后调用MATLAB内置的训练函数即可,MATLAB以产品默认内嵌和额外附加(Add-On)的方式,为用户提供了一系列的支持,包括APP(利用图形界面交互操作完成某些工作)、函数(编程接口)、预训练好的模型以及数据集、代码生成器、测试验证及版本控制、项目管理等,来完成深度学习应用开发各个步骤的工作。MATLAB还提供了deepNetworkDesigner,可以通过GUI来完成模型的搭建,并加载数据集,对搭建好的模型进行训练。

图18 卷积神经网络原理图

在MATLAB中构建卷积神经网络(CNN)模型结构,采用CNN模型中典型的LeNET-5的卷积模型,通过对采集图像进行逐层学习,训练与测试,将学习得到的高层特征用于手写数字识别.以随机手写数字与字母进行图像验证,结果表明,该模型算法应用于手写数字或字母准确识别,可获得较高的识别率,具有一定的通用性。LeNet-5 网络层数较少(3 个卷积层和 2 个全连接层),参数量较少,计算代价较低,很适合这种小规模系统的数字识别,可以保证判断实时性下图为训练所用训练集部分。

图19 训练集部分数字

图20 训练神经网络

⑫GUI界面(6.13

最后稍微写了一下GUI界面,由于刚开始没想着写GUI,很多地方没留接口,所以GUI写的凑活了点,勉强可以体现一下程序运行状况。如下图为GUI界面设计

  • 2
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

man1669

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

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

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

打赏作者

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

抵扣说明:

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

余额充值