车牌识别系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
摘要: (2)
关键词: (2)
一、国内外已有车牌识别算法分析: (2)
二、基本原理及相关算法: (2)
(1)系统框图: (2)
(2)具体实现: (3)
1)图像增强: (3)
2)车牌定位: (3)
3)字符分割: (4)
4)字符匹配: (5)
三、实验及结论: (6)
四、感想: (8)
附:操作界面 (8)
摘要:本文首先对现在国内外已有的图像处理的算法进行总结、整理和分析,进而提出了一套组合了已有算
法的车牌识别处理程序,在文中,首先给出了程序的整体流程,然后,按流程分别介绍了每一步的实现方式和具体算法,最后对程序进行验证和总结,得出结论并写了一些感想。
关键词:图像处理、车牌识别
一、国内外已有车牌识别算法分析:
一个完整的车牌识别系统应包括图像预处理,车牌定位,字符分割和字符识别几个部分。
在图像预处理阶段,要实现的功能是提高得到图像的质量,首先是采用平滑滤波处理消除系统噪声,之后若要采用边缘提取,则在此步中要加强边缘。现在已有的加强边缘的方法有:(1)利用高通滤波器加强边缘后与原图像相加;(2)利用低通滤波器取得背景后与原图像相减;对于已经进行过边缘加强的图像,再使用一定的方法进行阈值化处理,现有的阈值化处理方法主要有:(1)给定阈值阈值化;(2)最佳全局阈值阈值化;(3)自适应阈值阈值化。进行完阈值化之后,再对二值图像进行边缘提取,边缘提取的方法主要有:(1)利用sobel算子或者拉普拉斯算子等提取边缘;(2)利用CANNY算子提取边缘。至此图像预处理可能会用到的步骤就全部说明了,但并不是所有的程序都会使用所有的这些步骤,这还要根据后面选择的识别方法来定。
车牌定位:车牌定位使用的方法主要是基于车牌颜色的定位方法。就是检测图像中的蓝色区域作为车牌的区域加以定位和提取。但这钟方法的一个缺点就是对车牌的颜色有选择性,且图像的色彩质量要求较高;另一种方法是采用对提取边缘后的车牌图像进行反复的开闭运算,以填补字符中间的空缺,勾画出一个车牌的区域并与源图像结合提取出车牌。该方法的定位效果受车牌与结构元的相对大小影响;第三种方法是对提取边缘后的图像在水平方向上检测亮、暗变化次数,超过一定的阈值则定义为车牌区域,该方法易受噪声等因素影响。二、三两种方法由于有时会产生多于一个的候选区域,这时有的方法还会增加上检测矩形的长宽比来最终选择出车牌。
字符分割:现在广泛采用的字符分割方式是基于车牌的灰度投影曲线,曲线的波谷就是分割点。在字符分割之前,有些系统还提供了基于直方图的倾斜校正功能。
字符识别:现在比较流行的方法是基于BP网络的字符识别,成功率较高,但程序复杂;而一种比较简单的方法是利用模板与分割的字符想减或者是字符的矩等简单变量进行识别,虽然简单,但效果不如前者。
未来车牌识别的发展趋势依旧是向着更加智能化和高的识别成功率方向迈进,相信随着人工智能和图像处理理论的发展,这一点将不难实现。
二、基本原理及相关算法:
(1)系统框图:
(2)具体实现:
1)图像增强: 子程序框图:
说明:
采集到的图像存在噪声,需要进行去噪处理。本程序采用高斯平滑滤波器处理,可以消除振铃效应。之后加强纹理,首先由开操作提取背景,再将背景和源图像相减即可。对于处理完成的图像再进行阈值化处理。阈值化的阈值确定方法为最佳全局阈值,它可以根据图像的整体灰度确定阈值,但他还有一个问题是确定的阈值偏低,所以我又加以修正。最后对于阈值化的图像利用CANNY 算子进行边缘提取,为下一步车牌定位准备好图像。
处理所得图像:
2)车牌定位: 子程序框图:
具体实现:
车牌定位中,采用的是开闭操作的方法。因为从上一步的边缘图像中可以看出,车牌位置处因为有字符的边界线,所以内部黑色的孔比较小,可以采用先膨胀再腐蚀的开操作连接中间的孔,以便求出整个的车牌区域位置,但是由于周围存在噪声点,也要使用先腐蚀再膨胀的闭操作去除小噪点,经过反复处理后即可得到完整的车牌区域的位置。这时车牌的位置是以一个白色方框的形式表示的,而从图像中提取出车牌的图像我采用的是将源图像和这个区域相减。得到车牌的位置后,只要用一个固定阈值进行阈值化再转变成灰度图像即可。然后需要将提取出来的图像保存,采用设置ROI 后再保存的方法就可以只保存车牌区域的图像。
附:开闭操作的模板
模板一:5×5正方形,原点为(3,3) 模板二:15×15正方形,原点为(11,11) 模板三:3×3正方形,原点为(0,0) 处理所得图像:
3)字符分割: 子程序框图:
具体实现:
在分割字符之前需要对车牌进行去除边框的处理,以分割出完整的且没有多余信息的字符。去除边框的操作是基于车牌图像的水平和竖直投影直方图来进行的。车牌边框和字符的分界线在投影直方图上表示为一个波谷,因此,可以选择在波谷处切割图像,这样就可以去除边框。之后的字符提取,有的方法是使用上一步中投影直方图,每个字符的间隔位置都会出现波谷,选择波谷处切割即可,但这种方法在我的车牌投影中却无法使用,首先对于绘制的直方图,他的波谷处的变化往往十分的剧烈,根本无法检验出波谷和谷宽的精确地位置;其次,用这种方法分割出的字符的宽度是不确定的,对于后面的字符匹配也带来一定的困难,所以我不采用这种方法。另外一种方法是基于图像的灰度变化次数,在图像中车牌位置画一条水平线,检验黑白变化次数确定分割,我觉得它太过复杂,在程序中实现较困难,所以我就自己相处了一种比较简单的分割方法。我通过上网查资料发现,我国的车牌的字符高度是90mm ,宽度是45mm ,第二、三字符间隔34mm ,其余间隔12mm 。有了这个参数,在加上我的去掉边框的车牌的高度基本上就等于字符的高度,因此可以利用这个比例来求出在图片中的字符的宽度和间隔,以此为依据分割字符就可以又快又准的分割出来,经过测试,这种方法在一定程度上可以达到分割字符的目的,而且非常的简单,但是这种方法对于车牌的去除边框步骤的要求很高,必须是高度近似等于车牌中字符的高度才可以正确分割。
处理所得图像:
分割结果:
4)字符匹配: 子程序框图:
具体实现:
本程序采用的是一种很简单的识别方法,即将分割出的字符与模板想比较,得到结果图像后检测图像中非零像