【车牌识别】基于图像处理的蓝色车牌识别语音门禁系统——matlab项目实战(含GUI界面)详解

1 摘要

车牌识别系统是计算机视觉与模式识别技术在智能交通里的重要研究课题之一。其功能是将运动中的汽车牌照从复杂背景中提取出来,并识别出车牌号码。车牌识别技术广泛 应用于高速公路上的电子收费,日常的停车场管理以及交通违章监控等场景。它的出现对于维护交通安全和日常治安,防止交通拥塞,实现交通管理自动化有着很现实的意义。 车牌识别技术一般由车牌定位,定位图像中的车牌位置;牌照字符分割,把车牌中的每个字符分割出来;字符识别,对分割出来的字符进行识别,最终给出识别结果组成。

本文在研究了一系列车牌识别的算法的基础上,通过彩色图像灰度化,再进行边缘检测,形态学的膨胀腐蚀操作成功实现对背景的过滤,并通过水平和垂直投影法实现了对车牌的定位;在字符分割的实现上,本文通过先对车牌区域的彩色图像进行灰度化以及阈值处理, 将图像转换为黑白图像,再进行中值滤波,最终结合字符水平和垂直投影的特性,成功完成对车牌字符的分割;在字符识别方面,首先将字符归一化,然后和建立好的模板字符库进行逐一比对,通过找差值绝对值的最小值来实现字符的匹配。本文的算法在MATLAB上进行了仿真和测试,可以较好的识别出车牌号码,并增加了门禁管理系统,以模拟实现小区停车场的道闸。

目录

1 摘要

2 程序演示

3 研究背景及意义

4 车牌定位

4.1 图像预处理

4.1.1 现行机动车牌照规格

4.1.2 车牌粗定位

4.1.3 灰度化

4.2 倾斜矫正

4.3 形态学处理

4.4 车牌精准定位

5 基于投影法的字符分割

6 字符识别

6.1 字符识别方法选取

6.2  字符的归一化处理

6.3 标准字符库的建立 

6.4 字符的匹配识别 

6.5 字符识别结果 

7 仿真与测试结果

7.1 门禁库建立

7.2 创建GUI界面

7.3 识别结果

8 结论与展望

8.1 结论

8.2 展望

9 代码下载

2 程序演示

【车牌识别】基于MATLAB的车牌识别门禁管理系统——实战项目

3 研究背景及意义

近年来,随着我国经济实力的日益增强,以车代步已日趋成为人们交通出行的主要形式,每家拥有一辆甚至多辆汽车也已屡见不鲜。伴随着车辆数量的急剧增加,相应的道路建设(高速公路,高架,城市道路等),停车场设施也越来越多。然而,在交通系统不断发展进步的同时,车辆过多带来的负面影响也日益明显,时常发生的交通拥堵,交通事故给各国都带来了不同程度的影响,在这种背景下,智能交通系统(Intelligent Traffic System, 简称 ITS)应运而生。 智能交通系统(Intelligent Traffic System, 简称 ITS)是以缓和交通拥堵和减少交通事故,提高交通利用者的方便和行驶舒适度为目的,利用交通信息系统,通信网络,定位系统和智能分析系统来实现实时的智能调度和选线优化的功能的系统总称。车牌识别系统 (License Plate Recognition system, LPR)是智能交通系统的重要组成部分,它能从一幅车辆照片中,自动提取出车牌图像,对车牌内的字符进行分割,并识别出车牌的每个字符。 车牌识别技术作为交通管理自动化的重要手段,其主要功能是通过计算机处理汽车图像,自动识别出汽车的车牌号,并进行数据库管理。车牌识别系统广泛应用于高速公路上的电子收费,车辆控制,停车场管理,车辆违章监控以及车辆防盗领域。尤其是在高速收费和停车场实现不停车收费,车牌识别技术起着举足轻重的作用,因而车牌识别系统的 研究和开发有着非常重要的意义。

4 车牌定位

4.1 图像预处理

4.1.1 现行机动车牌照规格

根据我国现行的管理制度,在我国境内行驶的所有机动车都必须到相关部门办理登记,同时按要求悬挂相应的机动车牌照。目前我国使用的车牌主要是1992式民用号牌及2004式军用车牌,相应的标准规定了号牌的尺寸,颜色等要求,部分常见车辆类型的号牌规格如下表所示。

