DIP实验报告滤波.docx
《DIP实验报告滤波.docx》由会员分享,可在线阅读,更多相关《DIP实验报告滤波.docx(17页珍藏版)》请在冰豆网上搜索。
DIP实验报告滤波
课程:
数字图像处理
课程作业实验报告
实验名称:
SpatialFilteringandMedianFiltering
实验编号:
Proj03-02
签名:
姓名:
学号:
截止提交日期:
年月日
摘要:
本次实验主要学习图像间运算增强技术和几种常用的空间滤波技术,包括平滑空间滤波器和锐化空间滤波器两大类。
其中平滑空间滤波器包括:
平滑线性滤波器和非线性滤波器(此次实验中的中值滤波器便是此类),锐化空间滤波器包括:
使用二阶微分进行图像锐化(此次实验用的是拉普拉斯算子)和使用一阶微分对图像锐化。
此次实验还通过人为添加椒盐噪声,然后通过滤波技术处理该图像,对比输出结果,总结规律。
1、技术论述
1、空间滤波机理
空间滤波器也称空间掩模、核、模板和窗口,直接作用于图像本身而完成类似的平滑。
空间滤波器由一个邻域,对该邻域包围的图像像素执行的预定义操作组成。
滤波产生一个新像素,新像素的坐标位于邻域的中心坐标,像素的值是滤波操作的结果。
滤波的中心访问输入图像中的每个像素,就产生了处理后的图像。
如果在图像像素上执行的是线性操作,则该滤波器称为线性空间滤波器。
否则,滤波器称为非线性空间滤波器。
简单举个线性滤波的例子:
使用3*3的线性滤波处理图像。
在图像中的任意一点定义为(x,y),滤波器的响应g(x,y)是滤波器的系数与由该滤波器包围的图像像素的乘积之和:
g(x,y)=w(-1,-1)f(x-1,y-1)+w(-1,0)f(x-1,y)+......+w(1,1)f(x1,y1)
很明显,滤波器的中心系数w(0,0)对准位置(x,y)的像素。
对于一个大小为m*n的模板,我们假设m=2a+1且n=2b+1,其中a,b为正整数。
一般来说,使用大小为m*n的滤波器对大小为M*N的图像进行空间滤波,可由下式表示:
其中,x和y是可变的,以便w中的每个像素可访问f中的每个像素。
2、平滑增强技术
一幅图像可能受到各种噪声的影响,包括光电转换过程中的各种噪声、量化噪声、信息传输过程中的误差等,图像的平滑处理可以减小这些噪声。
图像平滑的方法与噪声的类型有关,图像的平滑过程总是要付出一定的细节模糊的代价。
平滑研究的问题之一是:
如何在平滑掉图像中的噪声的同时,尽量保持图像的细节,即少付出一些使细节模糊的代价。
图像中常见的噪声:
1.加性噪声:
加性噪声和图像信号强度不相关g=f+n
2.乘性噪声:
乘性噪声和图像信号相关,往往随图像信号的变化而变化g=f+f*n
3.量化噪声:
是数字图像的主要噪声源。
减小该类噪声的最好方法是,采用按灰度级概
率密度函数选择量化级
4.“椒盐噪声”即图像中黑色区域中的白点
平滑模板的特点及其运算:
一般选择中心对称的模板™模板中的系数为正值或0™模板的系数之和为1(可以保持均匀亮度区域的灰度不变)。
运算方法:
采用模板与图像进行卷积运算,即用模板与对应像素点进行加权平均。
如下图
(1)是几种常用平滑模板:
图1常用平滑模板
3、锐化增强技术
锐化(高频增强)模板目的:
使轮廓模糊的图像变得轮廓清晰。
方法:
增强图像的高频成分。
说明:
图像的轮廓对应着图像中灰度变化快的区域,即对应着图像空间频率的高频部分,增强图像的轮廓就是提升图像的高频成分。
Laplace算子具有高通特性,可用来进行图像锐化。
锐化表达式如下,其中因子α用于调节锐化程度。
g(x,y)=f(x,y)-α▽2f(x,y)
锐化模板推导及说明对数字图像,微分可以用差分表示,故Laplace算子为:
▽2f(m,n)=f(m+1,n)+f(m-1,n)-2f(m,n)+f(m,n+1)+f(m,n-1)-2f(m,n)
代入锐化表达式得:
g(m,n)=(1+4α)f(m,n)-α[f(m+1,n)+f(m-1,n)+f(m,n+1)+f(m,n-1)]
其中α>0,当α越大时,图像锐化得越厉害。
而当f(m,n)与其周围像素的灰度值相等时,即在图像无轮廓区域,上述处理后还是原来的f(m,n),这时没有锐化作用。
如下图
(2),几个具体的Laplace算子模板:
图2Laplace算子模板
4、中值滤波技术
中值滤波是一种非线性信号处理方法,与其对应的中值滤波器是一种非线性滤波器。
中值滤波器在一定的条件下可以克服线性滤波器,如最小均方滤波、平均值滤波(平滑滤波)等带来的图像细节模糊,且对滤除脉冲干扰及图像扫描噪声最为有效。
由于其在实际运算过程中不需要图像的统计特性,给处理带来了不少方便。
对一些细节多,特别是点、线、尖顶细节多的图像,不宜采用中值滤波方法。
中值滤波原理:
在一维情况下,中值滤波器是一个含有奇数个像素点的窗口。
进行处理时,将位于窗口正中的像素的灰度值,用窗口内各像素的灰度值的中值代替。
设有一个一维序列f1f2…fn,取中值滤波窗口长度为奇数m=2v+1。
对上述一维序列进行中值滤波,就是从序列中相继抽出m个点fi-v…fi-1fifi+1…fi+v,其中fi为窗口中心点的值,将这些个点的值按其数值大小排序,取其序号为正中间的那个数作为其滤波输出。
用数学公式表示为:
gi=Med{fi-v…fi-1fifi+1…fi+v}。
二维中值滤波器可表示为:
gij=MedA{fij}
其中,A为窗口,{fij}为以fij为中心的数据序列。
二维中值滤波器的窗口形状和尺寸对滤波效果影响较大。
不同的图像内容和不同的应用要求,往往采用不同的窗口形状和尺寸。
常用的有线状、方形、圆形、十字形以及园环形等。
窗口尺寸一般先用3再取5逐点增大,直到其滤波效果满意为止。
二维中值滤波器使用经验:
对于有缓变的较长轮廓线物体的图像,采用方形或圆形窗口为宜。
对于包含有尖顶状物体的图像,适宜用十字形窗口。
窗口的大小以不超过图像中最小有效物体的尺寸为宜。
使用二维中值滤波器最值得注意的是,需要保持图像中有效的细线状的物体。
如果图像中点、线、尖角状细节较多,则不宜采用中值滤波。
2、实验结果及讨论
1、实验结果
实验结果如图(3)~图(8)所示:
图(3)中四幅图依次是图像的加、减、乘、除的运算结果;
图(4)是图像乘法和图像与常系数相乘的对比结果;
图(5)为使用课本图3.32的两个模板进行平滑滤波的结果;
图(6)为使用课本图3.37中C和D两个掩模进行拉普拉斯锐化增强的结果;
图(7)为使用课本图3.41中D和E两个掩模进行一阶导数锐化增强的结果;
图(8)左为图5.7(a)原图,中间为添加两次椒盐噪声后的图像,右为采用中值滤波
处理后的图像。
图3图像四种运算
图4图像乘法与常数乘法
图5平滑滤波处理结果
图6Laplace锐化处理结果
图7一阶导数锐化处理结果
图8中值滤波处理结果
2、实验讨论
从实验结果易得,当使用平滑滤波对图像处理时,总是要付出一定细节模糊的代价。
在实际的应用中因根据待处理图像的特点选择不同的滤波模板。
为了尽量减小细节模糊,在平滑以前,可以将图像的边界、轮廓提取出来,平滑以后再将其加入图像。
实验结果图(6)和图(7)是图像锐化处理的结果,锐化处理的主要目的是突出灰度的过渡部分。
图(6)运用拉普拉斯算子进行锐化,通过此变换增强了图像中灰度突变处的对比度。
中值滤波器是一种统计排序滤波器,对于处理脉冲噪声非常有效,比均值滤波器的效果更好。
实验结果图(8),便是采用中值滤波器处理呗椒盐噪声两次污染后的图像,结果比较理想,仍有部分残余斑点未滤除。
三、程序附录
functionmain()
%说明:
主函数包括三个部分:
1.图像四则运算
%2.空间滤波(平滑滤波、锐化增强)
%3.中值滤波
%第一部分:
图像的加、减、乘、除运算
ima=imread('Fig1.10(4).jpg');
imb=imread('Fig1.10(5).jpg');
im1=ima+imb;
im2=ima-imb;
im3=ima.*imb;
im4=ima./imb;
figure
subplot(2,2,1);
imshow(im1);
title('图4+图5');
subplot(2,2,2);
imshow(im2);
title('图4-图5');
subplot(2,2,3);
imshow(im3);
title('图4*图5');
subplot(2,2,4);
imshow(im4);
title('图4/图5');
k=1.5;
imz=multiply(ima,imb,0);
imd=multiply(ima,ima,k);
figure
subplot(1,3,1);
imshow(ima);
title('Fig1.10(4)原图');
subplot(1,3,2);
imshow(imz);
title('图4*图5');
subplot(1,3,3);
imshow(imd);
title(['常系数乘以图4系数K='num2str(k)]);
%第一部分结束
%第二部分:
图像平滑滤波、锐化增强
immean=imread('Fig3.38(a).jpg');
immean2=im2double(immean);
module1=ones(3)/9;
n=1;
module2=[n,2*n,n;2*n,4*n,2*n;n,2*n,n]/16/n;
imout1=imfiltermy(immean2,module1);
imout2=imfiltermy(immean2,module2);
%imout=uint8(imout);
figure
subplot(1,3,1);
imshow(immean);
title('Fig3.38(a)原图像');
subplot(1,3,2);
imshow(imout1);
title('平滑滤波后的图像a');
subplot(1,3,3);
imshow(imout2);
title('平滑滤波后的图像b');
%module1
%module2
M37c=[0,-1,0;-1,4,-1;0,-1,0];%Laplacian变换
M37d=[-1,-1,-1;-1,8,-1;-1,-1,-1];
imout37c=imfiltermy(immean2,M37c);
imout37d=imfiltermy(immean2,M37d);
imout37c=immean2-imout37c;
imout37d=immean2-imout37d;
imout37c=immean2+1*imout37c;
imout37d=immean2+1*imout37d;
figure
subplot(1,3,1);
imshow(immean);
title('Fig3.38(a)原图像');
subplot(1,3,2);
imshow(imout37c);
title('Laplacian锐化后的图像c');
subplot(1,3,3);
imshow(imout37d);
title('Laplacian锐化后的图像d');
M41d=[-1,-2,-1;0,0,0;1,2,1];%一阶导数变换
M41e=[-1,0,1;-2,0,2;-1,0,1];
imout41d=imfiltermy(immean2,M41d);
imout41e=imfiltermy(immean2,M41e);
imout41d=immean2-imout41d;
imout41e=immean2-imout41e;
imout41d=immean2+1*imout41d;
imout41e=immean2+1*imout41e;
figure
subplot(1,3,1);
imshow(immean);
title('Fig3.38(a)原图像');
subplot(1,3,2);
imshow(imout41d);
title('一阶导数锐化后的图像c');
subplot(1,3,3);
imshow(imout41e);
title('一阶导数锐化后的图像d');
%第二部分结束
%第三部分:
图像添加噪声、中值滤波
imno=imread('Fig5.07(a).jpg');
imno2=im2double(imno);
figure
subplot(1,3,1)
imshow(imno);
title('Fig5.07(a)原图');
fg=addnoise(imno2,0.2,0.2);
fz=medfilt2(fg,'symmetric');%
subplot(1,3,2);
imshow(fg);
title('二次椒盐噪声污染后图像');
subplot(1,3,3);
imshow(fz);
title('中值滤波后图像');
%第三部分结束
functionimout=multiply(ima,imb,x)
%功能:
乘法:
ima*imb和ima*x
%输入参数:
%ima:
输入图像A
%imb:
输入图像B
%x:
常系数
%输出参数:
%imout:
输出图像
%imout=ima*imbifx==0
%imout=ima*xifx!
=0
ifx==0
imout=ima.*imb;
else
imout=ima.*x;
end
end
functionimt=addnoise(ima,a,b)
%功能:
给图像添加椒盐噪声
%输入参数;
%ima:
输入图像
%a:
第一次添加椒盐噪声系数
%b:
第二次添加椒盐噪声系数
%输出参数:
%imt:
处理后的输出图像
%
%
imt=imnoise(ima,'salt&pepper',a);%一次椒盐噪声污染
imt=imnoise(imt,'salt&pepper',b);%二次椒盐噪声污染
end
functionimb=imfiltermy(ima,module)
%功能:
空间滤波函数
%输入参数:
%ima:
输入图像
%module:
滤波模板
%输出参数:
%imb:
输出图像
[xs,ys]=size(ima);
%[xm,yn]=size(module);
%d=(xm+1)./2;
imb=zeros(xs,ys);
imb(1,:
)=ima(1,:
);
imb(xs,:
)=ima(xs,:
);
imb(:
1)=ima(:
1);
imb(:
ys)=ima(:
ys);
fori=2:
xs-1
forj=2:
ys-1
imb(i,j)=module(1,1).*ima(i-1,j-1)+module(1,2).*ima(i-1,j)+module(1,3).*ima(i-1,j+1)+...
module(2,1).*ima(i,j-1)+module(2,2).*ima(i,j)+module(2,3).*ima(i,j+1)+...
module(3,1).*ima(i+1,j-1)+module(3,2).*ima(i+1,j)+module(3,3).*ima(i+1,j+1);
end
end
%fori=2:
xs-1
%forj=2:
ys-1
%form=1:
3
%forn=1:
3
%imb(i,j)=imb(i,j)+module(m,n).*ima(i+m-2,j+n-2)
%end
%end
%end
%end
end
functionimb=medfiltermy(ima)
%功能:
中值滤波
%输入参数:
%ima:
输入图像
%输出参数:
%imb:
输出图像
[xs,ys]=size(ima);
imb=zeros(xs,ys);
M=zeros(3,3);
N=zeros(3,1);
%imb(1,:
)=ima(1,:
);
%imb(xs,:
)=ima(xs,:
);
%imb(:
1)=ima(:
1);
%imb(:
ys)=ima(:
ys);
fori=2:
xs-1
forj=2:
ys-1
%M=sort(ima(i-1:
i+1,j-1:
j+1),2,'ascend');
%M=sort(M,1,'ascend');
M=ima(i-1:
i+1,j-1:
j+1);
fork=1:
5
forq=k+1:
9
ifM(k)x=M(q);
M(q)=M(k);
M(k)=x;
end
end
end
imb(i,j)=M(5);
end
end
end