matlab 车牌号码识别程序代码 下载本文

内容发布更新时间 : 2024/5/6 22:26:15星期一 下面是文章的全部内容请认真阅读。

while ((Y1(PY2,1)>=50)&&(PY2

IY=I(PY1:PY2,:,:); X1=zeros(1,x); for j=1:x

for i=PY1:PY2 if(I6(i,j,1)==1)

X1(1,j)= X1(1,j)+1; end end end

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

%%%%%%%求的车牌的列起始位置和终止位置%%%%%%%%% PX1=1;

while ((X1(1,PX1)<3)&&(PX1

while ((X1(1,PX2)<3)&&(PX2>PX1)) PX2=PX2-1; end PX1=PX1-1; PX2=PX2+1; %分割出车牌图像% dw=I(PY1:PY2,PX1:PX2,:);

subplot(3,2,3),imshow(dw),title('定位剪切后的彩色车牌图像')

% 4.2 车牌字符分割

% 确定车牌位置后下一步的任务就是进行字符切分分离出车牌号码的全部字符图像。

if isrgb(dw)

I1 = rgb2gray(dw); %将RGB图像转化为灰度图像 else I1=dw; end

g_max=double(max(max(I1))); g_min=double(min(min(I1)));

T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值 [m,n]=size(I1);% d:二值图像 %h=graythresh(I1); I1=im2bw(I1,T/256); subplot(3,2,4);

imshow(I1),title('二值化车牌图像');

I2=bwareaopen(I1,20); subplot(3,2,5);

imshow(I2),title('形态学滤波后的二值化图像');

[y1,x1,z1]=size(I2); I3=double(I2); TT=1;

%%%%%%%去除图像顶端和底端的不感兴趣区域%%%%% Y1=zeros(y1,1); for i=1:y1 for j=1:x1

if(I3(i,j,1)==1) Y1(i,1)= Y1(i,1)+1 ; end end end Py1=1; Py0=1;

while ((Y1(Py0,1)<20)&&(Py0

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

I2=I2(Py0:Py1,:,:); subplot(3,2,6);

imshow(I2),title('目标车牌区域');

%%%%%% 分割字符按行积累量%%%%%%% X1=zeros(1,x1); for j=1:x1 for i=1:y1

if(I3(i,j,1)==1) X1(1,j)= X1(1,j)+1; end end end figure(5);

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

Px0=1; Px1=1;

%%%%%%%%%%%%分割字符%%%%%%%%%%%%%%%%%% for i=1:7

while ((X1(1,Px0)<3)&&(Px0

while (((X1(1,Px1)>=3)&&(Px1

Z=I2(:,Px0:Px1,:); switch strcat('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 figure(3);

subplot(1,7,i); imshow(Z);

Px0=Px1; End

4.3 车牌字符识别

字符识别方法主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法是首先将分割后的字符二值化,并将其尺寸缩放为字符数据库中模板的大小,然后与所有模板进行匹配,最后选取最佳匹配作为结果。建立数字库对该方法在车牌识别过程中很重要, 数字库准确才能保证检测出的数据正确。基于人工神经元网络的算法有两种,一种是先对特征提取待识别字符,然后用所获得的特征训练神经网络分配器;另一种是直接将待处理图像输入网络由网络自动实现特征提取直至识别结果。在本程序中用基于人工神经元网络识别车牌字符。在车牌字符识别部分, 字符集中包含约50个汉字, 26个大写英文字母及10个阿拉伯数字。总的字符样本并不太多。

4.3.1 构造训练样本如下图所示的数字和字母,

将样本进行归一化为50X20大小,再将图像按列转换成一个1000X1的行向量,将上述18个图像的样本排列在一起构成1000X18的矩阵样本,尽可能多的采集汽车图像提取车牌,部分切分出车牌字符,构造出更多1000X18的矩形样本,用构造好的样本库对神经网络进行训练。

function inpt = pretreatment(I)

%YUCHULI Summary of this function goes here % Detailed explanation goes here if isrgb(I)

I1 = rgb2gray(I); else