常见车牌的前牌尺寸基本上都是 440mm*140mm。车牌中的机动车登记编号共有7位。 编号第1位是汉字,表示车辆所在省、自治区或直辖市简称,军用车牌表示其所在单位简称;第2位英文字母表示发牌机关代号;第3位到第7位为车辆注册编号,用英文字母(I,O 不可用)及阿拉伯数字表示。民用车牌和军用车牌2和3位之间有分隔符;军用车牌第1位和第2位之间有分隔符。分隔符前牌照为圆点,后牌照为短横杠。 机动车登记编号部分的总宽度为409mm,其中每个字符宽 45mm,高 90mm,分隔符直径 10mm,相邻字符之间(包括字符与分隔符之间)的水平距离为 12mm。 

下图所示为几种常见的车牌样式:

4.1.2 车牌粗定位

由于车牌颜色比较单一,特征比较明显,所以本次系统采用基于颜色定位的算法对拍摄的图像进行蓝色区域判断粗定位车牌的大概位置。

车牌定位中常用的颜色空间主要有三种类型,分别为RGB、YUV和 HSV色彩空间。RGB模型和YUV对光线变化不太敏感。相比之下,HSV同前两个模型有很大区别,它与人眼视觉感知颜色相似,能更好地反映人们对颜色和辨别能力的感知。系统对车辆车牌的粗定位结果如下:

4.1.3 灰度化

目前常用的车牌检测系统捕捉到的图像都是彩色图像,最常用的彩色图像模型即为 RGB 模型,由三个分量组成,分别为 R 通道(红色分量),G 通道(绿色分量)和 B 通道 (蓝色分量),每个分量具有 8 比特的深度。为了在提高图像处理的效率的前提下,将牌照字符和牌照区分出来,需要将彩色图像进行灰度化处理,所谓的灰度化处理,就是将含有色彩和亮度的图像转换为无色彩信息,只含有亮度(或强度)信息的过程。灰度图像某像素点的强度值越大,则该像素点越接近白色。 考虑到我国车牌的规格一般只有蓝底白字、黄底黑字、白底红字和黑底白字几种,利用不同的色彩通道就可以将牌照区域和背景区分出来。对于蓝底白字的车牌,在蓝色通道中,牌照字符和牌照区域区分并不明显,但是在红色和绿色通道中,字符和牌照区域就有很明显的区分。同理对白底黑字的牌照可用红色通道,绿底白字的牌照可以用蓝色或红色通道就可以对比清晰的显示出牌照的位置。

考虑到车牌容易受到光照等因素的影响,会使车牌颜色发生失真,故本文采用加权平均 值的方法对原始车牌图像进行灰度转化。灰度化结果如下图所示。

4.2 倾斜矫正

图像的倾斜是指摄像机在采集车辆照片时由于种种原因导致车牌未水平垂直居中而偏离正确轨迹的现象。如果不采取措施及时对这些倾斜的图像进行水平校正,将会给后面的定位分割识别带来麻烦。倾斜校正的原理就是通过对车牌进行边缘检测,通过算法分析求出车牌的倾斜角度,然后在原图片坐标中反向旋转同样的角度,使车牌处于水平居中的位置。

4.3 形态学处理

数学形态学的对象是集合,因此需要将图像转换为像素的集合。是以几何学为基础的运算,是釆用定义邻域形态和大小的矩阵形式的结构元素对图像进行操作,基本运算有以下四种。

1、膨胀(Dilation)

膨胀运算也叫做扩张运算,是根据不同结构元素的矩阵形式,将图像某个斑块与和该斑块接触的其他背景部分进行合并的过程,可以使图像中各部分小图像的外边界扩大,增加小图像面积。

2、 腐蚀(Erosion)

腐蚀运算又称为侵蚀运算,是根据不同结构元素的矩阵形式,将图像中斑块的边界消除的过程。腐蚀运算的结果是使斑块外边界变小,斑块面积减少,通常用于分割图像中消除杂乱且无意义的部分。

3、 开运算(Opening)

开运算为一种复合运算,首先对目标进行一次腐蚀运算,然后再对目标进行一次膨胀运算。开运算依次经过腐蚀和膨胀,可以保持斑块面积不变,然后较大斑块的的边界会变得比较平滑、细小杂乱物体的边界会被消除,同时使目标的轮廓趋向光滑。

4、 闭运算(Closing)

