MATLAB车牌识别过程文档格式.docx

上传人:b****6 文档编号:20409151 上传时间:2023-01-22 格式:DOCX 页数:13 大小:733.83KB
下载 相关 举报
MATLAB车牌识别过程文档格式.docx_第1页
第1页 / 共13页
MATLAB车牌识别过程文档格式.docx_第2页
第2页 / 共13页
MATLAB车牌识别过程文档格式.docx_第3页
第3页 / 共13页
MATLAB车牌识别过程文档格式.docx_第4页
第4页 / 共13页
MATLAB车牌识别过程文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

MATLAB车牌识别过程文档格式.docx

《MATLAB车牌识别过程文档格式.docx》由会员分享,可在线阅读,更多相关《MATLAB车牌识别过程文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

MATLAB车牌识别过程文档格式.docx

Blue_y=zeros(y,1);

fori=1:

y

forj=1:

xif((myI(i,j,1)<

=48)&

&

((myI(i,j,2)<

=100)&

(myI(i,j,2)>

=40))&

((myI(i,j,3)<

=200)&

(myI(i,j,3)>

=80)))

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

%统计蓝色像素点

end

end

[tempMaxY]=max(Blue_y);

%

PY1=MaxY;

%

while((Blue_y(PY1,1)>

=Y_threshlow)&

(PY1>

1))%

PY1=PY1-1;

PY2=MaxY;

