author:zox
实验环境:Matlab2019a
课程设计:汽车车牌识别
序号 | 内容 |
---|---|
0 | [任务+原理+设计方案] |
1 | 车牌图像预处理 |
2 | 车牌定位 |
3 | 车牌字符分割 |
4+5 | 车牌字符识别+结果分析 |
6 | 总结 |
∞ | 源代码 |
三、课程设计步骤和结果
1.车牌图像预处理
在车牌图像信号的采集、输入过程中由于受到自然环境的影响,总会使图像的质量下降。这就给后面车牌图像的定位、字符分割和识别工作带来困难。因此需要对车牌初始图像进行必要的预处理,提高图像质量并突出我们所需要的信息,从而有利于进行各种后续的处理。
图像预处理是对初始图像的关键信息的增强。主要是指按需要对图像进行适当的变换以突出某些有用的信息,去除或削弱无用的信息,如统一图像的尺寸、去除噪声或强调边缘等处理。
本系统中对于车牌图像预处理的流程图如下:
对于图像预处理部分产生的图像信息如下:
表-1 预处理图像索引
图像名称 | 图像注解 |
---|---|
RGB | 输入的原彩色汽车车牌照片 |
I1 | 统一高度为400、灰度化后的灰度图像 |
I2 | 使用prewitt算子获取到的图像的边缘图像 |
I3 | 对图像实施垂直腐蚀操作后的图像 |
I4 | 对图像实施闭运算填充车牌区域后的图像 |
I5 | 消除车牌区域外的小对象后的图像 |
1.1读取车牌图像
第一步是要读取车牌图像, 使用uigetfile函数来读取文件目录下的汽车车牌图像。在选取一张图片后,uigetfile函数可以将图像的文件名返回至 filename,文件的路径名返回至 pathname,再定义一个全局变量,将文件名和文件路径赋给全局变量,就可以通过读取这个全局变量来读取图像的数据。
但如果没有选择图片,则filename为空,即使用函数msgbox跳出警告提示框,代码如下:
if(filename == 0)
msgbox({
'请选择需要识别的汽车车牌图像','[Author:]'},'车牌识别', 'warn');
return %若没有选择图片则报错误提示框、并停止运行
end
错误提示框如下图所示:
然后由于读取到的车牌图像尺寸有大有小,可能会对后面的处理造成影响,导致对车牌的粗定位不准确,所以先将原始图像进行等比例缩放处理,统一图片的高度为400。自编写了myimresize函数可对彩色图像进行缩放处理,与matlab的imresize函数对比如下图:
对比可以看出,因为myimresize函数使用的是双线性插值法,在使用过程中发现效果不好,原图像失真较为严重。 所以为了使车牌识别准确度更高,所以还是选用了matlab自带的函数imresize来对原图进行缩放处理,这部分代码如下:
[x,~,~]=size(RGB); %获取原图像的大小
rate=400/x; %统一高度为400
RGB=imresize(RGB,rate); %对图像进行缩放处理
车牌的原图