闭运算也是一种复合运算,首先对目标进行一次膨胀运算,然后再对目标进行一次腐蚀运算。闭运算依次膨胀和腐蚀,能够保持斑块的面积不变,可以填充斑块内细小空洞,使含有空隙的斑块连成一片,与此同时,可消除细长斑块细长 的突出部分,和细长的空隙,同时使目标的轮廓变得光滑。

为了使打断横向信息后的车牌字符区域增强连接特性,采用了闭操作 的方法来进行补偿,其效果如下所示。

4.4 车牌精准定位

在成功将车牌区域确定之后,接下来的工作就是定位出车牌区域四个角的坐标,这里采用的是水平与垂直投影法。 确定水平方向的坐标可以使用垂直投影法,所谓的垂直投影法,可以理解为统计图像范围内每一行的像素和,假设图像的范围是[x:y],即 x*y 的一副图像。则可以定义一个 x 行的数组[x,1]来记录每一行的像素和。因为经过之前的边缘提取和腐蚀膨胀,现在的图像是一个 2 值图像。求每一行的像素和就是统计每一行有多少个‘1’。在得到每行的像素和之后,可以找到对应的最大值和最大值所在行的位置,这里把含‘1’最多行的位置记做 pxmax。在确定 pxmax 行是含‘1’最多的行之后,接下来就可以通过上下扫描来确定水平方向的边界坐标。确定上边界时,先把上边界的坐标 px1 初始化为 pxmax, 然后逐行往上扫描,直到统计到某一行含有像素‘1’的个数小于阀值,也即检测到图片黑色区域(车牌和背景边界处),记录下前一行的坐标作为水平方向的上边界。同理在计算水平方向下 边界 px2 时,也将 px2 出始化为 pxmax, 然后逐行往下扫描,直到检测到像素‘1’的个数小于阀值,即到了车牌下边界,记录下前一行的坐标即为水平方向下边界。

确定车牌垂直方向的边界时,采用的是水平投影法,也即统计图像范围内每一列的像素和,也就是像素‘1’的个数。由于之前已经确定了水平方向的范围[px1:px2],所以只需扫描对应的 px1 行到 px2 行即可。最后把统计结果记录到一个 y 列的数组[1,y]当中,可以 找到结果中含有‘1’最多的那一列,记下其坐标为 pymax。计算垂直方向左边界 py1 时, 先将其初始化为 1,然后从第一列开始向右边扫描,直到扫描到像素‘1’的个数大于阀值, 即到了车牌左边界,记录下前一列的坐标作为垂直方向左边界。同理,在确定垂直方向右 边界 py2 时,将 py2 初始化为 y,然后从图像右边向左边扫描,直到扫描到像素‘1’的个 数小于阀值,即到了车牌的右边界,记录下前一列的坐标,即为车牌垂直方向的右边界。 通过水平和垂直方向的扫描,可以准确的把车牌的边界计算出来。这里计算水平方向边 界时用的阀值是 5,计算垂直方向边界时用的阀值取是 3。 下图是整个算法的流程图:

5 基于投影法的字符分割

经过前面对车牌图像的预处理,可以得到二值化且对比清晰的车牌图像。接下来的工作就是将车牌中的每个字符分割出来。由于字符在垂直方向上的投影必然在字符与字符之间取得局部最小值。所以利用垂直投影法可以将车牌图像中的每个字符成功的分割出来。

和之前计算车牌边界用的方法类似,这里用的垂直投影法也就是对车牌图像进行逐列求和。由于处理的是二值化的车牌图像,求和也就是统计像素值’1’的个数。将求和结果记录在一个数组 sum 中。同时定义两个数组 char_postion 和 char_width,当垂直投影值由零值跳变到非零值时,将跳变后第一个非零值的位置,即第一个字符开始的位置,记录在 char_position 中;同时一直检测非零值的个数,当投影值由非零值变为零值时,这一次的检测结束,将检测到的非零值个数,即字符的宽度记录在 char_width 中。这样从车牌图像的最左边一直扫描到最右边一列结束,可以将每个字符的起始位置和字符长度都计算出来,分别记录在 char_postion 和 char_width 中。

对于字符高度的计算,也可以通过类似投影的方法来实现。本文采用的是对字符区域进行两次扫描,第一次是从上往下,逐行扫描,当检测到第一个‘1’值时,记录下该行的坐标 Py1,第二次扫描是从下往上,逐行扫描,当检测到第一个‘1’值时,记录下该行的坐标 Py2。Py1 和 Py2 的差值即为字符区域高度的最大值,将这个高度作为字符的高度。 这样,字符的高度也确定了。

