数字信号处理作业--车牌识别系统设计

数字信号处理报告

项目名称: 车牌识别系统设计

专 业: 电子信息工程技术

班 级: 电信141

姓 名: 卢德寅

指导 教师: 罗金生

二〇一六 年 一 月 六 日

目录

1.摘要: ..................................................... 1

2.设计目的: ................................................. 1

3.设计原理 ................................................... 1

4.详细设计步骤 ............................................... 2

4.1 提出总体设计方案。 ...................................... 2

4.2 预处理及边缘提取 ....................................... 3

4.3 牌照的定位和分割 ........................................ 6

4.4 字符的分割与归一化 ...................................... 8

4.5 字符的识别 ............................................. 10

5.设计结果及分析 ............................................ 11

6.程序源代码:(基于matlab 的程序代码) ..................... 14

7.总结 ...................................................... 20

8.参考文献 .................................................. 21

1.摘要:

汽车牌照自动识别系统是制约道路交通智能化的重要因素, 包括车牌定位、字符分

割和字符识别三个主要部分。本文首先确定车辆牌照在原始图像中的水平位置和垂直位置, 从而定位车辆牌照, 然后采用局部投影进行字符分割。在字符识别部分, 提出了在无特征提取情况下基于支持向量机的车牌字符识别方法。实验结果表明, 本文提出的方法具有良好的识别性能。随着公路逐渐普及,我国的公路交通事业发展迅速,所以人工管理方式已经不能满着实际的需要,微电子、通信和计算机技术在交通领域的应用极大地提高了交通管理效率。汽车牌照的自动识别技术已经得到了广泛应用。

2.设计目的:

1、使学生在巩固理论课上知识的同时,加强实践能力的提高,理论联系实践。

2、激发学生的研究潜能,提高学生的协作精神,锻炼学生的动手能力。

3.设计原理

由于车辆牌照是机动车唯一的管理标识符号,在交通管理中具有不可替代的作用,

因此车辆牌照识别系统应具有很高的识别正确率,对环境光照条件、拍摄位置和车辆

行驶速度等因素的影响应有较大的容阈,并且要求满足实时性要求。

图1 牌照识别系统原理图

该系统是计算机图像处理与字符识别技术在智能化交通管理系统中的应用,它主要由

图像的采集和预处理、牌照区域的定位和提取、牌照字符的分割和识别等几个部分组成,如图1 所示。其基本工作过程如下:

(1)当行驶的车辆经过时,触发埋设在固定位置的传感器,系统被唤醒处于工作状态;一旦连接摄像头光快门的光电传感器被触发,设置在车辆前方、后方和侧面的相机同时拍摄下车辆图像;

(2)由摄像机或CCD 摄像头拍摄的含有车辆牌照的图像通视频卡输入计算机进行预处理,图像预处理包括图像转换、图像增强、滤波和水平较正等;

(3)由检索模块进行牌照搜索与检测,定位并分割出包含牌照字符号码的矩形区域;

(4)对牌照字符进行二值化并分割出单个字符,经归一化后输入字符识别系统进行识别。

4.详细设计步骤

4.1 提出总体设计方案。

车辆牌照识别整个系统主要是由车牌定位和字符识别两部分组成,其中车牌定位又可

以分为图像预处理及边缘提取模块和牌照的定位及分割模块;字符识别可以分为字符分割与特征提取和单个字符识别两个模块。

为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度

和清晰可辩的牌照图象。但由于该系统的摄像部分工作于开放的户外环境,加之车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离和角度以及车辆行驶速度等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图象进行识别前的预处理。

牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后

的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。

由于拍摄时的光照条件、牌照的整洁程度的影响,和摄像机的焦距调整、镜头的光学

畸变所产生的噪声都会不同程度地造成牌照字符的边界模糊、细节不清、笔划断开或粗细不均,加上牌照上的污斑等缺陷,致使字符提取困难,进而影响字符识别的准确性。因此,需要对字符在识别之前再进行一次针对性的处理。

车牌识别的最终目的就是对车牌上的文字进行识别。主要应用的为模板匹配方法。

因为系统运行的过程中,主要进行的都是图像处理,在这个过程中要进行大量的数据

处理,所以处理器和内存要求比较高,CPU 要求主频在600HZ 及以上,内存在128MB 及以上。系统可以运行于Windows98、Windows2000或者Windows XP操作系统下,程序调试时使用matlab 。

4.2 预处理及边缘提取

图2 预处理及边缘提取流程图

4.2.1 图象的采集与转换

考虑到现有牌照的字符与背景的颜色搭配一般有蓝底白字、黄底黑字、白底红字、绿

底白字和黑底白字等几种,利用不同的色彩通道就可以将区域与背景明显地区分出来,例如,对蓝底白字这种最常见的牌照,采用蓝色B 通道时牌照区域为一亮的矩形,而牌照字符在区域中并不呈现。因为蓝色(255,0,0)与白色(255,255,255)在B 通道中并无区分,而在G 、R 通道或是灰度图象中并无此便利。同理对白底黑字的牌照可用R 通道,绿底白字的牌照可以用G 通道就可以明显呈现出牌照区域的位置,便于后续处理。原图、灰度图及其直方图见图2与图3。对于将彩色图象转换成灰度图象时,图象灰度值可由下面的公式计算:

G=0.110B+0.588G+0.302R (1)

B +G +R G= (2) 3

图3 原图 图4 灰度图

4.2.2 边缘提取

边缘是指图像局部亮度变化显著的部分,是图像风、纹理特征提取和形状特征提取等图像分析的重要基础。所以在此我们要对图像进行边缘检测。图象增强处理对图象牌照的可辩认度的改善和简化后续的牌照字符定位和分割的难度都是很有必要的。增强图象对比度度的方法有:灰度线性变换、图象平滑处理等。

(1)灰度校正

由于牌照图象在拍摄时受到种种条件的限制和干扰,图象的灰度值往往与实际景物不完全匹配,这将直接影响到图象的后续处理。如果造成这种影响的原因主要是由于被摄物体的远近不同,使得图象中央区域和边缘区域的灰度失衡,或是由于摄像头在扫描时各点的灵敏度有较大的差异而产生图象灰度失真,或是由于曝光不足而使得图像的灰度变化范围很窄。这时就可以采用灰度校正的方法来处理,增强灰度的变化范围、丰富灰度层次,以达到增强图象的对比度和分辨率。我们发现车辆牌照图象的灰度取值范围大多局限在r=(50,200)之间,而且总体上灰度偏低,图象较暗。根据图象处理系统的条件,最好将灰度范围展开到s=(0,255)之间,为此我们对灰度值作如下的变换:

s = T (r ) r=[r min,,r max]

使得S ∈[S min, S max ],其中,T 为线性变换,

