数字车牌识别系统设计和灰度处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字车牌识别系统设计和灰度处理
(总25页)
--本页仅作为文档封面,使用时请直接删除即可--
--内页可以根据需求调整合适字体及大小--
目录
1、摘要·····································
2、引言···········································
3、步骤······································
图像处理·································
车牌定位·································
字符分割·································
字符识别·································
灰度变换································
4、算法实现··········································
5、测试结果与分析·····································
6、总结与体会·········································
A组题目三):
1.摘要
采用数字图像处理技术对拍摄的车牌图片进行预处理。

进行车牌定位,字符分割,取得初始字符模型。

对车牌中的数字、字母和汉字进行提取和识别,供后续程序使用。

本文描述了采用数字图像处理技术设计算法进行各种处理。

2.引言
数字图像处理,起源于20世纪20年代,当时通过海底电缆从英国伦敦到美国纽约传输了一幅照片,采用了数字压缩技术。

1964年美国的JPL 实验室处理了太空船“徘徊者七号”发回的月球照片,标志着数字图像处理技术开始得到实际应用。

其后,卫星遥感、军事、气象、医学等学科的发展推动了数字图像处理技术的快速发展。

目前。

数字图像处理己成为工程学、计算机科学、信息科学、物理学、化学、生物学等学科的学习研究对象。

在交通管理过程中,通常采用视频监控方式对闯红灯和超速等违章车辆进行监督。

对违章车辆,需要自动检测车牌信息,提取车牌号码,以便查找车主信息和监督管理。

3.步骤
理论知识
图像预处理
输入车牌图像———>灰度校正——>平滑处理——>提取边缘
灰度变换
输入的彩色图像包含大量颜色信息,会占用较多的存储空间,且处理时也会降低系统的执行速度,因此对图像进行识别等处理时.常将彩色图像转换为灰度图像,以加快处理速度。

可对图像进行灰度化处理、提取背景图像、增强处理、图像二值化,边缘检测、滤波等处理。

然后采用robert算子进行边缘检测,再用imopen和imclose对所得二值图像作开、闭操作进行滤波。

边缘提取
数字图像的边缘检测是图像分割、目标区域的识别、区域形状提取等图像分析领域十分重要的基础。

边缘是图像的重要特征,图像理解和分析的第一步往往就是边缘检测。

目前,边缘检测已成为计算机视觉研究领域最活跃的课题之一,在工程应用中占有十分重要的地位。

车牌的一个重要特征就是在该区域存在大量的边缘信息,所以边缘检测对于我们进行车牌识别来说也是相当重要的。

边缘是以图像的局部特征不连续的形式出现的,也就是指图像局部亮度变化最显著的部分,如灰度值的突变、颜色的突变、纹理结构的突变等,同时边缘也是不同区域的分界处。

图像边缘有方向和幅度两个特性,通常
沿边缘的走向灰度变化平缓,垂直于边缘走向灰度变化剧烈。

由于边缘是图像上灰度变化最剧烈的地方,传统的边缘检测就利用这个特点,通过计算图像中像素的梯度值来确定边缘点。

车牌定位
自然环境下,汽车图像背景复杂,光照不均匀,在自然背景中准确地确定牌照区域是整个图像识别过程中的关键。

首先对采集到的图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳区域作为牌照区域。

将其从图像中分割嘲出来,同时要考虑车牌倾斜问题。

算法流程如下
字符分割
完成牌照区域的定位后,再将牌照区域分割为单个字符,可采用垂直投影法。

由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值.并且该位置应满足牌照的字符书写格式、字符、尺寸限制等条件。

利用垂直投影法实现复杂环境下汽车图像中的字符分割效果较好。

字符识别
字符识别方法主要有基于模板匹配算法和基于人工神经网络算法。

基于模板匹配算法是首先将分割后的字符二值化,并将其尺寸缩放为字符数据库中模板的大小,然后与所有模板进行匹配,最后选取最佳匹配作为结果。

建立数字库对该方法在车牌识别过程中很重要,数字库准确才能保证检测出的数据正确。