在计算出每个字符的起始位置,字符宽度,以及字符高度之后,可以将每个字符成功的分割出来。但是由于之前车牌预处理的局限性,会使边上的两道边框和车牌第二、三个 字符间的点也被提取出来。这里可以取一个字宽的阀值,将字符宽度小于阀值的字符忽略 掉。简单的,这个阀值可以取所有字符宽度的平均值,小于平均值的将被忽略。 在将非车牌字符去掉之后,完整的七个车牌字符就被分割出来了,这为后续字符的比对识别奠定了基础。 以下则是车牌字符分割算法的流程图:

计算字符起始位置以及字符宽度流程

 

计算字符高度流程 

在计算得到 Height1 和 Height2 后,字符的高度取 Height1-Height2。至此,字符的起始坐标,字符宽度和高度都已经确定。字符分割的效果如下图所示: 

6 字符识别

6.1 字符识别方法选取

字符识别常用的方法有统计识别,匹配识别和人工神经网络等。因为车牌图像所处环境复杂,所以很难采集到一个完整有代表性的样本作为统计分析的基础。因此,统计方法很难实现。人工神经网络进行识别也需要大量的样本作为学习的对象,通过不断的训练,来获得神经网络的初始值。当识别环境比较平稳时,神经网络通过大量的训练来进行自适应学习,能够形成识别率较高的网络。然后由于实际情况比较复杂多变,通过自适应的方法来训练神经网络的方法也不可取。而匹配识别则是以字符整体的特性为基础, 虽然现实情况中,字符由于车牌的无损或者变形会对字符结构造成影响,但并不影响字符 整体结构的完整性,因此匹配识别有较强的适应性。所以本文匹配识别法来进行识别。

匹配识别的主要方法有:(1)简单模板匹配;(2)外围轮廓匹配;(3)投影序列匹配; (4)基于 Hausdoff 距离的模板匹配。外围轮廓匹配会建立一个描述外围轮廓特征的数组, 记录下字符边界上各点到字符中心像素的距离;在识别时,将获取到的外围轮廓数组和模板轮廓数组进行相关计算,相关系数最大的即为最佳匹配。投影匹配和外围轮廓匹配类似,区别是投影匹配是将整个字符进行投影,对于得到的投影描述数组和预先获取到的模板投影描述数组进行相关计算,取相关系数最大的作为最佳匹配。Hausdoff 距离匹配也是将字符的边缘点作为特征点,记录边缘点所在位置的同时,还记录下每个边缘点周围 8 邻域点的情况,所以每个边缘点取 9 个特征值,来进行匹配。

本文考虑到获取的字符图像较为清晰,故采用简单的模板匹配作为字符识别方法,简单的来说,就是将目标字符和模板字符做逐像素的减法,取两者之差的绝对值,绝对值最小的即为最佳匹配。

6.2  字符的归一化处理

由于分割后得到的字符图像的大小尺寸一般都不一样,如果采取模板匹配的方法,就需要一系列大小不一的模板,预先构建这么多模板是不可能的。因此,需要在字符匹配之前,将所有分割出来的字符进行归一化,将字符的尺寸和模板字符的尺寸统一起来。本文采用的模板字符尺寸为 110*70,所以这里的归一化处理会将分割出来的字符尺寸调整为 110*70。 常用的图像缩放方法有最近邻插入法,双线性内插值法,双三次插值算法。由于分割出来的字符图像内容简单,故考虑用最近邻插入法。

原始图像 f(i,j)和缩放后的图像 g(x,y) 

6.3 标准字符库的建立 

为了使后续模板匹配的工作能够较快的完成,这里构建了一个标准字符的数据库,称为标准字符库。构建标准字符库的目的是对字符根据内容进行区分,将数字归为一类, 英文字母归为一类,汉字归为一类;在归类的同时,将所有的字符进行编号。这样做的目的都是为了下一步进行匹配对比的方便快速。 根据我国车牌标准的规定,第一位是汉字,代表机动车所在省或直辖市;第二位是英 文字母,代表了所在地市单位;后五位则是数字和英文字母的组合。需要注意的是,英文字母‘I’和‘O’不被使用,是为了防止这两个字母与数字‘1’和‘0’混淆。所以字符库总共包括 0~9 这十个数字,‘A~Z’去掉‘I’和‘O’这 24 个英文字母,以及 40 个省、 直辖市的简称。 建立好的字符库如下图所示:

