数字图像处理之空间滤波.docx
《数字图像处理之空间滤波.docx》由会员分享,可在线阅读,更多相关《数字图像处理之空间滤波.docx(17页珍藏版)》请在冰豆网上搜索。
数字图像处理之空间滤波
实验三、空域滤波
一、实验目的
1.了解空域滤波的方法;
2.掌握几种模板的基本原理。
二、实验内容
1.使用函数fspecial()生成几种特定的模板;
2.使用函数imfilter()配合模板对图象数据进行二维卷积;
3.比较各种滤波器的效果。
三、实验步骤
1.线性平滑(低通)滤波器
a.用 h=fspecial(‘average’) 得到的h为3×3的邻域平均模板,然后用h来对图象cameraman.tif进行平滑处理。
>>x=imread(‘cameraman.tif’);
h=fspecial(‘average’)
y=imfilter(x,h);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
b.把模板大小依次改为7×7,9×9和11×11,观察其效果有什么不同?
7×7:
9×9:
11×11:
c.改变fspecial()的参数为高斯低通模板fspecial(‘gaussian’),再以上同样的平滑处理,观察其结果。
实验结果:
相对于未进行处理的图像更加清晰
d.可以用mesh函数直观观察模板:
>>clear
h1=fspecial(‘gaussian’,100,3);
[xy]=meshgrid(1:
100);
mesh(x,y,h1);
h2=fspecial(‘gaussian’,100,10);
figure
mesh(x,y,h2)
e.对以上模板进行求和运算sum(sum(h)),其结果是否一样,试解释。
实验结果:
求和得数均为1。
B=sum(A)returnssumsalongdifferentdimensionsofanarray.
2.非线性平滑滤波器
a.中值(median)滤波器是非线性滤波器的一种,它工作原理如下:
1)将模板在图中漫游,并将模板中心与图中某个象素位置重合;
2)读取模板下各对应象素的灰度值;
3)将这些灰度值从小到大排成一列;
4)找出这些值中排在中间的1个;
5)将这个中间值赋给对应模板中心位置的象素。
b.先用imnoise()函数给图象加噪声,如对图象增加高斯白噪声
y=imnoise(x,’gaussian’)
c.对图象eight.tif添加胡椒盐噪声(salt&pepper),然后分别用前面
的均值滤波器和中值滤波器medfilt2()进行去噪声处理,比较结果。
均值滤波:
中值滤波:
思考:
用imnoise()函数分别对eight.tif添加高斯噪声及椒盐噪声,然后进行均值滤波、中值滤波,观察结果。
均值滤波:
中值滤波:
3.线性锐化滤波器
a.线性锐化滤波器的模板为h=[ -1 -1 -1;
-1 8 -1;
-1 -1 -1;]
用该模板对图象cameraman.tif进行锐化处理;
closeall;
x=imread('cameraman.tif');
h=[ -1 -1 -1;
-1 8 -1;
-1 -1 -1;]
y=imfilter(x,h);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
b.也可以fspecial('laplacian')函数得到锐化模板;
closeall;
x=imread('cameraman.tif');
h=fspecial('laplacian')
y=imfilter(x,h);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
c.另外一种有趣的作法是:
用原图象减去经过低通处理的图象,再经过灰度拉伸得到高通(锐化)的图象。
d.索贝尔(sobel)算子 h1=[-1 0 1;
-2 0 2;
-1 0 1;]
h2=[1 2 1;
0 0 0;
-1 -2 -1;]
分别使用以上算子对图象进行处理可以得到图象的边缘。
x=imread('cameraman.tif');
h1=[-1 0 1;
-2 0 2;
-1 0 1;]
y=imfilter(x,h1);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
closeall;
x=imread('cameraman.tif');
h2=[1 2 1;
0 0 0;
-1 -2 -1;]
y=imfilter(x,h2);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
思考:
1、 使用sobel算子对图像进行锐化处理,得出类似下图的结果。
closeall;
x=imread('cameraman.tif');
h=fspecial('average')
y=imfilter(x,h);
h1=[1 2 1;
0 0 0;
-1 -2 -1;]
h2=[-1 0 1;
-2 0 2;
-1 0 1;]
h3=[-1 -2 -1;
0 0 0;
1 2 1;]
h4=[1 0 -1;
2 0-2;
1 0 -1;]
k1=imfilter(y,h1);
k2=imfilter(y,h2);
k3=imfilter(y,h3);
k4=imfilter(y,h4);
k=double(k1)+double(k2)+double(k3)+double(k4);
m=uint8(k/4);
c=imadjust(m,[00.5],[]);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(c)
2、 写出步骤3–c的具体命令与结果。
即用原图象减去经过低通处理的图象,再经过灰度拉伸得到高通(锐化)的图象。
closeall;
x=imread('cameraman.tif');
h=fspecial('average')
y=imfilter(x,h);
k1=double(x)-double(y);
k2=uint8(k1);
m=imadjust(k2,[00.2],[]);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(m)
进阶题:
编写m文件,实现图像与模板的卷积。
y=imfilter(x,h);
subplot(1,2,1)
functiona=myconv(b,c)
bs=size(b);
cs=size(c);
i=any(bs-cs);
ifi
error('error')
end
i=any(~(bs-1));
if~i
error('error')
end
ko=0;
ifbs
(1)>bs
(2)
b=b';
c=c';
ko=1;
end
bs=size(b);
cs=size(c);
ss=2*bs
(2)-1;
a=zeros(1,ss);
fori=1:
cs
(2)
q=zeros(1,i-1);
p=zeros(1,ss-cs
(2)+1-i);
ba=[q,c,p];
ma=b(i)*ba;
a=a+ma;
end
ifko
a=a';
end
end
四、实验心得与体会
通过这次实验,我学会并了解了许多有关数字图像处理方面的知识。
以前只是看着课本上的内容学习,对很多知识只是生分的了解,但是不懂得如何应用,通过做实验,自己动手,对图像做一系列的处理和变换,体会到了各种参数对数字图像的影响。
通过此次实验也发现了自己的而许多问题,在对于MATLAB软件的应用上面我还有许多不足,尤其是对如何编写M文件方面很难掌握,仍有待加强。
四、实验报要求
1、按照实验步骤做实验;
2、记录实验结果,并作出总结;
3、按照实验报告格式写出报告。