while((Blue_y(PY2,1)>

(PY2<

y))%Õ

Ò

µ

½

Í

¼

Æ

¬

É

Ï

±

ß

ç

PY2=PY2+1;

end

PY1,PY2figure

(2),subplot(1,2,1),plot(Blue_y),title('

行方向的蓝色像素点统计'

);

gridon

IY=I(PY1:

:

figure

(2),subplot(1,2,2),imshow(IY),title('

行方向车牌区域'

运行结果如下:

同理可得X轴方向的车牌区域:

两者结合可提取出完整的车牌区域:

7.3.3车牌图像灰度化

由于车牌底色跟上面的字符的颜色对比度很大,所以将RGB图像转化为灰度图时,车牌底色跟字符的灰度值也会相差很大,这样就可以很明显的显现出车牌区域,便于后续处理。

本系统使用的是MATLAB内的灰度图转换函数rgb2gray(),其图像灰度值计算公式为:

G=0.299R+0.578G+0.114B;

程序源代码为:

bw=rgb2gray(I);

figure(6),imshow(bw);

title(‘灰度图像’);

运行结果为:

7.3.4车牌倾斜校正

由于摄像头拍摄角度的不同,可能使拍摄的车牌图片也发生倾斜,为了图像的后续处理以及很好的去识别字符,需对提取的带有倾斜的车牌图像进行校正。

本系统采用的办法是,首先用radon算法进行倾斜角度计算,然后根据倾斜角对图片精选修正,从而得到水平方向一致的图片,利于后期的分割识别。

代码如下:

I=edge(I);

%

theta=1:

180;

[R,xp]=radon(I,theta);

[I,J]=find(R>

=max(max(R)));

bw=imrotate(bw,qingxiejiao,'

bilinear'

'

crop'

figure,imshow(bw);

title('

车牌倾斜'

7.3.5车牌图像处理

对车牌灰度图像的处理主要有二值化、腐蚀、去除干扰、膨胀、擦除、取反,都可以直接使用图像工具箱的图像处理函数。

经过以上处理过程后可以得到带边框的白底黑字的车牌图片,但是由于还存在车牌的边框,需要对其进行二次的裁剪,裁剪方法跟上面阐述的提取彩色车牌方法相似,先将图片水平垂直投影,然后统计黑色像素点,找到字符边缘进行裁剪,得到除去边框的白底黑字的车牌照。

SE=ones(3,3);

bw=im2bw(bw);

二值化'

bw=imerode(bw,SE);

腐蚀'

bw=bwmorph(bw,'

clean'

inf);

hbreak'

spur'

bw=imdilate(bw,SE);

膨胀'

bw=bwareaopen(bw,threshold);

擦除'

bw=~bw;

颜色取反'

bw=touying(bw);

figure;

imshow(bw);

投影'

运行结构如下:

7.3.6字符分割

对二次裁剪的车牌图像进行水平垂直投影,计算水平垂直峰,检测合理的字符高宽比.可用与区域分割相同的方法进行峰值的删除和合并.但在字符切割时,往往由于阈值取得不好,导致字符切割不准确,针对这种情况,可以由车牌格式的先验知识,对切割出的字符宽度进行统计分析,用以指导切割。

[y,x]=size(imfenge);

histogram=sum(~imfenge);

k=1;

forh=1:

x-1

if((histogram(1,h)<

=shedingyuzhi)&

(histogram(1,h+1)>

shedingyuzhi))||((h==1)&

histogram(1,h)>

shedingyuzhi)

fenge(1,k)=h;

k=k+1;

elseif((histogram(1,h)>

shedingyuzhi)&

(histogram(1,h+1)<

=shedingyuzhi))||((h==x-1)&

fenge(1,k)=h+1;

k=k-1;

if(sum(histogram(1,fenge(1,1):

fenge(1,2)))<

ganrao)||((fenge(1,2)-fenge(1,1))<

(fenge(1,4)-fenge(1,3))/2)

fori=3:

k

fenge(1,i-2)=fenge(1,i);

[mn]=size(fenge);

fenge=fenge(1,1:

14);

7.3.7字符识别

目前字符识别方法主要有神经网络识别法和模板匹配法。

人工神经网络是模拟人脑思维功能和组织建立起来的数学模型,但总体来说其应用还是相对复杂的。

模板匹配法是将从待识别的图象或图象区域f(i,j)中提取的若干特征量与模板T(i,j)相应的特征量逐个进行比较,计算它们之间规格化的互相关量,其中互相关量最大的一个就表示期间相似程度最高,可将图象归于相应的类。

也可以计算图象与模板特征量之间的距离,用最小距离法判定所属类。

本系统使用的是较为简单的模板匹配法来识别字符的。

首先将待识别字符的图像进行归一化处理,使其长宽与模板字符图像长宽一致,模板使用的是80*160的图片尺寸,待识别字符图像归一化代码为:

xiuzhenghanzi=imresize(han_zi,[80160],'

xiuzhengzimu=imresize(zi_mu,[80160],'

xiuzhengzm_sz_1=imresize(zm_sz_1,[80160],'

xiuzhengzm_sz_2=imresize(zm_sz_2,[80160],'

xiuzhengzm_sz_3=imresize(zm_sz_3,[80160],'

xiuzhengzm_sz_4=imresize(zm_sz_4,[80160],'

xiuzhengzm_sz_5=imresize(zm_sz_5,[80160],'

待识别字符图像与模板字符图像长宽一致以后,就可以用带识别字符图像与模板字符图像进行匹配,具体过程为:

字符匹配代码为:

comp=[];

forn=1:

num_letras

sem=corr2(xiuzhengzifu,mubanzifu);

%利用corr2()函数求待识别字符图像与模板图像的相关系数

comp=[compsem];

%将相关系数的值赋给comp

xiangguan=find(comp==max(comp));

%找出相关系数最大的值

msgbox(shibiejieguo,'

识别结果'

%显示识别结果

7.3.8语音播报识别结果

对字符正确识别之后,用事先对对每一个字符的录音根据对应字符顺序播放。

在对车牌区域识别出错、字体分割出错时程序暂停,并有语音提醒。

7.4数据存储与数据库查询

本系统使用的是MicrosoftSQLServer2000来实现车牌信息处理的。

数据存储主要是车牌信息的存储和出入时间存储,实现车辆信息自动登记;

数据库查询主要是在数据库中查找识别的车牌信息,然后由计算机自动判别是被车辆是不是属于所属地区。

首先是建立数据库,数据库名设为Study,接着需要在数据库中建立两个表Churujilu和Zhuceyonghu,表Churujilu主要是存储识别的车辆信息和相应的出入时间,表Zhuceyonghu主要是所属地区车辆信息的登记,包括车牌号和车主,用于查询。

然后是建立ODBC数据源,命名为DBTEST,使用ODBC数据源来连接数据库,连接数据库代码为:

sourceName='

DBTEST'

;

%获取数据源

Timeout=logintimeout(5);

%允许登陆连接时间最长为5s

conn=database(sourceName,'

sa'

'

'

%获取数据库连接对象

fprintf('

\n数据库连接状态\n'

disp(ping(conn));

%显示测试数据库连接状态

再然后是将车牌信息和当时时间一起写入数据库,写入数据时使用的是insert()函数,具体代码如下:

insert(conn,'

Study.dbo.Churujilu'

{'

Chepaihao'

Shijian'

},{shibiejieguo,datestr(now)});

%将识别结果和当时的时间分别存入到Study数据库的Churujilu表中的Chepaihao和Shijian两列中

当识别完车牌“桂APC322”后,将车牌信息和当时时间写入数据库的Churujilu表中,实现车辆信息自动登记,结果如图:

最后是在数据库中查询是否存在识别车辆的注册登记信息,使用的是SQL语句进行查询。

如果查询到与识别结果相同的车牌号,则返回其查询到的车辆信息,并弹出对话框“欢迎光临”,表示查找到相应信息;

如果没有查询到,则MATLAB返回为字符串“NoData”,并弹出对话框“请下车登记”,表示没有查找到与识别车辆相匹配的信息。

curs=exec(conn,['

selectChepaifromStudy.dbo.ZhuceyonghuwhereChepai='

'

shibiejieguo'

]);

%在Study数据库的Zhuceyonghu表中查找与识别结果相同的车牌号

e=fetch(curs);

%用fetch()函数将查询结果从数据库传给MATLAB中的矩阵e

a=e.data;

%把矩阵e中的数据全部传给a

a=char(a);

%把a转化为char型

disp(a);

%在MATLAB中显示a里面的所有数据,即查询结果信息

ifstrcmp('

NoData'

a)%将查询返回的信息与识别结果比较

msgbox('

请下车登记'

查询结果’);

%如果没有查询到则显示“请下车登记”

else

欢迎光临'

%如果查询到识别车辆则显示“欢迎光临”

车牌“桂APC322”识别完后,查询结果为:

因为在前面数据库的Zhuceyonghu表中,已有此车牌的注册登记信息,所以查询结果为“欢迎光临”。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1