基于机器视觉的车牌识别系统设计.docx
《基于机器视觉的车牌识别系统设计.docx》由会员分享,可在线阅读,更多相关《基于机器视觉的车牌识别系统设计.docx(11页珍藏版)》请在冰豆网上搜索。
![基于机器视觉的车牌识别系统设计.docx](https://file1.bdocx.com/fileroot1/2022-12/1/6a08b012-f0aa-4318-90d9-d4401ebc1e66/6a08b012-f0aa-4318-90d9-d4401ebc1e661.gif)
基于机器视觉的车牌识别系统设计
基于机器视觉的车牌识别系统设计
摘要
由于车牌识别在现在交管非常重要,特此设计了基于机器视觉的车牌识别系统。
以MATLAB软件为开发环境,对其进行研发和仿真。
车牌识别系统主要由图像采集、图像预处理、车牌定位、字符分割、字符识别五个部分组成。
首先,获取一张车牌,对其进行灰度化处理,得到车牌的灰度化图像;其次,通过膨胀腐蚀、平滑处理等操作,只保留车牌区域的有效数据,通过矩形车牌的算法,车牌的倾斜校正后,对车牌进行定位;然后,根据字符之间的相等间距,对其进行分割,根据已经准备好的模板,基于模板匹配算法进行字符的识别;最后,设计了GUI界面,可以更加简单便捷来操作系统,降低使用者的门槛。
通过实验仿真结果分析,本课题的车牌识别系统是可行的。
关键词:
字符分割;字符识别;车牌识别
绪论
随着社会的发展与进步,以5G为首的通信技术、自动化技术等的不断发展,社会的节奏越来越快,私家车的数量与日俱增,车辆管理成为了全球急需解决的一个问题。
智能交通系统ITS(IntelligentTrafficSystem)是实现道路交通信息化管理的主要方式之一,该系统是在当前高速发展的科学技术环境下出现的,以计算机科学、数字信息处理、自动化技术为基础,进一步融合并构建的地面交通管理系统[1]。
车牌就像中国人民的身份证一样,无论去哪,车牌很重要,所以车牌的识别也变得越来越重要。
当智能交通没有普及时,需要大量的交警来指挥交通,这种方法不仅浪费了大量的财力物力,而且交通问题并没有得到明显的改善,相反,智能交通在提高管理车辆的同时也大大节省了人力资源的消耗。
通过将计算机视觉技术与模式识别相结合形成的系统用于智能化的交通管理中被称之为车牌识别系统,它在社会的各个方面都被大面积运用,主要在以下几个方面使用较多:
高速公路ETC通道、城市单双号限制车辆出行、高速路段测速系统、小区车辆的识别和管理、监督并控制车辆闯红灯、停车场自动收费。
在上世纪60年代车牌识别系统就已经开始萌芽,因为当时的交通问题已经很严重了,西方国家为此投入了大量的人力财力,搭建了基于自动化高速公路网的智能交通系统,系统模型初步形成,进入八十年代后,在资本国家的影响下,世界多个国家均展开了智能交通系统的建设,为智能交通的发展奠定了基础。
车牌定位、字符分割识别是其中非常重要的部分。
如果车牌识别的技术在不断地进步,我们的交通就会变成无阻塞、无车祸的样子,为国家也减轻了负担。
首先,我们获取一张图像后,上传到车牌识别系统中去,图像经过预处理、灰度化操作,再对车牌进行腐蚀,从而达到降低车牌定位这一问题的难度。
在定位之前先做Robert边缘检测,使车牌边缘显现出来,车牌被定位好了以后就可以进入下一步——字符分割,在这一过程中会有许多因素会导致不能准确无误的分割,进而字符识别也无法准确实现。
由此可见,本系统的探究有很大用途。
在车牌研究中,存在诸多难点,总结下面几点影响车牌识别过程中的字符分割分割以及字符匹配识别[2]。
室外许多情况会影响车牌图像的质量,致使所获图像好的信息难以凸显。
例如雨天泥水覆盖了车牌的部分、车牌的倾斜度、光线的强弱程度以及车牌周围有遮挡物等问题都会导致车牌识别过程中出现图像清晰度不高,关键信息不明显等现象从而干扰了车牌识别与分割。
摄像头所在的方位和角度。
当摄像机拍照的角度很大的时候,所拍的图片就会产生较大变形,这无疑加重了识别的难度,同时也对字符的分割以及识别产生巨大影响。
车辆的牌照存在多样性。
不同的国家的车牌都有各自的制作规定,所以在设计程序时要多方面考虑,使得图像的识别更加完善。
中国的机动车牌都是由三种字符构成,首先是代表省份的汉子、0~9的阿拉伯数字、A~Z的英文大写字母,这三种字符的形态、大小等互不相同,这无形之中又增加了系统识别车牌的难度。
在许多发达国家中,受到严重污染或者受损较重的车牌被禁止行驶,而在中国却没有这项规定,从而使得车牌不明显。
车牌虽然定位成功,然而在字符识别中还会受到较大影响。
为了解决车牌识别过程中的问题,丁进超通过残差法对图像的亮度、颜色等信息进行分析计算,得到每帧图像的显著图,之后进一步得到全通道显著图以提高对光照等信息的适应能力,并采用双阈值法对车牌分割并获得ROI区域,基于该区域构建BLSTM网络模型实现字符识别。
实验结果表明,所提算法具有较高的准确性[3]。
这个方法是把图像进行灰度化处理,增强车牌图片,并基于投影分割法实现二值图像的分割,对模板匹配的方法进行优化。
通过仿真实验表明,这个方法的识别准确度很高,具有一定的灵活性,在实际的生活应用中已经可以满足[4]。
本文针对对车牌识别系统进行研究,设计实现了基于图像处理技术对车辆牌照识别的系统,具体内容如下:
车牌定位:
第一步通过摄像头获取图片,第二步对图片进行初步的灰度处理,用来降低定位的复杂度以及减小存储空间,再进行腐蚀、平滑处理、移除小对象等,对其进行定位。
字符分割及识别:
车牌字符分割步骤大致为:
首先对车牌二值化处理,再进行倾斜校正,最后利用一种比较成熟的算法模板匹配进行字符识别工作。
GUI界面设计:
利用MATLAB本身提供的各种功能组件进行开发,简单的实现了人机交互功能。
对于车牌的识别这个方面的市场潜力非常大,不同于以前的交通,耗损大量的人力和物力,恰恰相反,现在的交通不仅仅节省人力、物力,同时让我们的交通变得井井有条。
1系统设计概述及开发环境
1.1系统简述
识别车牌的系统重要的步骤:
首先获取车牌图像,第二步进行牌照图像处理,第三步对车牌定位,第四步把车牌字符分割,最后一步是字符识别。
该系统和其他部分构成一个完整的系统,系统中的每一部分都紧密相连。
首先对通过交通路段摄像头拍摄的车辆进行图像采集,灰度化是对首次获得的图片的最基本的处理,用来降低定位的复杂度以及减小存储空间,经过试验表明,灰度化处理之后的图片,对车牌进行定位,这时系统并不能准确的识别出车牌字符,此时要通过字符切分和识别对车牌进一步的分析,然后组成牌照号码并输出号码。
这个系统的各个环节环环相扣,都是密不可分的,每一步都是为后面奠定基础,只有确保每一步准确无误才能完整的识别出目标车牌的信息。
1.2系统流程图
图1-1车牌识别系统工作流程图
1.3开发环境MATLAB介绍
MATLAB(MatrixLaboratory)是美国公司发布的一款商业教学软件,它又名矩阵工厂,主要用于算法开发、数据的分析和数值计算等领域。
其功能十分强大,它可以将数据可视化以及建模和仿真等功能集成在一个简单的窗口里,为全世界的科学进步做出了巨大贡献。
许多领域都可以运用MATLAB进行建模,实现仿真。
它也被称为三大教学软件之一,很多大学里都开设了MATLAB的学习。
现在,它主要用于信号检测、图像处理、工程计算、信号处理、图像处理和通讯等领域。
MATLAB的语言形式极其接近数学表达式,使人们容易学习和掌握,功能丰富的应用工具箱,为解决问题提供了方便。
MATLAB的主要特点如下文介绍。
1)简单易使用
它是一个矩阵语言,也包含函数、数据结构、输入输出以及面向对象开发的特点,更加符合科学人员对数学表达式的书写格式。
并且MATLAB语言移植性好、可以在许多平台进行拓展,因此这也是人们热爱以及应用各个领域的重要因素之一。
2)代码编程的效率高
MATLAB语言它不仅面向科学与工程计算的一种语言,而且还允许用数学表达式。
其程序编辑极其简短,甚至还有智能水平,使用者们不用担心它的准确性。
不用担心其语法的丰富性,MATLAB基于C语言编写,也提供了大量的运算法和关键词供人们使用。
并且它的语法限制不像C语那么严格,有一定的自由度,使用者可以根据自己的喜好进行编写程序。
3)MATLAB的移植性很好。
不用做很大的修改就可以在不同的计算机和操作系统上进行运行,极大地方便了使用者,为研发人员节省了时间,这也是MATLAB语言迅速发展的一种原因之一。
4)MATLAB图形功能也很强大。
在C语言中,绘制图表很麻烦,但是在MATLAB这里,把数据进行图表可视化是很简单的,它还可以进行图形界面的编辑,为人机交互带来了很大的方
2车牌识别系统程序设计
2.1图像采集及图像处理
(1)对于图像的采集,在这里分成两大类:
一类在静态时为了获得某个固定时刻的图像信息,也就是拍照;另外一种就是在动态过程中为了获得一段时间的图像信息,也就是录制视屏。
(2)本系统中所采集的图像都是基于静态的照片改善而来。
我们从摄像头采集到一张车牌的图片,需要选用合适的格式,为了节省空间,用采集到的JPEG格式进行测试,是现在比较流行的一种图片格式之一。
图像预处理
通常情况下,图像是使用拍照摄像头采集的,由于图像采集设备所采集到的图像可能会受到光照强度、空气中的湿度以及车牌周围的种种外力因素影响,可能会使采集到的照片模糊、亮度过高或者过低、清晰度也不够、拍摄区域不对、车牌倾斜等情况发生。
以上日常情况直接导致识别牌照的概率下降,所以需要使用光强校正与对比增强等图像处理方法来改善所采集到的图片。
图像的预处理在车牌系统中是非常关键的一步,它关系到能否准确定位及其定位的正确率。
[5]预处理使得增强目标牌图像的信息更加明显,同时可以去除对处理图片不利的信息,这一点对于车牌定位的准确与否至关重要。
图像灰度化
摄像头获取的是彩图,占用空间比较大,对于计算机的计算带来了负担,会降低车牌识别的速率。
因此需要使用灰度化算法将彩色图像转化为有利于存储与后续识别的灰度图像。
对于只有关于亮度的信息而没有存在色彩的信息的图片称之为灰度图,将彩色的图片运用程序转变成灰度图的过程叫做灰度化,RGB图像是彩色图片的另一种表达,其中R、G、B表示着三种不同的颜色,这三种颜色可以合成为任意颜色的彩色图像,经历过灰度化之后的图片,它们的R、G、B分量是均等的,不会有强烈的颜色差异[6]。
灰度值小的相比灰度值大的来说比较亮。
(其中255代表的是像素的最大值,即白色;0为像素的最小值,即黑色)[6]。
下面的表达式是灰度化的公式:
(1-1)
(注:
H表示灰度图的亮度值;R表示彩色图像红色分量值;G表示色彩图像绿色分量值;B表示彩色图像蓝色分量值[6]。
)
在系统中,通过下面的方式对图像进行读取:
I=imread('ImageOfName.jpg');
在系统中,把彩图转换成灰度化图的函数是rgb2gray()。
图像边缘检测
为什么要进行边缘检测呢?
因为在实际生活中,我们采集到的图像会受到很多的外界的因素影响,例如在光线较暗的夜晚、光照不均匀、噪点影响等因素都会造成采集到的图像的质量差,因此需要对图像进行边缘化处理,来提高图像的整体质量,大大提高了后面字符识别的精确度。
边缘检测有两种方法:
一种是一阶导数的极值,另一种是二阶导数的过零点。
这里采用的是第一种方法,Roberts是一阶微分算子,它还是第一个边缘检测算子,是一种比较经典的边缘检测算子。
它比其他方法好的优点是:
针对陡峭和噪声不高的图像处理效果较好,而且算法比其它几种简单。
Roberts算子计算公式如下:
(1-2)
(1-3)
幅值为:
(1-4)
图像平滑处理
到这一步之前,我么就可以看到车牌图像的大概轮廓了,我们还需进行平滑处理。
在MATLAB中也提供了平滑处理函数imclose(mage_Erode,Se),函数的功能是对我们获得的轮廓图像填补其中的缝隙,将图片处理为连通域,也就是运用开运算让水平相邻的边缘互相连接变成联通的区域。
车牌区域边界计算
经过上面的步骤一系列操作之后,由于图像是由每个点构成的,对图像中的区域进行标记,每个点只有0和1两种情况。
其中车牌部分的像素值全部为1,通过区域中心位置、矩形的形状以及面积等来进行定位车牌的边界。
车牌倾斜校正
在现实情况下,车辆的牌照经常是倾斜的,这对于分割字符而言存在巨大影响,如果使得牌照水平的话,将会大大改善分割效果。
如果不进行车牌校正,不仅水平投影和垂直投影受到影响而且分割同样很难实现。
这个时候,对于倾斜的校正显得尤为重要,因此图片在二值化处理过后便马上进行了适当的倾斜校正。
由此产生以下方法:
霍夫变换、图像旋转。
其中使用频率最多的是霍夫变换,其基本思想如下:
根据霍夫变换检测车牌上下边缘的两直线框的倾斜角度,此时我们设M为车牌区域图像,为校正后图像并且找出倾斜车牌区域的中心点位置坐标(,),由于要将倾斜的车牌校正为标准矩形我们只需要在水平方向进行校正,即校正前后横坐标位置不发生变化,只需要设置车牌倾斜度即可,则校正后的图像的每一个像素(x,y)可以由校正公式得到。
2.2字符分割
采用模板库匹配识别,需要一个一个字符进行比对,输出匹配度最高的模板库里面的字符。
我们需要把车牌的字符分割开来,这个过程叫做字符分割。
字符分割前的去噪处理
我们提取车牌的图像为RGB图像,也将图像转换为灰度图,并将车牌二值化。
使图像变成只含有黑与白的色彩的过程叫做二值化。
在数字图像的处理中,二值图像是为后面图像处理奠定了基础[7]。
图像二值化是为了确保后面的图像处理步骤的完整性和准确性,并且显现出车牌轮廓。
系统会指定一个值,当任意一个像素点的灰度值大于它的时候,就会以255的灰度呈现,其它则用0值表示。
进一步运用均值滤波算法对图像进行处理,把图像锐化。
字符分割方法
由于字符识别是一个一个进行识别,因此车牌识别系统中的字符分割是非常重要的。
众所周知,车牌字符之间都有间隙,为我们分割字符带来了便利,进过实际测量以及调查,字符之间的间距为12mm。
这里采用的是垂直投影法分割字符,把二维图像按列向x轴方向的投影,垂直投影又是指二维图像按照行向y轴方向进行投影,投影出来的图像为一维图像。
2.3字符识别
经过字符分割的图片是单个独立的字符图片输入系统识别,经过系统后的是完整车牌号码,车牌字符识别准确的反映了车牌识别系统的性能[8]。
汉语字符、阿拉伯数字以及英文字母是组成中国汽车车牌的三个最基本的要素,而本次识别车牌的系统对于这三类字符的识别能力也是大相径庭,车牌识别是以将牌照的字符信息最终变成PC可以识别的字符串的方式为本质的[9]。
显而易见,字符的识别是本系统成功的重要一步。
字符识别方法
其识别模式有以下:
(1)结构模式;
(2)统计模式。
对于第二种识别方法,又衍生出:
匹配模板、变换特征。
实际中,常用的是前者,同时有一种方法也很实用:
人工神经网络。
模板匹配:
同过将获取的字符与模板里面的样板直接进行比对,具有高相似度的则是我们所得到的结果。
模板匹配在车牌字符较规整时,字符图像抗污渍干扰能力较强,但它计算量较大并且速度慢。
人工神经网络:
根据人脑神经元细胞设定的网络结构,神经元这一识别系统中常用的基本原件大量构建而成,并且形成的是非线性的动态系统,近些年对这种网络结构的探究仍有较多的瑕疵。
[9]
因此本课题采用模板匹配的方法来进行字符识别的方法,步骤如图2-3所示:
图2-3字符识别流程图
字符模板库的创建
本次仿真实验的字符识别部分是采用的模板匹配的方法来识别车牌号码,因此我们要创建模板库来与处理的车牌号码进行匹配。
模板库的创建非常简单,大量收集车牌号码,尽可能凑齐0至9和“A”到“Z”的数字与字母,通过上面的步骤对车牌进行腐蚀、移除小对象、分割等处理后,我们就会得到一个个单独的数字与字符,我们把收集到的字符放到本地模板库,编写程序与之关联。
下图2-4是创建的一些模板库:
3实验仿真及分析
3.1图像处理及车牌定位
本文仿真所选择的车牌图像如图3-1所示,该图像的灰度图与灰度直方图如图3-2所示。
并进行了图像的显示。
车牌图像经Roberts算子边缘检测后的效果如图3-3所示。
根据图3-3可知,经过边缘检测处理,车牌的大致轮廓可以提取出来,白色的线条都是标记出的轮廓。
但是,图中还有一些其它的白条,有一定的误差,还需要进一步进行处理分析。
下面给出了车牌定位的图像。
结合图3-4可以看出,通过仿真软件运行代码,本次车牌比较成功的定位了。
3.2车牌字符分割及图像处理
在这里是要对车牌的字符进行分割及处理。
在分割前,我们要做一些预处理,对图像进行滤波处理和膨胀等操作,降低图像的噪声,锐化图像。
在这里对字符进行分割。
在字符分割前,我们还要对车牌图像字符的尺寸进行归一化操作,把尺寸变成40*20的大小,然后就可以对字符进行分割了,图3-6给出了字符分割后的结果图。
结合图3-6可知,车牌总共分割为7个字符,每个字符的尺寸大小一样,与模板相匹配,可以进入下一步的字符识别。
车牌图像经字符分割后,基于模板匹配法对分割的字符进行匹配识别。
结合图3-7可知,经过一系列操作之后,车牌字符已被成功地识别出来,达到了本课题的设计目的。
3.3实验结果和分析
按照上面的步骤,找了多张不同的车牌进行识别,来验证本系统的准确率以及性能的稳定性,识别过程中的问题以及原因如下。
车牌系统准确率检测
下面是检测过程中成功以失败的检测结果,根据多次试验,准确率在70%以上。
下图3-8为车牌识别失败图样例:
车牌识别结果分析
识别失败分析:
上面通过图像的采集、预处理、定位以及字符的分割识别,最后得到我们想要的结果。
在实验中,有几次车牌识别不成功,主要是采集图片时受环境影响较大,因此在采集图像时,光感度要适中,拍摄角度要正确,图片要清晰。
进行边缘检测的时候,检测的边缘是不连续的,有的不是车牌区域也检测进去了,因为算法还不够完美,处理比较呆板,有一定的误差出现。
在车牌识别的时候,有一定的几率会把车牌上的字符识别成相似的数字和字符,从而造成车牌识别失败。
分析原因,是在车牌灰度化处理和腐蚀车牌带来的,车牌字符的一些细节和特征被抹掉了,使一些本来差异就比较小的字符看起来更加相似,给识别带来了困难;也由于本方法是基于本地的模板进行匹配,模板中的字符也不够标准造成的。
车牌的识别速度比较慢,是由于系统要把字符都分割开来,一个一个单独去匹配识别,所以识别的速度比较慢。
最后,
总而言之,本系统可以成功实现车牌的识别,达到设计的要求。
其中还存在除了以上的不足,在以后继续打磨,提升识别的质量。
4MATLAB界面设计
4.1GUI介绍
GUI界面是用户与操作程序的接口,用显示图形的方法来进行操作,进而实现了人机交互。
图形界面有许多的优点,它不仅美观,还极其具有实用性,使操作更加人性化,为使用者大大减轻了负担。
GUI的应用领域非常广泛,例如在车载系统、PC等领域都运用了GUI,这样可以使使用者的门槛降低。
MATLABGUI界面的设计可以通过在Command内输入guide命令,进入GUI界面编辑器,如下图所示:
利用界面编辑器左侧给出的选项完成相关组件的添加,例如添加按钮、图像框等。
当我们点击添加的组件时,它将弹出该组建的属性编辑器,如图4-2所示。
创建了按钮,我们只需要让按钮与回调函数产生关联,点击按钮时,就可以触发其关联的功能。
我们设置按钮属性中的Callback,在功能函数中编辑我们所需要的功能。
本文主要用到Callback这个函数来实现相应的功能,我们把此函数与相应的按钮建立关系,并把我们需要实现的功能写进函数内,当我们用鼠标点击按钮,就会调用Callback函数,从而开始执行内部所编写代码相应的功能。
4.2人机交互界面设计
设计了输入图像、图像处理、退出系统三个按钮,下面介绍按钮回调函数的设计。
设计得到的界面如图4-4所示。
当我们界面设计好以后,让按钮与相关程序进行关联,从而达到当我们按下按钮时达到相关功能的实现。
输入图像按钮:
当我们按下按钮时,会让我们选择要识别的车牌号码,然后在GUI面板上显示出来我们的图像。
通过pushbutton1_Callback(hObject,eventdata,handles)这个函数来实现。
图像处理按钮:
当我们按下此按钮时,系统会调用相关函数对我们刚才上传的图像进行处理,并且把处理的过程都呈现在GUI界面上,可以直观的了解车牌图像处理的过程。
通过pushbutton2_Callback(hObject,eventdata,handles)这个函数来实现。
退出系统按钮:
车牌识别成功以后,我们可以按下退出系统这个按钮结束本次的车牌识别。
通过pushbutton3_Callback(hObject,eventdata,handles)这个函数来实现。
结论
本系统基于MATLAB软件,通过对图像的预处理、定位、字符的分割识别一系列关键步骤之后,将现实生活中对于车牌照在各种复杂环境下的捕捉识别提出了成熟的解决方案。
其中最难的是对于获得的字符的分割,分割的准确与否和系统能否准确快速的识别紧密相连。
本系统的核心是字符的识别,通过前面一系列的铺垫后,最终目的就是获得牌照的信息。
本课题由于之前对一些算法了解的很少,查阅了很多资料去学习,车牌处理的步骤可能还有很多改进的地方。
我主要是对车牌整个系统进行了分析,介绍其主要的组成部分。
在车牌定位中,进行一系列的小步骤,如腐蚀、移除小对象和平滑处理等操作,通过车牌区域边界值计算定位车牌。
在字符识别过程中,自己选择了模板匹配的算法来识别车牌字符,经过自己多次验证,模板匹配是可行的,达到了本课题的设计要求。
为了使用方便,也特意设计了人机交互界面,利用MATLAB提供的控件设计了简单的GUI界面。
飞速发展的智能化设备已经渗透到社会生活的各个层面,特别在于交通车牌识别领域的应用是举足轻重的,科技工作者也不断推陈出新,创造更加完善的智能化识别系统。
复杂环境下的车牌识别仍然存在诸多限制识别的因素,车牌识别技术仍有缺陷,但是现代智能飞速发展已经向这车牌识别提出了更高的要求,还需通过艰苦卓绝的努力去完善此系统。
由于个人能力有限,本课题还有许多方面的问题去解决,以后需要继续深入研究的方面有:
系统采用模板匹配算法对字符进行识别,该方法得到的准确率较差,因此可以考虑对方法进行优化或结合其他算法进行改进;继续添加功能,使系统变得更加完善。