基于人工神经元网络的算法有两种,一种是先对特征
提取待识别字符,然后用所获得的特征训练神经网络分配器;另一种是直接将待处理图像输入网络由网络自动实现特征提取直至识别结果。

模板匹配实现简单,当字符较规整时,对字符图像的缺损、污迹干扰适应力强且识别率高。

因此,这里将模板匹配作为车牌字符识别的主要方法。

根据课程设计的内容和要求。

首先必须要了解Matlab用户界面设计工具箱,然后能灵活运用Matlab图形处理工具进行相应的用户界面设计和图像处理,最后程序设计和功能实现。

具体步骤如下:
双击打开MATLAB →File→New→GUI→单击axes,设置用户界面。

axes1大小→单击 OK,调用所需按钮→调整大小、颜色、修改名称;再建axes2→单击OK,调整按钮大小和颜色,修改名称→保存→View→M-file Edit→编写程序
打开
[name,path]=uigetfile('*.*','');
file=[path,name];
axes;
x=imread(file); %读取图像
=x;
guidata(hObject, handles); %输出
保存
[filename,pathname] = uiputfile('*.bmp',''); if isequal([filename,pathname],[0,0]) errordlg('无图像或未处理 ');
return;
else
file=strcat(pathname,filename);
i=getimage;
imwrite(i,file);
end
另存
[filename,pathname] = uiputfile('*.bmp','');
if isequal([filename,pathname],[0,0])
errordlg('ÎÞͼÏñ»òδ´¦Àí ');
return;
else
file=strcat(pathname,filename);
k=;
i=getimage(k);
imwrite(i,file);
end
打印
printdlg
printdlg(fig)
printdlg('-crossplatform',fig) printdlg(-'setup',fig)
退出
clc;
close all;
close(gcf)
直方图统计
axes;
x=;
set ,'xtick',0:50:255);
if isrgb(x)
y=rgb2gray(x);
else
y=x;
end
a=imhist(y);
y1=a(1:15:256);
x1=1:15:256;
bar(x1,y1);
直方图均衡
axes;
x=;
if isrgb(x)
a=histeq(x(:,:,1));
b=histeq(x(:,:,2));
c=histeq(x(:,:,3));
k(:,:,1)=a;
k(:,:,2)=b;
k(:,:,3)=c;
imshow(k);
else
h=histeq(x);
imshow(h)
end
上下翻转
axes;
x=;
if isrgb
for k=1:3
y(:,:,k)=flipud(x(:,:,k)); end
imshow(y);
title('ÉÏÏ·-ת')
else
y(:,:,:)=flipud(x(:,:,:));
imshow(y)
title('ÉÏÏ·-ת')
end
左右翻转
axes;
x=;
if isrgb
for k=1:3
y(:,:,k)=fliplr(x(:,:,k));
end
imshow(y);
title('×óÓÒ·-ת')
else
y(:,:,:)=fliplr(x(:,:,:));
imshow(y);
title('¡Á×óÓÒ·-ת')
end
彩色变灰色
axes;
if isrgb
x=rgb2gray;
imshow(x);
else
errordlg('这已经是灰度图像,转换失败') end
二值化处理
axes;
x=;
if isrgb(x)
y=rgb2gray(x);%
else
y=x;
end
y1=graythresh(y);%
a=im2bw(y,y1);%
imshow(a)
title('图像二值化')
伪色彩增强
axes;if ~isrgb I=; I=double(I); [m,n]=size(I); c=256;for i=1:m for j=1:n if I(i,j)<=c/4 R(i,j)=0; G(i,j)=4*I(i,j); B(i,j)=c; else if I(i,j)<=c/2 R(i,j)=0 ; G(i,j)=c; B(i,j)=-4*I(i,j)+2*c; else if I(i,j)<=3*c/4 R(i,j)=4*I(i,j)-2*c; G(i,j)=c; B(i,j)=0; else R(i,j)=c; G(i,j)=-
4*I(i,j)+4*c; B(i,j)=0; end endend endendfor i=1:m for j=1:n out(i,j,1)=R(i,j) ; out(i,j,2)=G(i,j); out(i,j,3)=B(i,j); endendout=out/256;imshow(out);title('灰度图像伪色彩增强')else errordlg('彩色图像,‘转换失败') end
真彩色增强
axes;
x=;
if isrgb(x)
a=histeq(x(:,:,1));
b=histeq(x(:,:,2));%g
c=histeq(x(:,:,3));%b
k(:,:,1)=a;
k(:,:,1)=b;
k(:,:,1)=c;
newimg = cat(3,a,b,c);
imshow(newimg,[]); title('均衡化分量,还原原图');
else
errordlg(' 灰度图像,‘转换失败')
end
车牌剪切
axes;x=;y=imcrop(x);imshow(y);title('图像剪切')
图像放大
axes;
x=;
I=double(x);
Y=4;
a=imresize(I,Y,'nearest'); %
imshow(uint8(a));
车牌定位
yi=;
if ~isrgb(yi)
errordlg('请输入彩色车牌图像 ');
return
else
I1=rgb2gray(yi);
I2=imopen(I1,strel('disk',15));
I3=imsubtract(I1,I2);%增强处理
I4=edge(I3,'robert',
se=[1;1;1];
I5=imerode(I4,se); %腐蚀后图像
se=strel('rectangle',[8,18]); %创建结构元素
I6=imclose(I5,se); %闭运算
I7=imopen(I6,strel('rectangle',[8,14]));%开运算
I8=bwareaopen(I7,1000); %从对象中移除小与1000的对象[y,x,z]=size(I8);
myI=double(I8); %开始横向扫描
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);
PY1=MaxY;
while ((Blue_y(PY1,1)>=60)&&(PY1>5))
PY1=PY1-5;
end
PY2=MaxY;
while ((Blue_y(PY2,1)>=50)&&(PY2<y))
PY2=PY2+5;
end
IY=yi(PY1:PY2,:,:);
Blue_x=zeros(1,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)<3)&&(PX1<x))
PX1=PX1+1;
end
PX2=x;
while ((Blue_x(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
PX1=PX1-2;
PX2=PX2+2;
dw=yi(PY1:PY2,PX1:PX2,:,:);
t=toc;
imwrite(dw,'');
axes;imshow(dw);
title('定位剪切后的彩色车牌图像')
end
车牌字符分割
[filename,filepath]=uigetfile('','输入一个定位裁剪后的车牌图像
');jpg=strcat(filepath,filename);y=imread('');b=rgb2gray(y);imwrite(b,'1.车牌灰度图
像.jpg');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,'2.车牌二值图
像.jpg');h=fspecial('average',3);d=im2bw(round(filter2(h,d)));imwrite(d,'4.均值滤波
后.jpg');se=eye(2); [m,n]=size(d);if bwarea(d)/m/n>= d=imerode(d,se);elseif bwarea(d)/ m/n<= d=imdilate(d,se);endimwrite(d,'');d=qiege(d);[m,n]=size(d);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<=n-1 j=j+1; end k2=j-1; if k2-
k1>=round(n/ [val,num]=min(sum(d(:,[k1+5:k2-
5]))); d(:,k1+num+5)=0; endendd=qiege(d);y1=10;y2=;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<y1 d(:,[1:wide])=0; d=qiege(d); else 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); endend % 第2个字符[word2,d]=getword(d);%第3个字符[word3,d]=getword(d);%第4个字符[word4,d]=getword(d);%第5个字符[word5,d]=getword(d);%第6个字符
[word6,d]=getword(d);% 第7个字符[word7,d]=getword(d);[m,n]=size(word1);% 归一化处理设大小为40*20.word1=imresize(word1,[40 20]);% imresize改变图像大小
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]);axes;subplot(1,7,1),imshow(word1);subplot(1,7,2),imshow(word2);subplot(1,7,3),i mshow(word3);subplot(1,7,4),imshow(word4);subplot(1,7,5),imshow(word5);subplot(1,7,6), imshow(word6);subplot(1,7,7),imshow(word7);imwrite(word1,'');imwrite(word2,'');imwrite( word3,'');imwrite(word4,'');imwrite(word5,'');imwrite(word6,'');imwrite(word7,'');
车牌字符识别
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 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) <0 ) Dmax=Dmax+1;
end end end Error(k2)=Dmax; end Error1=Error(kmin:kmax); MinError=min(Error1); findc=find(Error1==MinError); l=l+1;endaxes;imshow(dw) ,title ('当前车牌号')
边缘提取
axes;
x=;
if isrgb(x)
y=rgb2gray(x);
else
y=x;
end
y1=edge(y,'robert',,'both');
imshow(y1)
中值滤波
axes;
x=;
if ~isrgb(x)
a=medfilt2(x);
imshow(a);
title('ÖÐÖµÂ˲¨')
else
a=x(:,:,1);
b=x(:,:,2);
c=x(:,:,3);
k(:,:,1)=medfilt2(a);
k(:,:,2)=medfilt2(b);
k(:,:,3)=medfilt2(c);
imshow(k);
title('中值滤波¨')
end
梯度锐化
axes;
x=;
I=double(x);
[IX,IY]=gradient(I);
GM=sqrt(IX.*IY+IX.*IY);
meth1=I;
J=find(GM>8);
meth1(J)=230;
imshow(meth1);
title('梯度锐化')
高通滤波
x=;
noisy=imnoise(x,'gaussian',;
g=fft2(noisy);
[M,N]=size(x);
Dcut=80;
for u=1:M
for v=1:N
D(u,v)=sqrt(u^2+v^2);
h=exp(log(1/sqrt(2))*(Dcut/D(u,v))^2);%
end end z=h.*g; y2=ifft2(z); axes;imshow(y2); title('高通滤波')
B 组第三题
1. 灰度变换
灰度变换是图像增强的一种重要手段,它常用于改变图象的灰度范围及分布,是图象数字化及图象显示的重要工具。

1) 图像反转
灰度级范围为[0, L-1]的图像反转可由下式获得
r L s --=1
2) 对数运算:有时原图的动态范围太大,超出某些显示设备的允许动态范围,如直接使用原图,则一部分细节可能丢失。

