图像处理车牌识别系统
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
实验报告
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
图像处理
班别:11医学应用(2)班 组长: 组员:
指导老师:
1 1
目录
一、摘要 ------------------------------------------------------------------------------------- 3 二、 设计原理 ----------------------------------------------------------------------------- 3
、车牌的定位研究 ------------------------------------------------------------------ 3 1
2、字符分割的研究 ------------------------------------------------------------------ 4
3、字符识别的研究 ------------------------------------------------------------------ 4 三、 详细设计步骤 ----------------------------------------------------------------------- 4
、车牌定位 --------------------------------------------------------------------------- 4 1
1.1 图像的预处理 --------------------------------------------------------------- 4
1.2车牌定位---------------------------------------------------------------------- 8
2、字符分割 -------------------------------------------------------------------------- 10
2.1对读入图像进行预处理操作 -------------------------------------------- 11
2.2图像校正--------------------------------------------------------------------- 12
2.3去除水平方向上的边框 -------------------------------------------------- 13
2.4去除垂直方向上的边框 -------------------------------------------------- 15
2.5去除车牌上的圆点 -------------------------------------------------------- 17
3、字符识别 -------------------------------------------------------------------------- 19
3.1建立字符模板数据库 ----------------------------------------------------- 20
3.2对分割字符进行匹配 ----------------------------------------------------- 22
4、系统界面的实现 ----------------------------------------------------------------- 25 四、 设计结果分析 ---------------------------------------------------------------------- 29 五、 设计体会 ---------------------------------------------------------------------------- 29
2 2
车牌识别系统的设计
一、摘要
车牌是一辆汽车独一无二的信息,因此,对车辆牌照的识别技术可以作为辨识一辆车最为有效的方法。随着ITS(智能交通系统)的高速发展,对车牌识别技术的研究也随之发展。从根本上讲,牌照识别应用了先进的图像处理,模式识别,人工智能技术来获取,处理,解释,记录拍照的图像。目前, 汽车牌照的自动识别技术已经得到了广泛应用。汽车牌照自动识别整个处理过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块,其中字符识别过程主要由以下3个部分组成:?正确地分割文字图像区域;?正确的分离单个文字;?正确识别单个字符。用MATLAB软件编程来实现每一个部分,最后识别出汽车牌照。在研究的同时对其中出现的问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
进行了具体分析、处理。
二、设计原理
车牌自动识别是一项利用车辆的动态视频或静态图像进行车牌号码、车牌颜色自动识别的模式识别技术。其核心包括车牌定位算法、车牌字符分割算法和字符识别算法等。
输入要处理图像 预处理 车牌定位
单字符识别 字符特征字符分割
提取
图1 牌照识别系统原理图
主要研究内容如下:
1、车牌的定位研究。
先进行图像的预处理,包括RGB彩色图像的灰度化、图像灰度拉伸、图像边缘检测、灰度图的二值化等;车牌定位采用基于水平和垂直投影分布特征的方
3 3
法。
2、字符分割的研究。
先对定位后的车牌图像进行预处理,然后按照车牌的先验信息, 用区域增长算法来确定候选车牌的字符区域。
、字符识别的研究。 3
对于提取出的单个字符,先进行归一化操作,再与给定的模板做对比,识别出字符。
三、 详细设计步骤
1. 车牌定位:车辆牌照识别整个系统主要是由车牌定位和字符识别两部分组成,其中车牌定位又可以分为图像预处理及边缘提取模块和牌照的定位;
流程图:
图像灰 基于颜色的基础移除导入图像 对图像进行压
度校正 大对象 缩处理
对灰度校正后图计算X,Y移除图像中平滑
像进行形态学处理提方向车牌区域小对象 处理
取边缘 寻找到车牌,完1.1 图像的预处理
成车牌定位 为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清晰可辩的牌照图象。但由于该系统的摄像部分工作于开放的户外环境,加之车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离和角度以及车辆行驶速度等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图象进行识别前的预处理。
(1)一般的车牌识别只对小对象进行移除,但是有时候因为拍照原因,即使对图像进行了很好的预处理,还是不能排除一些比较大的又和车牌比较相像的地方,例如图(1)中,车后面的玻璃窗仅仅进行灰度处理和形态学处理,平滑处理是无法排除其对车牌定位的影响的,因此需要对大对象移除(移除大对象前需对图像进行统一化--压缩)。
4 4
图(1)
实现的代码:
img=image;
I=img;
[x,y,z]=size(img);
if x>2000||y>2000
img=img(1:2:end,1:2:end,:);
[x,y,z]=size(img);
end
hsi=rgb2hsi(img);
for i=1:x
for j=1:y
if (hsi(i, j ,1)<=0.65&&hsi(i, j,1)>=0.55&&hsi(i, j, 2)>0.4);%0.4 0.
hsi(i, j,2)=0;
hsi(i, j,3)=1;
;
else
hsi(i, j,2)=0;
hsi(i, j,3)=0;
end
end
end
origonImg=hsi2rgb(hsi);
rgbnew=origonImg;
(2)灰度校正:
5 5
由于牌照图象在拍摄时受到种种条件的限制和干扰,图象的灰度值往往与实际景物不完全匹配,这将直接影响到图象的后续处理。如果造成这种影响的原因主要是由于被摄物体的远近不同,使得图象中央区域和边缘区域的灰度失衡,或是由于摄像头在扫描时各点的灵敏度有较大的差异而产生图象灰度失真,或是由于曝光不足而使得图像的灰度变化范围很窄。这时就可以采用灰度校正的方法来处理,增强灰度的变化范围、丰富灰度层次,以达到增强图象的对比度和分辨率。
灰度校正图 graynew=rgb2gray(rgbnew);
(3)边缘检测:
边缘是指图像局部亮度变化显著的部分,是图像风、纹理特征提取和形状特征提取等图像分析的重要基础。所以在此我们要对图像进行边缘检测。图象增强处理对图象牌照的可辩认度的改善和简化后续的牌照字符定位和分割的难度都是很有必要
6 6
实现代码:origonImg=hsi2rgb(hsi);
rgbnew=origonImg;
graynew=rgb2gray(rgbnew);
graynew=imfill(graynew,'holes');
for i=1:3
se1=[1 1 1;1 1 1;1 1 1];
graynew=imdilate( graynew,se1);
se=[1;1;1];
graynew=imerode(graynew,se);% 腐蚀Imerode(X,SE).其中X是待处理的像,%SE是结构元
7 7
素对象
graynew=getcenter(graynew); graynew=double(graynew);
[row col]=size(graynew);
1.2车牌定位
牌照的定位是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用。
图为定位出的车牌
实现代码:
车牌裁剪:
[row col]=size(graynew);
colArray=zeros(row,1);
for i=1:row
for j=1:col
if (graynew(i,j,1)==1)
colArray(i,1)=colArray(i,1)+1;
end
end
end
[maxcount maxIndex]=max(colArray);
roughY=maxIndex;
while ((colArray(roughY,1)>=5)&&(roughY>1))
roughY=roughY-1;
8 8
end
y1=roughY;
roughY=maxIndex;
while ((colArray(roughY,1)>=5)&&(roughY
=5)&&(roughX>1))
roughX=roughX-1;
end
x1=roughX;
roughX=maxIndex;
while ((rowArray(1,roughX)>=5)&&(roughX=30)&&(Py0>2))
Py0=Py0-1;%找到去除边框后上边的位置
end
while ((Y1(Py1,1)>=30)&&(Py1=15)&&(x1=5)&&(x0>2))
x0=x0-1;%从车牌的第一个字符开始寻找第一个字符间隙,找到%去除边框左
边的位置
end
i=i+1;
while ((X1(1,x0)<5)&&(x0>1)&&i~=2)
x0=x0-1;%找到去除边框后左边的位置
end
end
end
Z2=Z1(:,x0:x1,:);%将二值图像左右边框去除
figure(5);
imshow(Z2),title('将二值图像垂直边框去除后图像');
16 16
2.5再次计算列方向的像素,用来去除车牌上的圆点
代码:
[y,x,z]=size(Z2);%计算此时图像的大小 X1=zeros(1,x);
for j=1:x
for i=1:y
if(Z2(i,j,1)==1)
X1(1,j)= X1(1,j)+1;%计算I3第j列有几个一
end
end End
去除车牌中的圆点:
[y,x,z]=size(Z2); Z2=double(Z2);
x1=fix(x*105/409); x2=fix(x*128/409); for i=1:y
for j=x1:x2
Z2(i,j)=0;
end
17 17
end
figure(6);
imshow(Z2),title('去除圆点后图像');
2.6用投影法分割车牌,把分割出来的子图转成
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
子图
代码:
用投影法分割
Px0=1;
Px1=1;
y=fix(x*90/409);
for i=1:7
while ((X1(1,Px0)<10)&&(Px0=10)&&(Px1=3
kmin=1; kmax=36;
end
index=getFinalTemp(kmin,kmax,codes,SegBw2,I); CarNum(l)=codes(index);
l=l+1;
end
% xlabel(['第三步:识别结果为: ', CarNum],'Color','b');
getFinalTemp.m 程序代码(返回最终识别的单个字符index 下标):
function [index]=getFinalTemp(minIndex,maxIndex,codes,SegBw2,numIndex)
if numIndex<3 %后五位不能出现 i 、o 字母;
for i=minIndex:maxIndex
path=strcat('template/', codes(i));
%调用 getFromLib 遍历文件夹找出同一字符最佳的模板
maxSame=getFromLib(path,SegBw2);
near(i)= maxSame; % 记录下字符与模板i同的点个数
end
else
for i=minIndex:maxIndex
% if i~=find(codes='l')&&i~=find(codes='O
if codes(i)~='l'&&codes(i)~='O'
path=strcat('template/', codes(i));
23 23
%调用 getFromLib 遍历文件夹找出同一字符最佳的模板
maxSame=getFromLib(path,SegBw2);
near(i)= maxSame; % 记录下字符与模板i同的点个数
end
end
end
nearest=max(near); % 差别最小的,不同字符模板 index=find(near==nearest); % 找出差别最小的模板的下标
getFromLib.m 程序代码(遍历单个字符模板库,返回最佳的模板):
function [maxSame]=getFromLib(path,carNum)
files=dir([path '/*.jpg']);
for i=1:length(files)
file=imread([path '/' num2str(i) '.jpg' ]);
if islogical(file)==0
filebw=im2bw(file);
else
filebw=file;
end
subImg=carNum-filebw;
% 以上相当于两幅图相减得到第三幅图 进行匹配
sameDots=subImg==0;
% 记录下字符与模板相同的点个数
sumDots=sum(sameDots(:));
arr(i)=sumDots;
end
maxSame=max(arr);
24 24
4、系统界面的实现:
界面我们小组一共分有了两个模块:
一个是父模块车牌识别系统,进行显图,定位,分割和识别的操作; 另一个是子模块是字符模块,是为了增加字符的模块进库,提高车牌的识别效率。
父模块——车牌识别系统
25 25
图一
界面分别有载入图片,车牌定位,车牌分割,车牌识别和增加字符模块五个按钮,每个
按钮对应不同的功能。
载入车牌:选择你需要识别的带有车牌的图片并显示出来在原始图片的位置。 车牌定位:内部进行定位函数对车牌进行定位,并在原图上用黄线圈出车牌相应的位置。 车牌分割:将定位好的车牌进行分割,分割出7个独立的字符模块。 车牌识别:对每个分割出来的字符进行识别,并文本输出来。
增加字符模块:点击进入子界面,进行字符模块的增加,提高车牌识别的效率。
效果如下图:
26 26
图二
子模块——字符模块
图三
字符模块分为5大部分,分别是车牌显示,选择添加模板的位置,选择要添加的模板,添加字符模块和显示字符模块。
车牌显示:将刚在父模块里车牌分割出来的图片显示在这个对应的位置上。
27 27
选择添加模板的位置:选择你需要添加的字符在图片对应的位置,如“粤”在第一位就选择“1”。
选择要添加的模板:选择你需要添加进库的字符对应的数字,字母或者文字,如要添加第一位“粤”字就选择粤“粤”字。
添加字符模板:当你选择好“选择添加模板的位置”和“选择要添加的模板”后,就可以按这个按钮确认了。如图四
显示字符模块:添加成功后你就可以点击这个按钮查看对应的某字符的字符模板库里的所有“粤”字模板了。如图五
图四
图五
28 28
四、设计结果分析
从上面结果看车牌识别成功,但有一些车牌会识别出错,所以在车牌识别过程中,数据库的建立很重要。只有数据库的准确才能检测出来的数据正确,因此,我们的系统能够在识别过程中不断丰富数据库,从而不断提高正确率。
五、设计体会
经过几周的奋战,我们的课程设计终于完成了。课程设计不仅是对所学知识的应用和体会,也是对自己能力的提高。做课程设计之前,老是觉得自己什么都没学会,什么东西都不懂,也不知道学这门课的实际用途是什么,觉得很迷茫。通过这次课程设计,才明白学习是一个长期积累的过程,在以后的工作,生活中都应该不断学习,努力提高自己的知识和综合素质。通过这次课程设计,感悟最深的是学习不能只是埋头苦读,而是要合理利用资源,老
29 29
师的建议,网上的
资料
新概念英语资料下载李居明饿命改运学pdf成本会计期末资料社会工作导论资料工程结算所需资料清单
等等。特别是在设计的过程中,组员之间不懂的大家一起讨论,听听不同的看法,学习更多的知识。还有就是知识必须通过应用才能实现其价值~有些东西以为学会了,但和真正应用起来是完全不同的,就如这次的车牌识别,想着利用常规车牌的大小定位车牌,但是真正实现起来是很难的,所以知识只有真正会用的时候才是真的学会了。这个课程设计虽然还有很多不完善的地方,但是是通过我们组一起努力奋斗,尽自己最大努力做出来的,整个设计过程中收获很多,受益匪浅。也更加明白,在今后的学习中,要多动手,多交流,特别是多和老师交流有关这方面知识的应用等等。
30 30