4 运用MATLAB实现车牌识别
本次设计使用640*480的彩色JPG格式图片,以MATLAB软件为平台,采用编写代码程序实现车牌定位、车牌字符分割、车牌字符识别。当然,在这之前,我们首先要对图像进行一系列的预处理,因为图像在形成、传输或变换过程中,受多种因素的影响,如:光学系统失真、系统噪声、曝光不足或过量、相对运动等,往往会与原始景物之间或图像与原始图像之间产生了某种差异,这种差异称为降质或退化。由于图像产生了退化,所以在图像处理之前必须进行灰度化和预处理,预处理包括边缘检测、对边缘图像进行腐蚀、再对其进行闭运算、最后滤波移除小对象等。
4.1 车牌图像灰度化
在车牌识别系统中,将一幅图像转换为另一种类型是非常有用的,因为如果采用原始采集的彩色图像,它里面则包含了大量的无用信息,从而对定位、识别的过程中造成干扰,会造成存储的浪费以及在车牌识别系统中拖慢识别的速度,而且投入使用中将大大的提高硬件的要求,从而造成了经济成本的上升,所以我们将要对原始采集的对象通过代码进行灰度化处理,将其变成灰度图像。
车牌图像灰度化首先将通过MATLAB将原始图片通过函数imread读入并且输出如图4-1(a)所示,然后对读入的图像通过rgb2gray进行灰度处理如图4-1(b)所示。经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。
4.1.1 程序分析
I=imread('cell.jpg'); %读入图像 figure(1);
imshow(I), title('原始图像');
I_gray=rgb2gray(I); %对图像I进行灰度处理 figure(2);
imshow(I_gray),title('灰度图像');
17
4.1.2 结果分析
(a)车辆牌照原始图像
(b)车牌灰度图像 图4-1 车牌图像灰度化
由图4-1(b)可知,原始的彩色图像已经转换成了灰度图像,灰度图像的每一个像素的取值就是256中灰度中的一种(0表示黑,255表示白,从0到255亮度逐渐增加),也就是说灰度图像只有亮度信息而没有色彩信息。通过了图像灰度化处理,才有利于车牌定位的实现。
18
4.2 车牌图像预处理
车牌图像的预处理包括了边缘检测、对边缘图像进行腐蚀、再对其进行闭运算、最后滤波移除小对象。在本次设计中,我利用Sobel算子对灰度图像进行边缘检测,然后再对边缘图像进行腐蚀,去除掉边缘图像细的、间断的边缘,对剩下的区域进行闭合以填充图像,此时车牌区域已经形成了一个大的连通域,再调用bwareaopen函数去掉小的连通域。
4.2.1 程序分析
I_edge=edge(I_gray,'sobel'); %利用Sobel算子进行边缘检测 figure(3);
imshow(I_edge),title('边缘检测后图像'); se=[1;1;1];
I_erode=imerode(I_edge,se); %对边缘图像进行腐蚀 figure(4);
imshow(I_erode),title('腐蚀后边缘图像'); se=strel('rectangle',[25,25]);
I_close=imclose(I_erode,se); %填充图像 figure(5);
imshow(I_close),title('填充后图像');
I_final=bwareaopen(I_close,2000); %去除聚团灰度值小于2000的部分 figure(6);
imshow(I_final),title('形态滤波后图像');
边缘检测是为了对有意义的边缘点进行分类,与这个点相联系的灰度级必须比在这一点的背景上变换更有效,我们通过门限方法来决定一个值是否有效。所以,如果一个点的二维一阶导数比指定的门限大,我们就定义图像中的次点是一个边缘点,一组这样的依据事先定好的连接准则相连的边缘点就定义为一条边缘。经过一阶的导数的边缘检测,所求的一阶导数高于某个阈值,则确定该点为边缘点,这样会导致检测的边缘点太多。可以通过求梯度局部最大值对应的点,并认定为边缘点,去除非局部最大值,可以检测出精确的边缘。一阶导数的局部最大值对应二阶导数的零交叉点,这样通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。
19
边缘检测选用不同的额算子或者阈值都会对结果造成很大的影响,经过反复试验,我选取了Sobel算子进行边缘检测,通过代码I_edge=edge(I_gray,'sobel')就能得到边缘检测的图像如图4-2(a)所示。
4.2.2 结果分析
(a) 车牌边缘检测图像
(b) 腐蚀后边缘图像
20
(c) 填充后图像
(d) 形态滤波后的图像 图4-2 车牌图像预处理
本文通过对图像进行腐蚀、膨胀如图4-2(b),腐蚀是一种消除边界点的过程,结果是使目标缩小,孔洞增大,因而可有效的消除孤立噪声点。经过腐蚀过后,图像中目标周围的边缘被腐蚀了,大大的缩小目标的范围,为后面提取车牌的进行提供了先决条件。对其实现闭运算如图4-2(c),先膨胀后腐蚀的过程称为闭运算,具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。最后还用了bwareaopen来去除对象中不相干的小对象。由此得到车牌图像的初步定位,如图4-2(d)所示。通过对比原始图片,我们可以发现形态滤波后的图像已经很接近正确的车牌位置了,因此后期处理将通过这张图来找出车牌位置。
21