解决的方法是对原图进行灰度压缩,如对数变换:
s = c log(1 + r ),c 为常数,r ≥ 0
3) 幂次变换:
0,0,≥≥=γγc cr s
4) 对比拉伸:在实际应用中,为了突出图像中感兴趣的研究对象,常常要求局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理,即分段线性拉伸:
其对应的数学表达式为:
灰度线性变换
I=imread('');
subplot(2,2,1),imshow(I);
title('Ô-ʼͼÏñ');
axis([50,250,50,200]);
axis on;%ÏÔʾ×ø±êϵ
I1=rgb2gray(I);
subplot(2,2,2),imshow(I1);
title('»Ò¶ÈͼÏñ');
axis([50,250,50,200]);
axis on; %ÏÔʾ×ø±êϵ
J=imadjust(I1,[ ],[]); %¾Ö²¿À-É죬°Ñ[ ]ÄڵĻҶÈÀ-ÉìΪ[0 1] subplot(2,2,3),imshow(J);
title('ÏßÐԱ任ͼÏñ[ ]');
axis([50,250,50,200]);
grid on; %ÏÔʾÍø¸ñÏß
axis on; %ÏÔʾ×ø±êϵ
K=imadjust(I1,[ ],[]); %¾Ö²¿À-É죬°Ñ[ ]ÄڵĻҶÈÀ-ÉìΪ[0 1] subplot(2,2,4),imshow(K);
title('ÏßÐԱ任ͼÏñ[ ]');
axis([50,250,50,200]);
grid on; %ÏÔʾÍø¸ñÏß
axis on; %ÏÔʾ×ø±êϵ
灰度非线性变换
I=imread('');
I1=rgb2gray(I);
subplot(1,2,1),imshow(I1);
title(' »Ò¶ÈͼÏñ');
axis([50,250,50,200]);
grid on; %ÏÔʾÍø¸ñÏß
axis on; %ÏÔʾ×ø±êϵ
J=double(I1);
J=40*(log(J+1));
H=uint8(J);
subplot(1,2,2),imshow(H);
title(' ¶ÔÊý±ä»»Í¼Ïñ');
axis([50,250,50,200]);
grid on; %ÏÔʾÍø¸ñÏßaxis on; %ÏÔʾ×ø±êϵ。

相关文档
最新文档