车牌图像定位与识别.docx
《车牌图像定位与识别.docx》由会员分享,可在线阅读,更多相关《车牌图像定位与识别.docx(13页珍藏版)》请在冰豆网上搜索。
车牌图像定位与识别
专业综合实验报告
数字图像处理
专业:
电子信息工程班级:
姓名:
学号:
指导教师:
2014年7月18日
车牌图像定位与识别
一、设计目的
利用matlab实现车牌识别系统,熟悉matlab应用软件的基础知识,利用其解决数字信号处理的实际应用问题,从而加深对理论知识的掌握,巩固理论课上知识的同时,加强实践能力的提高,理论联系实践,提高自身的动手能力。
同时不断的调试程序也提高了自己独立编程水平,并在实践中不断完善理论基础,有
助于自身综合能力的提高。
二、设计内容和要求
车牌识别系统应包含图像获取、图像处理、图像分割、字符识别、数据库管理等几个部分,能够完成复杂背景下汽车牌照的定位分割以及牌照字符的自动识别。
这里,只要求对给定的彩色车牌图像变换成灰度图像,用阈值化技术进行字
符与背景的分离,再提取牌照图像。
三、设计步骤
1打开计算机,启动MATLAB?
序;
2•调入给定的车牌图像,并按要求进行图像处理;
3•记录和整理设计报告
四、设计所需设备及软件
计算机一台;移动式存储器;MATLA软件。
五、设计过程
车辆牌照识别整个系统主要是由车牌定位和字符分割识别两部分组成,其中车牌定位又可以分为图像预处理及边缘提取模块和牌照的定位及分割模块;字符识别可以分为字符分割和单个字符识别两个模块。
(一)对图像进行图像转换、图像增强和边缘检测等
1.载入车牌图像:
SA3978Y
2将彩图转换为灰度图并绘制直方图:
3.用roberts算子进行边缘检测:
图像中车辆牌照是具有比较显著特征的一块图象区域,这此特征表现在:
近似水平的矩形区域;其中字符串都是按水平方向排列的;在整体图象中的位置较为固定。
正是由于牌照图象的这些特点,再经过适当的图象变换,它在整幅中可以明显地呈现出其边缘。
边缘提取是较经典的算法,此处边缘的提取采用的是Roberts算子。
4.图像实施腐蚀操作:
腐蚀后图
5.平滑图像:
对于受噪声干扰严重的图象,由于噪声点多在频域中映射为高频分量,因此可以在通过低通滤波器来滤除噪声,但实际中为了简化算法也可以直接在空域中用求邻域平均值的方法来削弱噪声的影响,这种方法称为图象平滑处理。
平滑图像
6删除二值图像的小对象
去除小对象
(二)车牌定位:
从预处理后的汽车图像中分割出车牌图像。
即在一幅车辆图像中找到车牌所在的位置
SA3978i
(三)字符分割与识别
1•车牌的进一步处理
对分割出的彩色车牌图像进行灰度转换二值化、均值滤波、腐蚀膨胀以及字符分割
以从车牌图像中分离出组成车牌号码的单个字符图像,分割出来的字符进行预处理二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码
158
2.字符分割
在汽车牌照自动识别过程中,字符分割有承前启后的作用。
它在前期牌照定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。
字符识别的算法很多,因为车牌字符间间隔较大,不会出现字符粘连情况,所以此处采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。
在此只进行了归一化处理,然后进行后期处理。
1234567
1234567
6.总结
根据车牌特点,一般采用的车牌定位算法有:
1.边缘检测定位算法;2.利用哈夫变换进行车牌定位;3.色彩分割提取车牌等。
这里我采用的是边缘检测的方法实现定位的。
字符分割的方法也有多种:
1.基于聚类分析的字符分割;2.投影分割的方法;3.基于模板匹配的字符分割等。
最常用的是投影分割,主要是针对在车牌定位,图像预处理后比较规则的车牌图像。
优点是程序逻辑设计简单,循环执行功能单一,便于设计和操作,程序执行时间短。
对现实事物的设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。
通过这次设计使我明白了自己原来知识还比较欠缺。
这个设计让我
学到了很多东西,涉及到方方面面的知识,在这整个过程中我们查阅了大量的资料,得到了老师和同学的帮助,我在此对他们表示谢意。
7.源代码:
(1)主程序:
I二imread('car.jpg');
figure
(1),imshow(l);title('原图');
I仁rgb2gray(I);
灰度图');
灰度直方图');
边缘检测图');
figure
(2),subplot(1,2,1),imshow(l1);title('figure
(2),subplot(1,2,2),imhist(l1);title('I2=edge(l1,'roberts',0.18,'both');
figure(3),imshow(I2);title('robertsse=[1;1;1];
I3=imerode(I2,se);
pu①
pu①
H+(rL)xdn_8H(rL)xdn_8
(LHH(L-r三ae)±=
CXIAdydH」04
XP.1IJ04-(>dp>d)lr>=pu①=+cxl>dHcxl>d
((AVcxl>d)osos(gHA(L-cxl>d)Adn_8)¥_zM
>xel/\IHcxl>dpu①vLAdHLAd
((LAL>d)osos(gHA(L-L>d)Adn_8)¥_zM
>xel/\IHL>dMAI①naxelu'lAxewdlu£pu①pu①
pu①
=+(L.—MI①nmH(L.—MI①nm
(LHH(L-r三ae)±=
X-l也」04
rL上」04
_(I/A)SO」①ZHA—①nm
01-(g¥-qnopllAlu-(g-¥Ns''N><>i¥_^(g_)MOLISE「(9¥」n64=0000寸一)u①doe①」e/v\qHg_¥_岂(寸一)MOLISE「(g¥」n64-(①so-¥soolu'll寸-二&呂-0;_6ueE)a)上S3S¥_^(£2)M0llsE「($2n64
end
PX仁1;
while((Blue_x(1,PX1)<3)&&(PX1PX仁PX1+1;
end
PX2=x;
while((Blue_x(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
PX仁PX1-1;
PX2=PX2+1;
dw=l(PY1:
PY2-8,PX1:
PX2,:
);
行方向车牌区域');定位后车牌区域');
t=toc;
figure(7),subplot(1,2,1),imshow(IY),title('figure(7),subplot(1,2,2),imshow(dw),title('
imwrite(dw,'dw.jpg');
a=imread('dw.jpg');
b=rgb2gray(a);
imwrite(b,'graylicenceplate.jpg');
figure(8);subplot(3,2,1),imshow(b),title('g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-g_min)/3);
[m,n]=size(b);
d=(double(b)>=T);
imwrite(d,'binarylicenceplate.jpg');subplot(3,2,2),imshow(d),title('beforeplate');
h=fspecial('average',3);d=im2bw(round(filter2(h,d)));imwrite(d,'afteraveragelicenceplate.jpg');
车牌灰度图像');
filteringbinary
licence
subplot(3,2,3),imshow(d),title('afteraveragelicenceplate');
se=eye
(2);
[m,n]=size(d);
ifbwarea(d)/m/n>=0.365
d=imerode(d,se);
elseifbwarea(d)/m/n<=0.235
d=imdilate(d,se);
end
licenee
imwrite(d,'expansionorcorrosiontheliceneeplate.jpg');subplot(3,2,4),imshow(d),title('expansionorcorrosionthe
plate');
d=qiege(d);
[m,n]=size(d);
subplot(3,2,5),imshow(d),title(n);
k1=1;k2=1;s=sum(d);j=1;
whilej~=n
whiles(j)==0
j=j+1;
end
k1=j;
whiles(j)~=0&&j<=n-1
j=j+1;
end
k2=j-1;
ifk2-k1>=round(n/6.5)
[val,num]=min(sum(d(:
[k1+5:
k2-5])));
d(:
k1+num+5)=0;
end
end
d=qiege(d);
y1=10;y2=0.25;flag=0;word仁[];
whileflag==0
[m,n]=size(d);
left=1;wide=0;
whilesum(d(:
wide+1))~=0
wide=wide+1;
end
ifwidevyl
d(:
[1:
wide])=0;
d=qiege(d);
else
temp=qiege(imcrop(d,[11widem]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):
2*round(m/3)],:
)));
iftwo_thirds/all>y2
flag=1;word1=temp;
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);
subplot(2,7,1),imshow(word1),title('1');
subplot(2,7,2),imshow(word2),title
(2);
subplot(2,7,3),imshow(word3),title(3);
subplot(2,7,4),imshow(word4),title('4');
subplot(2,7,5),imshow(word5),title('5');
subplot(2,7,6),imshow(word6),title('6');
subplot(2,7,7),imshow(word7),title('7');
[m,n]=size(word1);
word1=imresize(word1,[4020]);
word2=imresize(word2,[4020]);
word3=imresize(word3,[4020]);
word4=imresize(word4,[4020]);
word5=imresize(word5,[4020]);
word6=imresize(word6,[4020]);
word7=imresize(word7,[4020]);
subplot(2,7,8),imshow(word1),title('1');
subplot(2,7,9),imshow(word2),title('2');
subplot(2,7,10),imshow(word3),title(3);
subplot(2,7,11),imshow(word4),title('4');
subplot(2,7,12),imshow(word5),title('5');
subplot(2,7,13),imshow(word6),title('6');
subplot(2,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');
(2)子程序:
(getword子程序)
function[word,result]=getword(d)word=[];flag=0;y1=8;y2=0.5;
whileflag==0
[m,n]=size(d);
wide=0;
whilesum(d(:
wide+1))~=0&&wide<=n-2wide=wide+1;
end
temp=qiege(imcrop(d,[11widem]));
[m1,n1]=size(temp);
ifwidey2
d(:
[1:
wide])=0;
ifsum(sum(d))~=0
d=qiege(d);%切割出最小范围
elseword=[];flag=1;
end
else
word=qiege(imcrop(d,[11widem]));
d(:
[1:
wide])=0;
ifsum(sum(d))~=0;
d=qiege(d);flag=1;
elsed=[];
end
end
end
result=d;
子程序:
(qiege子程序)
functione=qiege(d)
[m,n]=size(d);
top=1;bottom=m;left=1;right=n;
whilesum(d(top,:
))==0&&top<=mtop=top+1;
end
whilesum(d(bottom,:
))==0&&bottom>1bottom=bottom-1;
end
whilesum(d(:
left))==0&&leftleft=left+1;
end
whilesum(d(:
right))==0&&right>=1
right=right-1;
end
dd=right-left;
hh=bottom-top;
e=imcrop(d,[lefttopddhh]);