车牌定位分割识别程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

附录A

%主函数

function [d]=main(jpg)

close all

clc

I=imread('car1.jpg');

figure(1),imshow(I);title('原图')

I1=rgb2gray(I); %将RGB图形或色图矩阵转换成灰度图

figure(2),subplot(1,2,1),imshow(I1);title('灰度图');

figure(2),subplot(1,2,2),imhist(I1);title('灰度图直方图');

I2=edge(I1,'robert',0.15,'both');%提取I1的边缘,利用robert算子

figure(3),imshow(I2);title('robert算子边缘检测')

se=[1;1;1]; %结构矩阵,用于图像的腐蚀

I3=imerode(I2,se);%以图像I2和结构元素SE为参数调用imerode函数进行腐蚀操作

figure(4),imshow(I3);title('腐蚀后图像');

se=strel('rectangle',[25,25]);

I4=imclose(I3,se); %形态学中的闭运算,se为结构元素

figure(5),imshow(I4);title('平滑图像的轮廓');

I5=bwareaopen(I4,2000);

figure(6),imshow(I5);title('从对象中移除小对象');

[y,x,z]=size(I5); %读取I5的大小,行列页

myI=double(I5); %将I5元素转为double型

tic %计时开始

Blue_y=zeros(y,1); %给蓝色像素个数赋初始值0

for i=1:y

for j=1:x % 这两行是循环,先行,再列

if(myI(i,j,1)==1) % 如果I5第一页中的元素为1的话,则是蓝色像素

Blue_y(i,1)= Blue_y(i,1)+1;%蓝色像素点统计

end

end

end

[temp MaxY]=max(Blue_y);%Y方向车牌区域确定,temp为最大值,MaxY为最大值位置

PY1=MaxY; %最大值的位置赋给PY1

while ((Blue_y(PY1,1)>=5)&&(PY1>1))

PY1=PY1-1;

end % 这个循环是在Y方向,向上求离最大值最近的像素小于5的点的位置,存在PY1中

PY2=MaxY;

while ((Blue_y(PY2,1)>=5)&&(PY2

PY2=PY2+1;

end %这个循环是在Y方向,向下求离最大值最近的像素小于5的点的位置,存在PY2中

IY=I(PY1:PY2,:,:); %截取PY1和PY2之间的像素矩阵,X方向暂不限制。

%因为车牌是个矩形,%是原图像中矩阵的一部分,所以要将其提取出来,

%先确定Y方向上取值的区间,再确定X方向。

%%%%%% X方向%%%%%%%%%

Blue_x=zeros(1,x);%进一步确定x方向的车牌区域

for j=1:x

for i=PY1:PY2 %简单起见,只取PY1到PY2,减少计算量

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

Blue_x(1,j)= Blue_x(1,j)+1;

end

end

end

PX1=1;

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

PX1=PX1+1;

end

PX2=x;

while ((Blue_x(1,PX2)<3)&&(PX2>PX1))

PX2=PX2-1;

end %这里和求Y方向的方法一样

PX1=PX1-1;%对车牌区域的校正

PX2=PX2+1;

dw=I(PY1:PY2-8,PX1:PX2,:); %车牌矩阵存在变量dw中

t=toc; % 计时结束,输出运行时间

figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域');

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

imwrite(dw,'dw.jpg');

[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像');

jpg=strcat(filepath,filename);

a=imread('dw.jpg');

b=rgb2gray(a);

imwrite(b,'1.车牌灰度图像.jpg');

figure(8);subplot(3,2,1),imshow(b),title('1.车牌灰度图像')

g_max=double(max(max(b)));

g_min=double(min(min(b)));

T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值

[m,n]=size(b);

d=(double(b)>=T); % d:二值图像

imwrite(d,'2.车牌二值图像.jpg');

figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像')

figure(8),subplot(3,2,3),imshow(d),title('3.均值滤波前')

% 滤波

h=fspecial('average',3);

d=im2bw(round(filter2(h,d)));

imwrite(d,'4.均值滤波后.jpg');

figure(8),subplot(3,2,4),imshow(d),title('4.均值滤波后')

% 某些图像进行操作

% 膨胀或腐蚀

% se=strel('square',3); % 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀

% 'line'/'diamond'/'ball'...

se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵

[m,n]=size(d);

if bwarea(d)/m/n>=0.365

d=imerode(d,se);

相关文档
最新文档