数字图像处理报告.docx
《数字图像处理报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理报告.docx(10页珍藏版)》请在冰豆网上搜索。
数字图像处理报告
数字图像处理报告
基于MATLAB的字符识别研究
汽车牌照识别程序的设计
姓名:
苗盼盼
学号:
201014018
院系:
信息工程学院
指导老师:
许丽张帆
摘要:
本次课程设计的目的是通过对基于MATLAB的字符识别的研究,以汽车牌照识别的设计为实例,详细介绍字符识别的相关原理。
整个汽车牌照识别的过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块,用MATLAB软件编程来实现每一个部分,最后识别出汽车牌照。
关键词:
MATLAB字符识别车牌识别神经网络图像处理
一、课程设计目的
通过对课程设计任务的完成,能够掌握和熟悉加强对数字图像处理的理解;了解图像分割的基本原理和应用,起到综合运用各种技术和理论知识的作用。
二、背景及基本原理
数字图像处理(DigitalImageProcessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
图像分割是一种重要的图像技术,在理论研究和实际应用中都得到了人们的广泛重视。
图像分割的方法和种类有很多,有些分割运算可直接应用于任何图像,而另一些只能适用于特殊类别的图像。
有些算法需要先对图像进行粗分割,因为他们需要从图像中提取出来的信息。
许多不同种类的图像或景物都可作为待分割的图像数据,不同类型的图像,已经有相对应的分割方法对其分割,同时,某些分割方法也只是适合于某些特殊类型的图像分割。
分割结果的好坏需要根据具体的场合及要求衡量。
在本报告中是对车辆牌照中的文字和数字部分进行处理。
1.系统组成
基于MATLAB图像处理的汽车牌照识别系统主要包括车牌定位字符车牌分割和车牌字符识别三个关键环节其识别流程图如图1所示。
图1识别流程图
其中,
(1)原始图像:
由数码相机或其它扫描装置拍摄到的图像;
(2)图像预处理:
对动态采集到的图像进行滤波、边界增强等处理以克服图像干扰;
(3)车牌定位:
计算边缘图像的投影面积,寻找峰谷点,大致确定车牌位置,再计算此连通域内的宽高比,剔除不在域值范围内的连通域,最后得到的便为车牌区域;
(4)字符分割:
利用投影检测的字符定位分割方法得到单个的字符;
(5)字符数据库:
为第6步的字符识别建立字符模板数据库;
(6)字符识别:
通过基于模板匹配的OCR算法或基于人工神经网络的OCR算法,通过特征对比或训练识别出相关的字符,得到最后的汽车牌照,包括英文字母和数字。
2.图像预处理
图像在形成传输或变换过程中,受多种因素的影响,如:
光学系统失真、系统噪声、曝光不足或过量、相对运动等,往往会与原始景物之间或图像与原始图像之间产生了某种差异,这种差异称为降质或退化。
因此在图像处理之前必须进行预处理,包括去除噪音、边界增强、增加亮度等等。
输入的彩色图像包含大量颜色信息,会占用较多的存储空间,且处理时也会降低系统的执行速度,因此对图像进行识别等处理时,常将彩色图像转换为灰度图像,以加快处理速度。
对图像进行灰度化处理、边缘提取、再利用形态学方法对车牌进行定位。
具体步骤如下:
首先对图像进行灰度转换,二值化处理然后采用4X1的结构元素对图像进行腐蚀,去除图像的噪声。
采用25X25的结构元素,对图像进行闭合应算使车牌所在的区域形成连通。
再进行形态学滤波去除其它区域。
三、原代码及运行结果
I=imread('1.jpg');
figure
(1)
imshow(I);
I1=rgb2gray(I);
figure
(2)
imshow(I1);
I2=edge(I1,'robert',0.09,'both');
figure(3)
imshow(I2);
se=[1;1;1];%线型结构元素
I3=imerode(I2,se);
figure(4)
imshow(I3);
se=strel('rectangle',[25,25]);%矩形结构元素
I4=imclose(I3,se);
figure(5);
imshow(I4);
I5=bwareaopen(I4,2000);
figure(6)
imshow(I5);
[y,x,]=size(I5);
I6=double(I5);
Y1=zeros(y,1);
fori=1:
y
forj=1:
x
if(I6(i,j,1)==1)
Y1(i,1)=Y1(i,1)+1;
end
end
end
figure(6);
subplot(1,2,1);
plot(0:
y-1,Y1),title('行像素灰度值累计'),xlabel('行值'),ylabel('像素和');
[temp,MaxY]=max(Y1);
PY1=MaxY;
while((Y1(PY1,1)>=80)&&(PY1>1))
PY1=PY1-7;
end
PY2=MaxY;
while((Y1(PY2,1)>=80)&&(PY2PY2=PY2+7;
end
X1=zeros(1,x);
forj=1:
x
fori=PY1:
PY2
if(I6(i,j,1)==1)
X1(1,j)=X1(1,j)+1;
end
end
end
subplot(1,2,2);
plot(0:
x-1,X1),title('列像素灰度值累计'),xlabel('列值'),ylabel('像数和');
PX1=1;
while((X1(1,PX1)<3)&&(PX1PX1=PX1+7;
end
PX2=x;
while((X1(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-7;
end
DW=I(PY1:
PY2,PX1:
PX2,:
);
figure(7)
imshow(DW),title('车牌定位后图像');
ifisrgb(I)
I1=rgb2gray(I);
else
I1=I;
end
%%二值化车牌图像
I1=im2bw(I1,graythresh(I1));%二值化图像
I2=bwareaopen(I1,16);%去除小于16像素的区块
figure(8);
subplot(1,2,1);
imshow(I2),title('二值化车牌图像');
[y,x]=size(I2);
I3=double(I2);
X1=zeros(1,x);
forj=1:
x
fori=1:
y
if(I3(i,j,1)==1)
X1(1,j)=X1(1,j)+1;
end
end
end
subplot(1,2,2);
plot(0:
x-1,X1),title('车牌列像素点累计'),xlabel('列值'),ylabel('像素和');
Px0=1;
Px1=1;
figure(9);
fori=1:
7
while((X1(1,Px0)<3)&&(Px0Px0=Px0+1;
end
Px1=Px0;
while(((X1(1,Px1)>=3)&&(Px1Px1=Px1+1;
end
Z=I2(:
Px0:
Px1,:
);
switchstrcat('Z',num2str(i))
case'Z1'
PIN0=Z;
case'Z2'
PIN1=Z;
case'Z3'
PIN2=Z;
case'Z4'
PIN3=Z;
case'Z5'
PIN4=Z;
case'Z6'
PIN5=Z;
otherwise
PIN6=Z;
end
subplot(1,7,i);
imshow(Z);
Px0=Px1;
End
四、心得体会
本次实现遇到的问题主要是刚开始查了些资料,但是没能计算出本次实验的参数值。
考虑问题不全面。
验收时有好多的问题回答不上来。
参数的选取还是有点的不合适。
会去自己又改了些参数,出现的图像处理效果比之前的好了很多。
所以以后做实验一定会更加的细心。
五、参考文献
1.数字图像处理第二版(RafaelC.Gonzalez)2003-03-01
2、《MATLAB-0基础教程》清华大学2005