6.4 字符的匹配识别 

对于字符的识别,本文采用的是简单匹配的方法,即将归一化后的目标字符图像和标准字符库里的图像进行逐一比对。这里的比对就是将两幅图像相减,得到一幅新的图像, 统计结果图像中‘1’的个数,个数最少的就是最佳匹配。 在比对之前,为了提高程序效率,可以根据字符所在车牌内的位置来缩小比对范围。 简单的说,根据车牌规则,车牌第一位字符是省份,也就是汉字,则将目标字符与汉字库对比;第二位是字母,则将目标字符和字母库对比;最后五位则是字母和数字,则将目标字符和字母数字库对比,这样可以提高程序的效率。 匹配识别的流程如下图所示:

6.5 字符识别结果 

通过模板匹配计算,得到了每个目标字符和其对应的模板字符库的差值矩阵。如果字符 模板有 N 个,则会得到 N 个差值矩阵,差值矩阵中‘1’个数最少的那个矩阵,就对应了 字符库中相应的字符。识别结果如图所示:

7 仿真与测试结果

7.1 门禁库建立

新建一个DATA文件夹,里面存放着车牌管理的文本文件,一个车牌占一行,可按行添加,如图所示。

设计代码将识别后的车牌号逐行循环遍历TXT文本文件里的每一个车牌号,若有匹配一致的则输出允许通行结果,若没有一致的则输出禁止通行结果。

7.2 创建GUI界面

在MATLAB2021b软件环境下,在命令行窗口输入guide指令,打开gui设计界面,创建坐标区、按钮、编辑框等,界面如下所示。

7.3 识别结果

编辑好GUI界面后,将程序按模块添加到每个按钮的回调函数里,这样一个基于MATALB数字图像处理的实战项目——蓝色车牌识别语音播报门禁管理系统就做好了,结果展示如下:

①属于车库文件里的车牌则允许通行

②不属于车库文件里的车牌则禁止通行

8 结论与展望

8.1 结论

本文是在现有的车牌识别技术上,利用形态学处理技术结合投影技术和模式识别,设计了一个基于MATLAB平台的车牌识别系统。该系统可以对获取到的汽车图像进行处理, 最终输出准确的车牌号码。 本文主要解决了以下几个问题: (1) 实现在汽车图像中对车牌的定位。利用图像灰度化,边缘检测,形态学处理, 空间滤波以及水平和垂直投影法最终准确定位出车牌在图片中的位置。 (2)实现对车牌字符的分割。通过对车牌区域图像的灰度化、二值化及字符在垂直方向上投影特性的分析,车牌的字符可以被完整的分割出来。 (3)实现对车牌字符的识别。通过将分割出来的目标字符作归一化处理,和标准字符库的匹配识别,可以将车牌字符准确的识别出来。

8.2 展望

车牌识别系统的算法多种多样,结合的场景也各不相同。本文实现的系统其实也很有局限性,对于实际情况下获取的车牌图像还可以在定位,纠错和识别方面做出改进:(1)本文的定位算法对车牌与车体区分明显的图像识别效果较好,对车牌区域和车体黏连严重的图像就无法成功定位,后续考虑进一步改进定位算法,比如采用MSER的算法来实现定位。(2)本文使用的汽车图像都是在正对车牌的情况下拍摄得到的,无几何失真,实际情况中,由于摄像头位置的原因,会造成车牌的几何失真,矩形会变成平行四边形;或者车牌本身没有悬挂正,有一定的倾斜,对于这些几何上的畸变的纠正,也是下一步工作要考虑的。 (3)实际情况中,车牌字符由于无损或者遮挡,字符结构遭到破坏,会对匹配识别 造成影响,所以对于结构遭到破坏的字符识别也是下阶段的工作之一。

9 代码下载

若您想获得博文中涉及的实现完整全部程序文件(包括测试图片,代码文件,GUI文件等,如下图),这里已打包上传至博主的面包多平台,见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,实验效果如下:

项目完整文件下载请见参考视频的简介处给出:➷➷➷

参考视频演示:【车牌识别】基于MATLAB的车牌识别门禁管理系统——实战项目_哔哩哔哩_bilibili

 

  • 40
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值