图5 灰度线性变换

S =Smax -Smin Smin ⨯r max -Smax ⨯r min r + (3) r max -r min r max -r min

若 r(50,200)、s(0,255) 255255⨯50r -≈1. 7r -85 (4) 150150

则:S =

(2)平滑处理

对于受噪声干扰严重的图象,由于噪声点多在频域中映射为高频分量,因此可以在通过低 通滤波器来滤除噪声,但实际中为了简化算

法也可以直接在空域中用求邻域平均值的方

法莱削弱噪声的影响,这种方法称为图象平滑

处理。例如,某一象素点的邻域S 有两种表示

方法:8邻域和4邻域分别对应的邻域平均值为

1g (i , j ) =M (i , j ) ∈s ∑f (i , j ) (5)

其中,M 为邻域中除中心象素点f(i,j) 之外包括的其它象素总数,对于4邻域M=4,8 邻域M=8。然而,邻域平均值的平滑处理会使得图象灰度急剧变化的地方,尤其是物体边缘区域和字符轮廓等部分产生模糊作用。为了克服这种平均化引起的图象模糊现象,我们给中心点象素值与其邻域平均值的差值设置一固定的阈值,只有大于该阈值的点才能替换为邻域平均值,而差值不大于阈值时,仍保留原来的值,从而减少由于平均化引起的图象模糊。

图像中车辆牌照是具有比较显著特征的一块图象区域,这此特征表现在:近似水平的矩形区域;其中字符串都是按水平方向排列的;在整体图象中的位置较为固定。正是由于牌照图象的这些特点,再经过适当的图象变换,它在整幅中可以明显地呈现出其边缘。边缘提取是较经典的算法,此处边缘的提取采用的是Roberts 算子。

图6 robert算子边缘检测

由上图可以归纳起来以下方面:原始图像清晰度比较高,从而简化了预处理,结合MATLAB 实验过程,得出不是每一种图像处理之初都适合滤波和边界增强。本次汽车车牌的识别,为了保存更多的有用信息。

4.3 牌照的定位和分割

牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。由于牌照图象在原始图象中是很有特征的一个子区域,确切说是水平度较高的横向近似的长方形,它在原始图象中的相对位置比较集中,而且其灰度值与周边区域有明显的不同,因而在其边缘形成了灰度突变的边界,这样就便于通过边缘检测来对图象进行分割。

图7 牌照定位于分割流程图

4.3.1 牌照区域的定位

牌照图象经过了以上的处理后,牌照区域已经十分明显,而且其边缘得到了勾勒和加强。此时可进一步确定牌照在整幅图象中的准确位置。这里选用的是数学形态学的方法,其基本思想是用具有一定形态的机构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。数学形态学的应用可以简化图像数据,保持它们基本的形态特征,并除去不相干的结构。在本程序中用到了膨胀和闭合这两个基本运算,最后还用了bwareaopen 来去除对象中不相干的小对象。

图8 腐蚀后图像 图9 平滑图像的轮廓 图10 从对象中移除小对象后图像

4.3.2 牌照区域的分割

对车牌的分割可以有很多种方法,本程序是利用车牌的彩色信息的彩色分割方法。根据车牌底色等有关的先验知识,采用彩色像素点统计的方法分割出合理的车牌区域,确定车牌底色蓝色RGB 对应的各自灰度范围,然后行方向统计在此颜色范围内的像素点数量,设定合理的 阈值,确定车牌在行方向的合理区域。然后,在分割出的行区域内,统计列方向蓝色像素点

的数量,最终确定完整的车牌区域。

图11 行方向区域和最终定位出来的车牌

4.3.3车牌进一步处理

经过上述方法分割出来的车牌图像中存在目标物体、背景还有噪声,要想从图像中直接提取出目标物体,最常用的方法就是设定一个阈值T ,用T 将图像的数据分成两部分:大于T 的像素群和小于T 的像素群,即对图像二值化。均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素。再用模板中的全体像素的平均值来代替原来像素值。

图12 裁剪出来的车牌的进一步处理过程图

4.4 字符的分割与归一化

图13 字符分割与归一化流程图

4.4.1字符分割

在汽车牌照自动识别过程中,字符分割有承前启后的作用。它在前期牌照定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。字符识别的算法很多,因为车牌字符间间隔较大,不会出现字符粘连情况,所以此处采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。

图14 分割出来的七个字符图像

4.4.2字符归一化

一般分割出来的字符要进行进一步的处理,以满足下一步字符识别的需要。但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的目的。在此只进行了归一化处理,然后进行后期处理。

图15 归一化处理后的七个字符图像

4.5 字符的识别

字符的识别目前用于车牌字符识别(OCR)中的算法主要有基于模板匹配的OCR 算法以及基于人工神经网络的OCR 算法。基于模板匹配的OCR 的基本过程是:首先对待识别字符进行二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。模板匹配的主要特点是实现简单,当字符较规整时对字符图像的缺损、污迹干扰适应力强且识别率相当高。综合模板匹配的这些优点我们将其用为车牌字符识别的主要方法。

模板匹配是图象识别方法中最具代表性的基本方法之一,它是将从待识别的图象或图象区域f(i,j)中提取的若干特征量与模板T(i,j)相应的特征量逐个进行比较,计算它们之间规格化的互相关量,其中互相关量最大的一个就表示期间相似程度最高,可将图象归于相应的类。也可以计算图象与模板特征量之间的距离,用最小距离法判定所属类。然而,通常情况下用于匹配的图象各自的成像条件存在差异,产生较大的噪声干扰,或图象经预处理和规格化处理后,使得图象的灰度或像素点的位置发生改变。在实际设计模板的时候,是根据各区域形状固有的特点,突出各类似区域之间的差别,并将容易由处理过程引起的噪声和位移等因素都考虑进去,按照一些基于图象不变特性所设计的特征量来构建模板,就可以避免上述问题。

图16 字符识别流程图

此处采用相减的方法来求得字符与模板中哪一个字符最相似,然后找到相似度最大的输出。汽车牌照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约50多个,大写英文字母26个,数字10个。为了实验方便,结合本次设计所选汽车牌照的特点,只建立了4个数字26个字母与10个数字的模板。其他模板设计的方法与此相同。 首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字符相减,得到的0越多那么就越匹配。把每一幅相减后的图的0值个数保存,即为识别出来的结果。

图17 识别结果

5.设计结果及分析

通过以上的方法,我对多幅图像进行了检测,有较好的识别效果。下面是对另一幅车牌照的检测,结果如图18---24 所示。

图18 图19

图20

21

图22

23

图24

