图像处理车牌识别系统设计实验报告书

更新时间:2023-04-14 20:19:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

图像处理车牌识别系统设计实验报告书图像处理

班别: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

end

y2=roughY;

rowArray=zeros(1,col);

for i=1:col

for j=y1:y2

if graynew(j,i)==1

rowArray(1,i)=rowArray(1,i)+1;

end

end

end

[maxcount maxIndex]=max(rowArray);

roughX=maxIndex;

while ((rowArray(1,roughX)>=5)&&(roughX>1))

roughX=roughX-1;

end

x1=roughX;

roughX=maxIndex;

while ((rowArray(1,roughX)>=5)&&(roughX

roughX=roughX+1;

end

x2=roughX;

dw=img(y1:y2,x1:x2,:);

greenframe=drawframe(img,y1,y2,x1,x2);

imwrite(greenframe,'imgAfterLocation/greenframe.jpg'); imwrite(dw,'imgAfterLocation/dw.jpg');

9 9

2、字符分割:

传统的字符分割方法有投影法、模板匹配法、聚类分析法。由于投影法比较准确、编程较简单,且易于实际操作,能满足在复杂环境下,所以我们采用的是投影法分割车牌字符。

车牌分割总流程图:

各部分代码实现和运行效果:

10 10

2.1、对读入图像进行预处理操作

I=imread('imgAfterLocation/dw.jpg');%读取图像 I1 = rgb2gray(I);%彩色图像转化为灰度图像 T=graythresh(I1);%找到灰度图像的阈值

[y,x,z]=size(I1);%计算I1各维的大小 Se=strel('disk',fix(y/45));%创建一个平坦的圆盘形结构元素

I2=imopen(I1,Se);%取圆盘形的开运算 subplot(2,2,3);%图一的第三幅图imshow(I2),title('开运算后图像');

一个平坦的菱形结构元素 Se=strel('diamond',fix(y/140));%创建

I3=imclose(I2,Se);%取菱形结构的闭运算 I4=double(I3);%变为双精度

11 11

2.2图像校正

代码:

bw1=edge(I1,'sobel', 'horizontal');%用Sobel水平算子对图像边化

figure,imshow(bw1) bw1=imcrop(bw1,[0 0 500 100]);%对图像进行剪切,保留图像的 %一条直

线,减小运算量

figure,imshow(bw1) theta=0:179;%定义theta角度范围

r=radon(bw1,theta);%对图像进行Radon变换 figure,imshow(r)

[m,n]=size(r);

c=90;

for i=1:m

for j=1:n

if r(1,1)

r(1,1)=r(i,j);

c=j;

end

end

end %检测Radon变换矩阵中的峰值所对应的列坐标rot=90-c;%确定旋转角度

12 12

A=imrotate(I1,rot,'crop');%对图像进行旋转矫正

2.3计算行方向的像素,用来去除行方向上的边框代码:

计算行像素:

Y1=zeros(y,1);

for i=1:y

for j=1:x

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

Y1(i,1)= Y1(i,1)+1;%计算I3第j列有几个一

end

end

end

figure(2);

plot(Y1,0:y-1),title('行方向像素点灰度值累计和'),xlabel('累计像素量'),ylabel('行');

13 13

去除行方向边框:

Py0=fix(y/2);

Py1=fix(y/2)+1;

while ((Y1(Py0,1)>=30)&&(Py0>2))

Py0=Py0-1;%找到去除边框后上边的位置

end

while ((Y1(Py1,1)>=30)&&(Py1

Py1=Py1+1;%找到去除边框后下边的位置

end

Z1=I4(Py0:Py1,:,:);%将二值图像上下边框去除

figure(3);

imshow(Z1),title('将二值图像上下边框去除后图像');

14 14

2.4计算列方向的像素,用来去除垂直方向上的边框

代码:

[y,x,z]=size(Z1);%计算此时图像的大小计算列像素

X1=zeros(1,x);

for j=1:x

for i=1:y

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

X1(1,j)= X1(1,j)+1;%计算I3第j列有几个一

end

end

end

figure(4);

plot(0:x-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('累计像素');

去除垂直边框

x1=fix(x/2)+1;

for i=1:5

15 15

while (i~=5)

while ((X1(1,x1)>=15)&&(x1

x1=x1+1;%找到去除边框后右边的位置

end

i=i+1;

while ((X1(1,x1)<15)&&(x1

x1=x1+1;%从车牌中间开始寻找字符间隙,直到找到第四个间隙%为止,即找到去除边框后车牌右边的位置

end

end

end

x0=fix(x*45/440);%找到第一个字符的位置

for i=1:2

while (i~=2)

while ((X1(1,x0)>=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再次计算列方向的像素,用来去除车牌上的圆点

代码:

本文来源:https://www.bwwdw.com/article/sy9q.html

Top