图像处理指导书五.docx
- 文档编号:25003210
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:16
- 大小:266.11KB
图像处理指导书五.docx
《图像处理指导书五.docx》由会员分享,可在线阅读,更多相关《图像处理指导书五.docx(16页珍藏版)》请在冰豆网上搜索。
图像处理指导书五
《多媒体通信技术》
实验指导书
唐山学院信息与控制工程实验教学中心
2015年3月
实验五车牌定位
一.实验原理
在matlab环境下,经过图像预处理技术(灰度化、二值化、边缘化、腐蚀、连通、滤波),再配合投影法来定位所有可能为待测车牌边缘的像素;在这些候选的像素中,再进一步限制其像素点数并利用车牌的长宽比例大约保持一定值的事实,便可以精确地取得正确的车牌区域,以实现车牌定位。
二.Matlab中图像的基本操作
1、图像的变换
①fft2:
fft2函数用于数字图像的二维傅立叶变换。
②ifft2:
:
ifft2函数用于数字图像的二维傅立叶反变换,如:
i=imread(filename);
j=fft2(i);
k=ifft2(j);
2、模拟噪声生成函数和预定义滤波器
①imnoise:
用于对图像生成模拟噪声,如:
i=imread(filename);
j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声
②fspecial:
用于产生预定义滤波器,如:
h=fspecial('sobel');%sobel水平边缘增强滤波器
h=fspecial('gaussian');%高斯低通滤波器
h=fspecial('laplacian');%拉普拉斯滤波器
h=fspecial('log');%高斯拉普拉斯(LoG)滤波器
h=fspecial('average');%均值滤波器
2、图像的增强
①直方图:
imhist函数用于数字图像的直方图显示。
②直方图均化:
histeq函数用于数字图像的直方图均化。
③对比度调整:
imadjust函数用于数字图像的对比度调整。
④对数变换:
log函数用于数字图像的对数变换。
⑤基于卷积的图像滤波函数:
filter2函数用于图像滤波。
⑥线性滤波:
利用二维卷积conv2滤波。
⑦中值滤波:
medfilt2函数用于图像的中值滤波。
⑧锐化
(1)利用Sobel算子锐化图像,如:
i=imread(filename);
h=[1,2,1;0,0,0;-1,-2,-1];%Sobel算子
j=filter2(h,i);
(2)利用拉氏算子锐化图像,如:
i=imread(filename);
j=double(i);
h=[0,1,0;1,-4,0;0,1,0];%拉氏算子
k=conv2(j,h,'same');
m=j-k;
3、图像边缘检测
①sobel算子如:
i=imread(filename);
j=edge(i,'sobel',thresh)
②prewitt算子如:
i=imread(filename);
j=edge(i,'prewitt',thresh)
③roberts算子如:
i=imread(filename);
j=edge(i,'roberts',thresh)
④log算子如:
i=imread(filename);
j=edge(i,'log',thresh)
⑤canny算子如:
i=imread(filename);
j=edge(i,'canny',thresh)
⑥Zero-Cross算子如:
i=imread(filename);
j=edge(i,'zerocross',thresh)
4、形态学图像处理
①膨胀:
是在二值化图像中“加长”或“变粗”的操作,函数imdilate执行膨胀运算,如:
a=imread(filename);%输入二值图像
b=[010;111;010];
c=imdilate(a,b);
②腐蚀:
函数imerode执行腐蚀,如:
a=imread(filename);%输入二值图像
b=strel('disk',1);
c=imerode(a,b);
③开运算:
先腐蚀后膨胀称为开运算,用imopen来实现,如:
a=imread(filename);
b=strel('square',2);
c=imopen(a,b);
④闭运算:
先膨胀后腐蚀称为闭运算,用imclose来实现,如:
a=imread(filename);
b=strel('square',2);
c=imclose(a,b);.
对于车牌定位系统,需要使用到的图像处理操作有:
灰度化、二值化、边缘化、腐蚀、连通、滤波。
三.流程图
车牌定位过程的流程图如下:
1、载入图片。
车牌记录图片一般都是以jpeg格式保存,故本次设计读取的图片格式均为jpeg格式,如为其他格式,可先行将格式转换成jpeg格式。
操作指令:
[namefile,pathname]=uigetfile('*.jpg','Selectimage');
ifnamefile~=0
I=imread(strcat(pathname,namefile));
imshow(I);
end
2、灰度化。
车牌图片一般为彩色图片,故不应该再使用im2bw函数,这里使用rgb2gray函数对彩色的图像进行灰度化。
3、边缘化。
前面已经介绍给很多图像边缘检测的方法,本次设计中才用Robert算子对车牌图像进行边缘化。
具体命令为:
I2=edge(I1,'robert',0.15,'both');
4、腐蚀。
图像的腐蚀操作指令为imerode。
5、连通。
这里我们可以使用一个开操作进行图像的连通。
具体命令为:
se=strel('rectangle',[25,25]);
I4=imclose(I3,se);
6、滤波。
在前面的一些列操作之后图像可能会存在多个符合“车牌”要求的区域或者其他一些干扰信息,我们需要将之排除。
滤波操作便可以达到要求。
可以使用中值滤波,不过在本次设计总将直接使用bwareaopen函数对图像进行滤波操作。
7、定位。
前面的操作都完了之后最后一步的定位便可以开始了。
使用投影判断法可以精确的得出车牌的具体位置并将之显示出来。
对于有些图片可能存在车牌倾斜的现象,这里不再做深入研究。
在定位过程预留了一些车牌信息空间以便于车牌倾斜的修正。
四.程序源代码
源程序代码及图形
(1)I=imread('yuan.bmp');
figure;
subplot(2,2,1);
imshow(I);
title('原图');
I1=rgb2gray(I);%图像灰度化
subplot(2,2,2);
imshow(I1);
title('灰度化图');
m2=medfilt2(I1,[5,5]);
subplot(2,2,3);
imshow(m2);
title('中值滤波');
w2=wiener2(I1,[5,5]);%维纳滤波
subplot(2,2,4);
imshow(w2);
title('维纳滤波');
(2)图像二值化
fmax1=double(max(max(I1)));
fmin1=double(min(min(I1)));
level=(fmax1-(fmax1-fmin1)/3)/255;
bw2=im2bw(I1,level);
bw22=double(bw2);
figure,imshow(bw22),title('图像二值化');
(3)图像算法处理
lubo=edge(bw22,'log');
figure;
subplot(2,2,1);
imshow(bw2);title('Log算子边缘检测');%图像边缘检测
bg1=imclose(lubo,strel('rectangle',[1,33]));
subplot(2,2,2),imshow(bg1);title('图像闭运算[1,33]');
bg3=imopen(bg1,strel('rectangle',[1,33]));
subplot(2,2,3),imshow(bg3);title('图像开运算[1,33]');
bg2=imopen(bg3,strel('rectangle',[12,1]));
subplot(2,2,4),imshow(bg2);title('图像开[15,1]');
(4)图像标记
[L,num]=bwlabel(bg2,8);%标注二进制图像中已连接的部分
%Feastats=imfeature(L,'basic');%计算图像区域的特征尺寸
%Area=[Feastats.Area];%区域面积
%BoundingBox=[Feastats.BoundingBox];%[xywidthheight]车牌的框架大小
%RGB=label2rgb(L,'spring','k','shuffle');%标志图像向RGB图像转换
figure,imshow(L);title('图像标记');%输出框架的彩色图像
(5)形态滤波
I5=bwareaopen(L,1000);%去除聚团灰度值小于2000的部分
figure,imshow(I5),title('形态滤波后图像');
(6)[y,x,z]=size(I5);
I6=double(I5);
Y1=zeros(y,1);
fori=1:
y
forj=1:
x
if(I6(i,j,1)==1)
Y1(i,1)=Y1(i,1)+1;
end
end
end
[tempMaxY]=max(Y1);
figure();
subplot(3,2,1),plot(0:
y-1,Y1),title('行方向像素点灰度值累计和’),xlabel('行值'),ylabel('像素');
PY1=MaxY;
while((Y1(PY1,1)>=50)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while((Y1(PY2,1)>=50)&&(PY2 PY2=PY2+1; end IY=I(PY1: PY2,: : ); X1=zeros(1,x); forj=1: x fori=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 PX1=PX1+1; end PX2=x; 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('定位剪切后的彩色车牌图像') ifisrgb(dw) II1=rgb2gray(dw);%将RGB图像转化为灰度图像 elseII1=dw; end g_max=double(max(max(II1))); g_min=double(min(min(II1))); T=round(g_max-(g_max-g_min)/3);%T为二值化的阈值 [m,n]=size(II1);%d: 二值图像 %h=graythresh(I1); II=im2bw(II1,T/256); subplot(3,2,4); imshow(II),title('二值化车牌图像'); I2=bwareaopen(II,20); subplot(3,2,5); imshow(I2),title('形态学滤波后的二值化图像'); [y1,x1,z1]=size(I2); I3=double(I2); TT=1; %%%%%%%去除图像顶端和底端的不感兴趣的区域%%%%% Y1=zeros(y1,1); fori=1: y1 forj=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 Py0=Py0+1; end Py1=Py0; while((Y1(Py1,1)>=20)&&(Py1 Py1=Py1+1; end I2=I2(Py0: Py1,: : ); subplot(3,2,6); imshow(I2),title('目标车牌区域'); (7)%%%%%%分隔字符按行累计值%%%%%%% X1=zeros(1,x1); forj=1: x1 fori=1: y1 if(I3(i,j,1)==1) X1(1,j)=X1(1,j)+1; end end end figure; plot(0: x1-1,X1),title('列方向像素点灰度值来计和'),xlabel('列值'),ylabel('累计像素量'); Px0=1; Px1=1; (8)%%%%%%%%%%%%分割字符%%%%%%%%%%%%%%%%%% fori=1: 7 while((X1(1,Px0)<3)&&(Px0 Px0=Px0+1; end Px1=Px0; while(((X1(1,Px1)>=4)&&(Px1 Px1=Px1+1; end Z=I2(: Px0: Px1,: ); switchstrcat('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(8); subplot(1,7,i); imshow(Z); Px0=Px1; end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理 指导书