MATLAB大作业 下载本文

的字符了。

问题求解: matlab代码:

主函数

function [d]=main(jpg) close all clc

I=imread('Car.jpg');%读入车牌图像Car.jpg I1=rgb2gray(I);

I2=edge(I1,'roberts',0.15,'both'); se=[1;1;1]; I3=imerode(I2,se);

se=strel('rectangle',[25,25]); I4=imclose(I3,se); I5=bwareaopen(I4,2000);

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

[y,x,z]=size(I5);%图像以(y,x,z)表达灰度集,x,y为坐标,z为对应位置的值 myI=double(I5);%转化为双精度,便于确定范围

tic % 测定算法执行的时间,开始计时 Blue_y=zeros(y,1); for i=1:y for j=1:x

if(myI(i,j,1)==1) % 寻找y轴方向的白色区域

Blue_y(i,1)= Blue_y(i,1)+1; % 是蓝色区域的则进行计数 end end end

[temp MaxY]=max(Blue_y);%Y方向车牌区域确定 temp(最多点数):所有行中,最多的累积 PY1=MaxY;

while ((Blue_y(PY1,1)>=5)&&(PY1>1)) PY1=PY1-1; end %Y轴方向的上限 PY2=MaxY;

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

%%%%%% 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

end %确定x轴的右边界 PX2=x;

while ((Blue_x(1,PX2)<3)&&(PX2>PX1)) PX2=PX2-1; end %确定x轴的左边界 PX1=PX1-1;%对车牌区域的校正 PX2=PX2+1;

dw=I(PY1:PY2-8,PX1:PX2,:); %确定图片的截取区域 t=toc; % 读取程序的运行时间

a=imread('dw.jpg'); %读入已经截取好的图像 A=size(a);

if length(A)==3 b=rgb2gray(a); else b=a; end

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); %进行均值滤波 imwrite(d,'4.均值滤波后.jpg');

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

% 某些图像进行操作 % 膨胀或腐蚀