对于光照条件不理想的图象,可先进行一次图象增强处理,使得图象灰度动态范围扩展和对比度增强,再进行定位和分割,这样可以提高分割的正确率。而采用了色彩通道的牌照区域分割算法充分利用了牌照图象的色彩信息,简化了算法的实现,加快了图象的处理速度,具有较高的检出正确率,而且整个过程用MATLAB 语言编程实现,无时间滞后感,可以满足实时检出的要求。但是在设计的过程中发现,使用另一幅图像后,识别效果始终没有那么理想。需要做一定的设置后才能识别出相应的字符。

在车牌字符分割的预处理中,用到了对分割出的字符车牌进行均值滤波,膨胀或腐蚀的处理。这在对于有杂点的车牌是很有用的,因为这样可以把字符与字符之间的杂色点去除,只有白色的字符和黑色的背景存在,这样有利于的字符分割进行。

字符识别过程使用的是模板匹配的方法,利用两幅图片相减的方法,找到相减后值最小的,即为相似程度最大的。模板的制作很重要,必须要用精确的模板,否则就不能正确的识别。

对于识别错误情况的分析可知,主要原因:一是牌照自身的污渍等影响了图象的质量;二是牌照字符的分割失败导致的识别错误;再就是部分字符的形状相似性,比如,B 和8;A 和4 等字符识别结果可能发生混淆的情况。

总之,尽管目前牌照字符的识别率还不理想,但是只要在分割出的字符的大小、位置的归一化,以及尝试提取分类识别能力更好的特征值和设计分类器等环节上再完善,进一

步提高识别率是完全可行的。

6.程序源代码:(基于matlab 的程序代码)

function [d]=main(jpg)

I=imread('car.jpg');

figure(1),imshow(I);title('原图'); I1=rgb2gray(I);

figure(2),subplot(1,2,1),imshow(I1);title('灰度图');

figure(2),subplot(1,2,2),imhist(I1);title('灰度图直方图'); I2=edge(I1,'robert',0.08,'both');

figure(3),imshow(I2);title('robert算子边缘检测') se=[1;1;1];

I3=imerode(I2,se);

figure(4),imshow(I3);title('腐蚀后图像'); se=strel('rectangle',[40,40]); I4=imclose(I3,se);

figure(5),imshow(I4);title('平滑图像的轮廓'); I5=bwareaopen(I4,2000);

figure(6),imshow(I5);title('从对象中移除小对象'); [y,x,z]=size(I5); myI=double(I5); %begin横向扫描

tic

Blue_y=zeros(y,1); for i=1:y for j=1:x

if(myI(i,j,1)==1)

%如果myI(i,j,1)即myI 图像中坐标为(i,j)的点为蓝色 %则Blue_y的相应行的元素white_y(i,1)值加1 Blue_y(i,1)= Blue_y(i,1)+1;%蓝色像素点统计 end

end end

[temp MaxY]=max(Blue_y);%temp为向量white_y的元素中的最大值,MaxY 为该值的索引( 在向量中的位置) PY1=MaxY;

while ((Blue_y(PY1,1)>=120)&&(PY1>1)) PY1=PY1-1;

end PY2=MaxY;

while ((Blue_y(PY2,1)>=40)&&(PY2

end

IY=I(PY1:PY2,:,:);

%IY为原始图像I 中截取的纵坐标在PY1:PY2之间的部分 %end横向扫描 %begin纵向扫描

Blue_x=zeros(1,x);%进一步确定x 方向的车牌区域

for j=1:x

for i=PY1:PY2

if(myI(i,j,1)==1)

Blue_x(1,j)= Blue_x(1,j)+1; end end

end

PX1=1;

while ((Blue_x(1,PX1)

PX2=x;

while ((Blue_x(1,PX2)PX1)) PX2=PX2-1; end

%end纵向扫描

PX1=PX1-2;%对车牌区域的校正 PX2=PX2+2;

dw=I(PY1:PY2,:,:); t=toc;

figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域');

figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像') imwrite(dw,'dw.jpg');

[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像'); jpg=strcat(filepath,filename); a=imread('dw.jpg'); b=rgb2gray(a);

imwrite(b,'1.车牌灰度图像.jpg');

figure(8);subplot(3,2,1),imshow(b),title('1.车牌灰度图像') g_max=double(max(max(b))); g_min=double(min(min(b)));

T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值 [m,n]=size(b);

d=(double(b)>=T); % d:二值图像 imwrite(d,'2.车牌二值图像.jpg');

figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像') figure(8),subplot(3,2,3),imshow(d),title('3.均值滤波前') % 滤波

h=fspecial('average',3);

d=im2bw(round(filter2(h,d))); imwrite(d,'4.均值滤波后.jpg');

figure(8),subplot(3,2,4),imshow(d),title('4.均值滤波后') % 某些图像进行操作 % 膨胀或腐蚀

% se=strel('square',3); % 使用一个3X3的正方形结果元素对象对创建的图像膨胀 % 'line'/'diamond'/'ball'...

se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵 [m,n]=size(d);

if bwarea(d)/m/n>=0.365 d=imerode(d,se);

elseif bwarea(d)/m/n

end

imwrite(d,'5.膨胀或腐蚀处理后.jpg');

figure(8),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后')

% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割 d=qiege(d); [m,n]=size(d);

figure,subplot(2,1,1),imshow(d),title(n) k1=1;k2=1;s=sum(d);j=1; while j~=n

while s(j)==0 j=j+1; end

k1=j;

while s(j)~=0 && j

k2=j-1; if k2-k1>=round(n/6.5)

[val,num]=min(sum(d(:,[k1+5:k2-5]))); d(:,k1+num+5)=0; % 分割 end

end

% 再切割 d=qiege(d);

% 切割出 7 个字符

y1=10;y2=0.25;flag=0;word1=[]; while flag==0

[m,n]=size(d); left=1;wide=0;

while sum(d(:,wide+1))~=0 wide=wide+1;

end

if wide

temp=qiege(imcrop(d,[1 1 wide m])); [m,n]=size(temp); all=sum(sum(temp));

two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:))); if two_thirds/all>y2

flag=1;word1=temp; % WORD 1 end

d(:,[1:wide])=0;d=qiege(d); end

end

% 分割出第二个字符 [word2,d]=getword(d); % 分割出第三个字符 [word3,d]=getword(d); % 分割出第四个字符 [word4,d]=getword(d); % 分割出第五个字符 [word5,d]=getword(d); % 分割出第六个字符 [word6,d]=getword(d); % 分割出第七个字符 [word7,d]=getword(d);

figure(9),imshow(word1),title('1'); figure(10),imshow(word2),title('2'); figure(11),imshow(word3),title('3'); figure(12),imshow(word4),title('4'); figure(13),imshow(word5),title('5'); figure(14),imshow(word6),title('6'); figure(15),imshow(word7),title('7'); [m,n]=size(word1);

% 商用系统程序中归一化大小为 40*20,此处演示 word1=imresize(word1,[40 20]); word2=imresize(word2,[40 20]); word3=imresize(word3,[40 20]); word4=imresize(word4,[40 20]); word5=imresize(word5,[40 20]); word6=imresize(word6,[40 20]); word7=imresize(word7,[40 20]); figure(16),

subplot(3,7,8),imshow(word1),title('1');

subplot(3,7,9),imshow(word2),title('2'); subplot(3,7,10),imshow(word3),title('3'); subplot(3,7,11),imshow(word4),title('4'); subplot(3,7,12),imshow(word5),title('5'); subplot(3,7,13),imshow(word6),title('6'); subplot(3,7,14),imshow(word7),title('7'); imwrite(word1,'1.jpg'); imwrite(word2,'2.jpg'); imwrite(word3,'3.jpg'); imwrite(word4,'4.jpg'); imwrite(word5,'5.jpg'); imwrite(word6,'6.jpg'); imwrite(word7,'7.jpg');

liccode=char(['0':'9' 'A':'Z' '苏豫陕鲁']); %建立自动识别字符代码表SubBw2=zeros(40,20); l=1; for I=1:7

ii=int2str(I); t=imread([ii,'.jpg']);

SegBw2=imresize(t,[40 20],'nearest');

if l==1 %第一位汉字识别 kmin=37; kmax=40;

elseif l==2 %第二位 A~Z 字母识别 kmin=11; kmax=36;

else l>=3 %第三位以后是字母或数字识别 kmin=1; kmax=36; end

for k2=kmin:kmax

fname=strcat('字符模板\',liccode(k2),'.jpg'); SamBw2 = imread(fname); for i=1:40 for j=1:20

SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j); end end

% 以上相当于两幅图相减得到第三幅图 Dmax=0; for k1=1:40 for l1=1:20

if ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1)

end

end

Error(k2)=Dmax;

end

Error1=Error(kmin:kmax);

MinError=min(Error1);

findc=find(Error1==MinError);

l=l+1;

end

figure(17),subplot(3,1,2),imshow(dw),title ('车牌号码: 陕 A B A 2 2 3');

%子程序:(getword 子程序)

function [word,result]=getword(d)

word=[];flag=0;y1=8;y2=0.5;

while flag==0

[m,n]=size(d);

wide=0;

while sum(d(:,wide+1))~=0 && wide

wide=wide+1;

end

temp=qiege(imcrop(d,[1 1 wide m]));

[m1,n1]=size(temp);

if widey2

d(:,[1:wide])=0;

if sum(sum(d))~=0

d=qiege(d); % 切割出最小范围

else word=[];flag=1;

end

else

word=qiege(imcrop(d,[1 1 wide m]));

d(:,[1:wide])=0;

if sum(sum(d))~=0;

d=qiege(d);flag=1;

else d=[];

end

end

end

result=d;

% (qiege 子程序)

function e=qiege(d)

[m,n]=size(d);

top=1;bottom=m;left=1;right=n; % init

while sum(d(top,:))==0 && top

top=top+1;

end

while sum(d(bottom,:))==0 && bottom>1

bottom=bottom-1;

end

while sum(d(:,left))==0 && left

left=left+1;

end

while sum(d(:,right))==0 && right>=1

right=right-1;

end

dd=right-left;

hh=bottom-top;

e=imcrop(d,[left top dd hh]);

7.总结

本文主要解决了以下几个问题:1. 在背景的图象中如何定位分割牌照区域;2. 对分割下来的牌照字符如何提取具有分类能力的特征;3. 如何设计识别器。在车辆牌照字符识别系统的研究领域,近几年出现了许多切实可行的识别技术和方法,从这些新技术和方法中可以看到两个明显的趋势:一是单一的预处理和识别技术都无法达到理想的结果,多种方法的有机结合才能使系统有效识别能力提高。在本系统的设计时,也汲取了以上一些算法的思想,结合实际,反复比较,综合分析;二是在有效性和实用的原则下,结合神经网络和人工智能的新技术的应用是研究的一个方向。

根据车牌特点,一般采用的车牌定位算法有:1. 边缘检测定位算法;2. 利用哈夫变换进行车牌定位;3. 色彩分割提取车牌等。这里我采用的是边缘检测的方法实现定位的。

字符分割的方法也有多种:1. 基于聚类分析的字符分割;2. 投影分割的方法;3. 基于模板匹配的字符分割等。最常用的是投影分割,主要是针对在车牌定位,图像预处理后比较规则的车牌图像。优点是程序逻辑设计简单,循环执行功能单一,便于设计和操作,程序执行时间短。

字符识别的基本方法通常又三类:1. 结构特征分析方法;2. 模板匹配法;3. 神经网络法。此处采用的是模板匹配的方法,即是将要识别的字符与事先构造好的模板进行比对,根据与模板的相似度的大小来确定最终的识别结果。

但是系统本身还存在许多不足,距离具体实用的要求仍有很大差距,但我却在这次课程设计中学到了很多知识。

8.参考文献 百度

数字信号处理报告

项目名称: 车牌识别系统设计

专 业: 电子信息工程技术

班 级: 电信141

姓 名: 卢德寅

指导 教师: 罗金生

二〇一六 年 一 月 六 日

目录

1.摘要: ..................................................... 1

2.设计目的: ................................................. 1

3.设计原理 ................................................... 1

4.详细设计步骤 ............................................... 2

4.1 提出总体设计方案。 ...................................... 2

4.2 预处理及边缘提取 ....................................... 3

4.3 牌照的定位和分割 ........................................ 6

4.4 字符的分割与归一化 ...................................... 8

4.5 字符的识别 ............................................. 10

5.设计结果及分析 ............................................ 11

6.程序源代码:(基于matlab 的程序代码) ..................... 14

7.总结 ...................................................... 20

8.参考文献 .................................................. 21

1.摘要:

汽车牌照自动识别系统是制约道路交通智能化的重要因素, 包括车牌定位、字符分

割和字符识别三个主要部分。本文首先确定车辆牌照在原始图像中的水平位置和垂直位置, 从而定位车辆牌照, 然后采用局部投影进行字符分割。在字符识别部分, 提出了在无特征提取情况下基于支持向量机的车牌字符识别方法。实验结果表明, 本文提出的方法具有良好的识别性能。随着公路逐渐普及,我国的公路交通事业发展迅速,所以人工管理方式已经不能满着实际的需要,微电子、通信和计算机技术在交通领域的应用极大地提高了交通管理效率。汽车牌照的自动识别技术已经得到了广泛应用。

2.设计目的:

1、使学生在巩固理论课上知识的同时,加强实践能力的提高,理论联系实践。

2、激发学生的研究潜能,提高学生的协作精神,锻炼学生的动手能力。

3.设计原理

由于车辆牌照是机动车唯一的管理标识符号,在交通管理中具有不可替代的作用,

因此车辆牌照识别系统应具有很高的识别正确率,对环境光照条件、拍摄位置和车辆

行驶速度等因素的影响应有较大的容阈,并且要求满足实时性要求。

图1 牌照识别系统原理图

该系统是计算机图像处理与字符识别技术在智能化交通管理系统中的应用,它主要由

图像的采集和预处理、牌照区域的定位和提取、牌照字符的分割和识别等几个部分组成,如图1 所示。其基本工作过程如下:

(1)当行驶的车辆经过时,触发埋设在固定位置的传感器,系统被唤醒处于工作状态;一旦连接摄像头光快门的光电传感器被触发,设置在车辆前方、后方和侧面的相机同时拍摄下车辆图像;

(2)由摄像机或CCD 摄像头拍摄的含有车辆牌照的图像通视频卡输入计算机进行预处理,图像预处理包括图像转换、图像增强、滤波和水平较正等;

(3)由检索模块进行牌照搜索与检测,定位并分割出包含牌照字符号码的矩形区域;

(4)对牌照字符进行二值化并分割出单个字符,经归一化后输入字符识别系统进行识别。

4.详细设计步骤

4.1 提出总体设计方案。

车辆牌照识别整个系统主要是由车牌定位和字符识别两部分组成,其中车牌定位又可

以分为图像预处理及边缘提取模块和牌照的定位及分割模块;字符识别可以分为字符分割与特征提取和单个字符识别两个模块。

为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度

和清晰可辩的牌照图象。但由于该系统的摄像部分工作于开放的户外环境,加之车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离和角度以及车辆行驶速度等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图象进行识别前的预处理。

牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后

的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。

由于拍摄时的光照条件、牌照的整洁程度的影响,和摄像机的焦距调整、镜头的光学

畸变所产生的噪声都会不同程度地造成牌照字符的边界模糊、细节不清、笔划断开或粗细不均,加上牌照上的污斑等缺陷,致使字符提取困难,进而影响字符识别的准确性。因此,需要对字符在识别之前再进行一次针对性的处理。

车牌识别的最终目的就是对车牌上的文字进行识别。主要应用的为模板匹配方法。

因为系统运行的过程中,主要进行的都是图像处理,在这个过程中要进行大量的数据

处理,所以处理器和内存要求比较高,CPU 要求主频在600HZ 及以上,内存在128MB 及以上。系统可以运行于Windows98、Windows2000或者Windows XP操作系统下,程序调试时使用matlab 。

4.2 预处理及边缘提取

图2 预处理及边缘提取流程图

4.2.1 图象的采集与转换

考虑到现有牌照的字符与背景的颜色搭配一般有蓝底白字、黄底黑字、白底红字、绿

底白字和黑底白字等几种,利用不同的色彩通道就可以将区域与背景明显地区分出来,例如,对蓝底白字这种最常见的牌照,采用蓝色B 通道时牌照区域为一亮的矩形,而牌照字符在区域中并不呈现。因为蓝色(255,0,0)与白色(255,255,255)在B 通道中并无区分,而在G 、R 通道或是灰度图象中并无此便利。同理对白底黑字的牌照可用R 通道,绿底白字的牌照可以用G 通道就可以明显呈现出牌照区域的位置,便于后续处理。原图、灰度图及其直方图见图2与图3。对于将彩色图象转换成灰度图象时,图象灰度值可由下面的公式计算:

G=0.110B+0.588G+0.302R (1)

B +G +R G= (2) 3

图3 原图 图4 灰度图

4.2.2 边缘提取

边缘是指图像局部亮度变化显著的部分,是图像风、纹理特征提取和形状特征提取等图像分析的重要基础。所以在此我们要对图像进行边缘检测。图象增强处理对图象牌照的可辩认度的改善和简化后续的牌照字符定位和分割的难度都是很有必要的。增强图象对比度度的方法有:灰度线性变换、图象平滑处理等。

(1)灰度校正

由于牌照图象在拍摄时受到种种条件的限制和干扰,图象的灰度值往往与实际景物不完全匹配,这将直接影响到图象的后续处理。如果造成这种影响的原因主要是由于被摄物体的远近不同,使得图象中央区域和边缘区域的灰度失衡,或是由于摄像头在扫描时各点的灵敏度有较大的差异而产生图象灰度失真,或是由于曝光不足而使得图像的灰度变化范围很窄。这时就可以采用灰度校正的方法来处理,增强灰度的变化范围、丰富灰度层次,以达到增强图象的对比度和分辨率。我们发现车辆牌照图象的灰度取值范围大多局限在r=(50,200)之间,而且总体上灰度偏低,图象较暗。根据图象处理系统的条件,最好将灰度范围展开到s=(0,255)之间,为此我们对灰度值作如下的变换:

s = T (r ) r=[r min,,r max]

使得S ∈[S min, S max ],其中,T 为线性变换,

图5 灰度线性变换

S =Smax -Smin Smin ⨯r max -Smax ⨯r min r + (3) r max -r min r max -r min

若 r(50,200)、s(0,255) 255255⨯50r -≈1. 7r -85 (4) 150150

则:S =

(2)平滑处理

对于受噪声干扰严重的图象,由于噪声点多在频域中映射为高频分量,因此可以在通过低 通滤波器来滤除噪声,但实际中为了简化算

法也可以直接在空域中用求邻域平均值的方

法莱削弱噪声的影响,这种方法称为图象平滑

处理。例如,某一象素点的邻域S 有两种表示

方法:8邻域和4邻域分别对应的邻域平均值为

1g (i , j ) =M (i , j ) ∈s ∑f (i , j ) (5)

其中,M 为邻域中除中心象素点f(i,j) 之外包括的其它象素总数,对于4邻域M=4,8 邻域M=8。然而,邻域平均值的平滑处理会使得图象灰度急剧变化的地方,尤其是物体边缘区域和字符轮廓等部分产生模糊作用。为了克服这种平均化引起的图象模糊现象,我们给中心点象素值与其邻域平均值的差值设置一固定的阈值,只有大于该阈值的点才能替换为邻域平均值,而差值不大于阈值时,仍保留原来的值,从而减少由于平均化引起的图象模糊。

图像中车辆牌照是具有比较显著特征的一块图象区域,这此特征表现在:近似水平的矩形区域;其中字符串都是按水平方向排列的;在整体图象中的位置较为固定。正是由于牌照图象的这些特点,再经过适当的图象变换,它在整幅中可以明显地呈现出其边缘。边缘提取是较经典的算法,此处边缘的提取采用的是Roberts 算子。

图6 robert算子边缘检测

由上图可以归纳起来以下方面:原始图像清晰度比较高,从而简化了预处理,结合MATLAB 实验过程,得出不是每一种图像处理之初都适合滤波和边界增强。本次汽车车牌的识别,为了保存更多的有用信息。

4.3 牌照的定位和分割

牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。由于牌照图象在原始图象中是很有特征的一个子区域,确切说是水平度较高的横向近似的长方形,它在原始图象中的相对位置比较集中,而且其灰度值与周边区域有明显的不同,因而在其边缘形成了灰度突变的边界,这样就便于通过边缘检测来对图象进行分割。

图7 牌照定位于分割流程图

4.3.1 牌照区域的定位

牌照图象经过了以上的处理后,牌照区域已经十分明显,而且其边缘得到了勾勒和加强。此时可进一步确定牌照在整幅图象中的准确位置。这里选用的是数学形态学的方法,其基本思想是用具有一定形态的机构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。数学形态学的应用可以简化图像数据,保持它们基本的形态特征,并除去不相干的结构。在本程序中用到了膨胀和闭合这两个基本运算,最后还用了bwareaopen 来去除对象中不相干的小对象。

图8 腐蚀后图像 图9 平滑图像的轮廓 图10 从对象中移除小对象后图像

4.3.2 牌照区域的分割

对车牌的分割可以有很多种方法,本程序是利用车牌的彩色信息的彩色分割方法。根据车牌底色等有关的先验知识,采用彩色像素点统计的方法分割出合理的车牌区域,确定车牌底色蓝色RGB 对应的各自灰度范围,然后行方向统计在此颜色范围内的像素点数量,设定合理的 阈值,确定车牌在行方向的合理区域。然后,在分割出的行区域内,统计列方向蓝色像素点

的数量,最终确定完整的车牌区域。

图11 行方向区域和最终定位出来的车牌

4.3.3车牌进一步处理

经过上述方法分割出来的车牌图像中存在目标物体、背景还有噪声,要想从图像中直接提取出目标物体,最常用的方法就是设定一个阈值T ,用T 将图像的数据分成两部分:大于T 的像素群和小于T 的像素群,即对图像二值化。均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素。再用模板中的全体像素的平均值来代替原来像素值。

图12 裁剪出来的车牌的进一步处理过程图

4.4 字符的分割与归一化

图13 字符分割与归一化流程图

4.4.1字符分割

在汽车牌照自动识别过程中,字符分割有承前启后的作用。它在前期牌照定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。字符识别的算法很多,因为车牌字符间间隔较大,不会出现字符粘连情况,所以此处采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。

图14 分割出来的七个字符图像

4.4.2字符归一化

一般分割出来的字符要进行进一步的处理,以满足下一步字符识别的需要。但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的目的。在此只进行了归一化处理,然后进行后期处理。

图15 归一化处理后的七个字符图像

4.5 字符的识别

字符的识别目前用于车牌字符识别(OCR)中的算法主要有基于模板匹配的OCR 算法以及基于人工神经网络的OCR 算法。基于模板匹配的OCR 的基本过程是:首先对待识别字符进行二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。模板匹配的主要特点是实现简单,当字符较规整时对字符图像的缺损、污迹干扰适应力强且识别率相当高。综合模板匹配的这些优点我们将其用为车牌字符识别的主要方法。

模板匹配是图象识别方法中最具代表性的基本方法之一,它是将从待识别的图象或图象区域f(i,j)中提取的若干特征量与模板T(i,j)相应的特征量逐个进行比较,计算它们之间规格化的互相关量,其中互相关量最大的一个就表示期间相似程度最高,可将图象归于相应的类。也可以计算图象与模板特征量之间的距离,用最小距离法判定所属类。然而,通常情况下用于匹配的图象各自的成像条件存在差异,产生较大的噪声干扰,或图象经预处理和规格化处理后,使得图象的灰度或像素点的位置发生改变。在实际设计模板的时候,是根据各区域形状固有的特点,突出各类似区域之间的差别,并将容易由处理过程引起的噪声和位移等因素都考虑进去,按照一些基于图象不变特性所设计的特征量来构建模板,就可以避免上述问题。

图16 字符识别流程图

此处采用相减的方法来求得字符与模板中哪一个字符最相似,然后找到相似度最大的输出。汽车牌照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约50多个,大写英文字母26个,数字10个。为了实验方便,结合本次设计所选汽车牌照的特点,只建立了4个数字26个字母与10个数字的模板。其他模板设计的方法与此相同。 首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字符相减,得到的0越多那么就越匹配。把每一幅相减后的图的0值个数保存,即为识别出来的结果。

图17 识别结果

5.设计结果及分析

通过以上的方法,我对多幅图像进行了检测,有较好的识别效果。下面是对另一幅车牌照的检测,结果如图18---24 所示。

图18 图19

图20

21

图22

23

图24

对于光照条件不理想的图象,可先进行一次图象增强处理,使得图象灰度动态范围扩展和对比度增强,再进行定位和分割,这样可以提高分割的正确率。而采用了色彩通道的牌照区域分割算法充分利用了牌照图象的色彩信息,简化了算法的实现,加快了图象的处理速度,具有较高的检出正确率,而且整个过程用MATLAB 语言编程实现,无时间滞后感,可以满足实时检出的要求。但是在设计的过程中发现,使用另一幅图像后,识别效果始终没有那么理想。需要做一定的设置后才能识别出相应的字符。

在车牌字符分割的预处理中,用到了对分割出的字符车牌进行均值滤波,膨胀或腐蚀的处理。这在对于有杂点的车牌是很有用的,因为这样可以把字符与字符之间的杂色点去除,只有白色的字符和黑色的背景存在,这样有利于的字符分割进行。

字符识别过程使用的是模板匹配的方法,利用两幅图片相减的方法,找到相减后值最小的,即为相似程度最大的。模板的制作很重要,必须要用精确的模板,否则就不能正确的识别。

对于识别错误情况的分析可知,主要原因:一是牌照自身的污渍等影响了图象的质量;二是牌照字符的分割失败导致的识别错误;再就是部分字符的形状相似性,比如,B 和8;A 和4 等字符识别结果可能发生混淆的情况。

总之,尽管目前牌照字符的识别率还不理想,但是只要在分割出的字符的大小、位置的归一化,以及尝试提取分类识别能力更好的特征值和设计分类器等环节上再完善,进一

步提高识别率是完全可行的。

6.程序源代码:(基于matlab 的程序代码)

function [d]=main(jpg)

I=imread('car.jpg');

figure(1),imshow(I);title('原图'); I1=rgb2gray(I);

figure(2),subplot(1,2,1),imshow(I1);title('灰度图');

figure(2),subplot(1,2,2),imhist(I1);title('灰度图直方图'); I2=edge(I1,'robert',0.08,'both');

figure(3),imshow(I2);title('robert算子边缘检测') se=[1;1;1];

I3=imerode(I2,se);

figure(4),imshow(I3);title('腐蚀后图像'); se=strel('rectangle',[40,40]); I4=imclose(I3,se);

figure(5),imshow(I4);title('平滑图像的轮廓'); I5=bwareaopen(I4,2000);

figure(6),imshow(I5);title('从对象中移除小对象'); [y,x,z]=size(I5); myI=double(I5); %begin横向扫描

tic

Blue_y=zeros(y,1); for i=1:y for j=1:x

if(myI(i,j,1)==1)

%如果myI(i,j,1)即myI 图像中坐标为(i,j)的点为蓝色 %则Blue_y的相应行的元素white_y(i,1)值加1 Blue_y(i,1)= Blue_y(i,1)+1;%蓝色像素点统计 end

end end

[temp MaxY]=max(Blue_y);%temp为向量white_y的元素中的最大值,MaxY 为该值的索引( 在向量中的位置) PY1=MaxY;

while ((Blue_y(PY1,1)>=120)&&(PY1>1)) PY1=PY1-1;

end PY2=MaxY;

while ((Blue_y(PY2,1)>=40)&&(PY2

end

IY=I(PY1:PY2,:,:);

%IY为原始图像I 中截取的纵坐标在PY1:PY2之间的部分 %end横向扫描 %begin纵向扫描

Blue_x=zeros(1,x);%进一步确定x 方向的车牌区域

for j=1:x

for i=PY1:PY2

if(myI(i,j,1)==1)

Blue_x(1,j)= Blue_x(1,j)+1; end end

end

PX1=1;

while ((Blue_x(1,PX1)

PX2=x;

while ((Blue_x(1,PX2)PX1)) PX2=PX2-1; end

%end纵向扫描

PX1=PX1-2;%对车牌区域的校正 PX2=PX2+2;

dw=I(PY1:PY2,:,:); t=toc;

figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域');

figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像') imwrite(dw,'dw.jpg');

[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像'); jpg=strcat(filepath,filename); a=imread('dw.jpg'); b=rgb2gray(a);

imwrite(b,'1.车牌灰度图像.jpg');

figure(8);subplot(3,2,1),imshow(b),title('1.车牌灰度图像') g_max=double(max(max(b))); g_min=double(min(min(b)));

T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值 [m,n]=size(b);

d=(double(b)>=T); % d:二值图像 imwrite(d,'2.车牌二值图像.jpg');

figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像') figure(8),subplot(3,2,3),imshow(d),title('3.均值滤波前') % 滤波

h=fspecial('average',3);

d=im2bw(round(filter2(h,d))); imwrite(d,'4.均值滤波后.jpg');

figure(8),subplot(3,2,4),imshow(d),title('4.均值滤波后') % 某些图像进行操作 % 膨胀或腐蚀

% se=strel('square',3); % 使用一个3X3的正方形结果元素对象对创建的图像膨胀 % 'line'/'diamond'/'ball'...

se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵 [m,n]=size(d);

if bwarea(d)/m/n>=0.365 d=imerode(d,se);

elseif bwarea(d)/m/n

end

imwrite(d,'5.膨胀或腐蚀处理后.jpg');

figure(8),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后')

% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割 d=qiege(d); [m,n]=size(d);

figure,subplot(2,1,1),imshow(d),title(n) k1=1;k2=1;s=sum(d);j=1; while j~=n

while s(j)==0 j=j+1; end

k1=j;

while s(j)~=0 && j

k2=j-1; if k2-k1>=round(n/6.5)

[val,num]=min(sum(d(:,[k1+5:k2-5]))); d(:,k1+num+5)=0; % 分割 end

end

% 再切割 d=qiege(d);

% 切割出 7 个字符

y1=10;y2=0.25;flag=0;word1=[]; while flag==0

[m,n]=size(d); left=1;wide=0;

while sum(d(:,wide+1))~=0 wide=wide+1;

end

if wide

temp=qiege(imcrop(d,[1 1 wide m])); [m,n]=size(temp); all=sum(sum(temp));

two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:))); if two_thirds/all>y2

flag=1;word1=temp; % WORD 1 end

d(:,[1:wide])=0;d=qiege(d); end

end

% 分割出第二个字符 [word2,d]=getword(d); % 分割出第三个字符 [word3,d]=getword(d); % 分割出第四个字符 [word4,d]=getword(d); % 分割出第五个字符 [word5,d]=getword(d); % 分割出第六个字符 [word6,d]=getword(d); % 分割出第七个字符 [word7,d]=getword(d);

figure(9),imshow(word1),title('1'); figure(10),imshow(word2),title('2'); figure(11),imshow(word3),title('3'); figure(12),imshow(word4),title('4'); figure(13),imshow(word5),title('5'); figure(14),imshow(word6),title('6'); figure(15),imshow(word7),title('7'); [m,n]=size(word1);

% 商用系统程序中归一化大小为 40*20,此处演示 word1=imresize(word1,[40 20]); word2=imresize(word2,[40 20]); word3=imresize(word3,[40 20]); word4=imresize(word4,[40 20]); word5=imresize(word5,[40 20]); word6=imresize(word6,[40 20]); word7=imresize(word7,[40 20]); figure(16),

subplot(3,7,8),imshow(word1),title('1');

subplot(3,7,9),imshow(word2),title('2'); subplot(3,7,10),imshow(word3),title('3'); subplot(3,7,11),imshow(word4),title('4'); subplot(3,7,12),imshow(word5),title('5'); subplot(3,7,13),imshow(word6),title('6'); subplot(3,7,14),imshow(word7),title('7'); imwrite(word1,'1.jpg'); imwrite(word2,'2.jpg'); imwrite(word3,'3.jpg'); imwrite(word4,'4.jpg'); imwrite(word5,'5.jpg'); imwrite(word6,'6.jpg'); imwrite(word7,'7.jpg');

liccode=char(['0':'9' 'A':'Z' '苏豫陕鲁']); %建立自动识别字符代码表SubBw2=zeros(40,20); l=1; for I=1:7

ii=int2str(I); t=imread([ii,'.jpg']);

SegBw2=imresize(t,[40 20],'nearest');

if l==1 %第一位汉字识别 kmin=37; kmax=40;

elseif l==2 %第二位 A~Z 字母识别 kmin=11; kmax=36;

else l>=3 %第三位以后是字母或数字识别 kmin=1; kmax=36; end

for k2=kmin:kmax

fname=strcat('字符模板\',liccode(k2),'.jpg'); SamBw2 = imread(fname); for i=1:40 for j=1:20

SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j); end end

% 以上相当于两幅图相减得到第三幅图 Dmax=0; for k1=1:40 for l1=1:20

if ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1)

end

end

Error(k2)=Dmax;

end

Error1=Error(kmin:kmax);

MinError=min(Error1);

findc=find(Error1==MinError);

l=l+1;

end

figure(17),subplot(3,1,2),imshow(dw),title ('车牌号码: 陕 A B A 2 2 3');

%子程序:(getword 子程序)

function [word,result]=getword(d)

word=[];flag=0;y1=8;y2=0.5;

while flag==0

[m,n]=size(d);

wide=0;

while sum(d(:,wide+1))~=0 && wide

wide=wide+1;

end

temp=qiege(imcrop(d,[1 1 wide m]));

[m1,n1]=size(temp);

if widey2

d(:,[1:wide])=0;

if sum(sum(d))~=0

d=qiege(d); % 切割出最小范围

else word=[];flag=1;

end

else

word=qiege(imcrop(d,[1 1 wide m]));

d(:,[1:wide])=0;

if sum(sum(d))~=0;

d=qiege(d);flag=1;

else d=[];

end

end

end

result=d;

% (qiege 子程序)

function e=qiege(d)

[m,n]=size(d);

top=1;bottom=m;left=1;right=n; % init

while sum(d(top,:))==0 && top

top=top+1;

end

while sum(d(bottom,:))==0 && bottom>1

bottom=bottom-1;

end

while sum(d(:,left))==0 && left

left=left+1;

end

while sum(d(:,right))==0 && right>=1

right=right-1;

end

dd=right-left;

hh=bottom-top;

e=imcrop(d,[left top dd hh]);

7.总结

本文主要解决了以下几个问题:1. 在背景的图象中如何定位分割牌照区域;2. 对分割下来的牌照字符如何提取具有分类能力的特征;3. 如何设计识别器。在车辆牌照字符识别系统的研究领域,近几年出现了许多切实可行的识别技术和方法,从这些新技术和方法中可以看到两个明显的趋势:一是单一的预处理和识别技术都无法达到理想的结果,多种方法的有机结合才能使系统有效识别能力提高。在本系统的设计时,也汲取了以上一些算法的思想,结合实际,反复比较,综合分析;二是在有效性和实用的原则下,结合神经网络和人工智能的新技术的应用是研究的一个方向。

根据车牌特点,一般采用的车牌定位算法有:1. 边缘检测定位算法;2. 利用哈夫变换进行车牌定位;3. 色彩分割提取车牌等。这里我采用的是边缘检测的方法实现定位的。

字符分割的方法也有多种:1. 基于聚类分析的字符分割;2. 投影分割的方法;3. 基于模板匹配的字符分割等。最常用的是投影分割,主要是针对在车牌定位,图像预处理后比较规则的车牌图像。优点是程序逻辑设计简单,循环执行功能单一,便于设计和操作,程序执行时间短。

字符识别的基本方法通常又三类:1. 结构特征分析方法;2. 模板匹配法;3. 神经网络法。此处采用的是模板匹配的方法,即是将要识别的字符与事先构造好的模板进行比对,根据与模板的相似度的大小来确定最终的识别结果。

但是系统本身还存在许多不足,距离具体实用的要求仍有很大差距,但我却在这次课程设计中学到了很多知识。

8.参考文献 百度


相关内容

  • 车牌识别数字图像处理
  • 期末大作业报告 课程名称: 数字图像处理 设计题目: 车牌识别 学 院: 信息工程与自动化学院 专 业: 计算机科学与技术 年 级: xxxxx 学生姓名: xxxxxxx ( 学号 xxxxxxxxxxxxx) 指导教师: xxxx 日 期: 2012.6.10 教 务 处 制 车牌识别 摘要:数 ...

  • 闯红灯方案
  • 三.闯红灯自动抓拍系统方案 该系统采用采取纯视频检测方式,自动对视频流中运动物体进行实时逐帧检测.锁定.跟踪,根据车辆运动轨迹判断车辆是否违章并进行记录,无需破坏路面,埋设线圈.采用500万CCD高清一体化摄像机为采集主体,单台摄像机可覆盖单向3车道:采用LED频闪灯进行夜间补光.设备稳定,结构简单 ...

  • 酒店停车场计费版解决方案
  • 车牌识别系统解决方案 方案简介 捷安顺针对既有临时车又有固定车的停车场用户,推出车牌识别停车计费管理系统方案,利用车牌识别技术取代传统的IC卡技术,解决车辆进出时必须停下刷卡而造成的停车场进出口塞车现象,这种智能的停车管理系统为目前的停车场用户提供了一种崭新的服务模式. 通过该系统固定车辆进出可以实 ...

  • 车牌字符识别毕业设计
  • 摘 要 为了对车牌字符的识别,本文将BP 神经网络应用于汽车车牌的自动识别,在车牌图像进行预处理后的基础上,重点讨论了用BP 神经网络方法对车牌照字符的识别. 首先将训练样本做图像预处理,对车牌上的字符进行分割,得到单个字符.对大小不一的字符做归一化后,对字符进行特征提取,把长为15,宽为25的归一 ...

  • 全视频智慧停车场综合解决方案
  • 智慧停车场综合解决方案 厦门科拓通讯技术股份有限公司 地址:中国厦门火炬高新区软件园二期观日路58号301单元 邮编:361008 目录 一. 前言 . ......................................................................... ...

  • 一种快速实用的车牌字符识别方法
  • 文章编号:1008-0570(2010)01-2-0211-02 图像处理 一种快速实用的车牌字符识别方法 A Quick and Practical Method of the License Plate Recognition (兰州交通大学) 李珺党建武 LI Jun DANG Jian-wu ...

  • 汽车车牌的号码识别
  • 目录 1 技术要求 . ................................................................. 1 2 基本原理 . ............................................................. ...

  • 人工智能_论文
  • 福建农林大学计算机与信息学院 计算机类论文报告 课题名称: 设计题目: 姓 名: 系: 专 业: 年 级: 学 号: 指导教师: 职 称: 科研成果论文 汽车中的人工智能化技术 计算机科学与技术 计算机科学与技术 2011年 6 月 12 日 目录 摘要 ...................... ...

  • 1车牌精确定位
  • 计算机与现代化 2009年第3期 文章编号:1006-2475(2009)03-0019-05 JISUANJIYUXIANDAIHUA 总第163期 车牌识别系统中图像的采集和定位问题研究 吕文敏 (华南理工大学自动化科学与工程学院,广东广州510640) 摘要:针对汽车牌照识别系统中图像的采集和 ...