数图课程设计
实验报告
学院:通信与信息工程学院 班级:电子信息科学与技术 姓名: 学号:
实验名称:中值滤波
【一】 实验目的及要求 1.了解中值滤波的原理;
2.滤波窗口种类可选; 3.可以添加多种不同噪声; 4.使用中值滤波法去除噪声;
【二】 实验原理
中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以比较方便。中值滤波首先是被应用在一维信号处理技术中,后来被二维图像信号处理技术所应用。在一定的条件下,可以克服线性滤波器(如领域平均运算)所带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声最为有效。但是对一些细节多,特别是点、线、尖顶细节多的图像 不宜采用中值滤波的方法。
中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的“中值”代替。“中值”是指将一个领域中灰度值按照从大到小(或者相反)的顺系排列成一序列,排在中间的数就是此序列的中值。
1. 一维序列f 1,f 2,„,f n ,取窗口长度为m(m为奇数) ,对此序列进行中值滤波,就是从输入序列中相继抽出m 个数,f i -v ,„,f i -1,„,
f 1,„,f i +1,„,f i +v ,其中i 为窗口的中心位置,v =
m -1
,再将这m 个点2
按其数值大小排列,取其序号为正中间的那作为输出。用数学公式表示为:
Y i =Med {f i -v , , f i , , f i +v } i ∈Z , v =
m -1
2
2. 二维序列{X ij }进行中值滤波时,滤波窗口也是二维的,但这种二维窗口可以有各种不同的形状,如线状、方形、圆形、十字形、圆环形等。二维数据的中值滤波可以表示为:
Y i , j =Med {X ij },A 为滤波窗口
A
在实际使用窗口时,窗口的尺寸以不超过图像中最小有效物体的尺寸为宜,一般先用3⨯3再取5⨯5逐渐增大,直到其滤波效果满意为止。对于有缓变的较长轮廓线物体的图像,采用方形或圆形窗口为宜,对于包含尖顶角物体的图像,适宜用十字形窗口。
【三】 程序清单与运行结果
程序清单
添加均值为0,方差为0.01的椒盐噪声时的程序: f=input('请输入文件名:','s');
choice=input('请选择中值滤波器的形状:1. 矩形 2.十字形 3.线形\n'); p=input('请输入阶数:'); if(mod(p,2)~=0) Fid=fopen(f); [A,count]=fread(Fid); B=reshape(A,256,256); C=zeros(256,256); B=B';
subplot(2,2,1),imshow(uint8(B)); title('(a)原图象');
J=imnoise(uint8(B),'salt & pepper',0.01); subplot(2,2,2),imshow(J);
title('(b)添加均值为0,方差为0.01的椒盐噪声图像');
if(choice==1) C=rectfilter(B,p);
subplot(2,2,3),imshow(uint8(C)); title('(c )矩形窗中值滤波后的图象');
else if(choice==2) C=crossfilter(B,p);
subplot(2,2,3),imshow(uint8(C));
title('(c)十字形窗中值滤波后的图象'); else (choice==3) C=straightfilter(B,p);
subplot(2,2,3),imshow(uint8(C)); title('(c)线形窗中值滤波后的图象'); end end else
disp('输入阶数错误!必须是奇数!'); end
程序中调用的各类窗口函数:
十字形窗口函数:
function B=crossfilter(A,n) m=(n+1)/2; for i=m:(256-m+1) for j=m:(256-m+1)
x=A(i-m+1:i+m-1,j-m+1:j+m-1); y=zeros(1,2*n-1); for k=1:n y(k)=x(m,k); end h=1; for k=1:n if(k~=m)
y(n+h)=x(k,m); h=h+1; end 线形窗口函数:
end
B(i,j)=med(y,2*n-1); end end
矩形窗口函数:
function B=rectfilter(A,n) m=(n+1)/2; for i=m:(256-m+1) for j=m:(256-m+1)
x=A(i-m+1:i+m-1,j-m+1:j+m-1); y=reshape(x,1,n*n); B(i,j)=med(y,n*n); end end
function B=straightfilter(A,n)
m=(n+1)/2; for i=m:(256-m+1) for j=1:256
x=[A(i-m+1:i+m-1,j)];
B(i,j)=med(x,n); end end
加椒盐噪声的运行结果:
图(1)
将椒盐噪声程序换成高斯噪声:
J2=imnoise(uint8(B),'gaussian',0.01); subplot(2,2,2),imshow(J2);
title('(b)添加均值为0,方差为0.01的高斯噪声图像');
加高斯噪声的运行结果:
图(2)
【四】 实验结果分析
在图(1)中,图(c ) 是对(a )图像进行中值滤波的的结果,图(b )是加了椒盐噪声的图像。由图(c ) 才可知,经中值滤波后,图像的噪声得到了很大程度的抑制。
在图(2)中,图(c ) 是对(a )图像进行中值滤波的的结果,图(b )是加了椒盐噪声的图像。由图(c ) 才可知,经中值滤波后,图像的噪声得到了一定程度的抑制。比较两个图可知,中值滤波器对椒盐噪声的的消噪效果比较好,但对高斯噪声的消噪效果不是很好。
中值滤波的优点:可以做到既去除噪声又能保护图像的边缘,从而获得较满意的复原效果。缺点:对带有噪声有选择性,适用于“椒盐”噪声,对于随机噪声不如低通法效果好。
【五】 心得体会
通过这次实验对中值滤波有了更深的认识,之前上课听老师讲了中值滤波的原理,但对它的作用及滤波后的效果没有真实的了解,这次实验刚好让我更好的学习和理解中值滤波,实验中的矩形,十字形窗口函数我不会写,是参考同学的,不会的部分请教了同学, 自己也查阅了一些资料,在实验的过程中学到了很多知识。
很感谢老师们给我这次实验的机会,让我深刻地认识到自己的优点和不足,在实验的过程中,遇到很多问题,我知道自己要学习的东西还很多很多,也懂了不亲自动手,就不知道自己究竟掌握了多少知识,纸上得来终觉浅,要真正学到知识就要多动手,多动脑。
数图课程设计
实验报告
学院:通信与信息工程学院 班级:电子信息科学与技术 姓名: 学号:
实验名称:中值滤波
【一】 实验目的及要求 1.了解中值滤波的原理;
2.滤波窗口种类可选; 3.可以添加多种不同噪声; 4.使用中值滤波法去除噪声;
【二】 实验原理
中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以比较方便。中值滤波首先是被应用在一维信号处理技术中,后来被二维图像信号处理技术所应用。在一定的条件下,可以克服线性滤波器(如领域平均运算)所带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声最为有效。但是对一些细节多,特别是点、线、尖顶细节多的图像 不宜采用中值滤波的方法。
中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的“中值”代替。“中值”是指将一个领域中灰度值按照从大到小(或者相反)的顺系排列成一序列,排在中间的数就是此序列的中值。
1. 一维序列f 1,f 2,„,f n ,取窗口长度为m(m为奇数) ,对此序列进行中值滤波,就是从输入序列中相继抽出m 个数,f i -v ,„,f i -1,„,
f 1,„,f i +1,„,f i +v ,其中i 为窗口的中心位置,v =
m -1
,再将这m 个点2
按其数值大小排列,取其序号为正中间的那作为输出。用数学公式表示为:
Y i =Med {f i -v , , f i , , f i +v } i ∈Z , v =
m -1
2
2. 二维序列{X ij }进行中值滤波时,滤波窗口也是二维的,但这种二维窗口可以有各种不同的形状,如线状、方形、圆形、十字形、圆环形等。二维数据的中值滤波可以表示为:
Y i , j =Med {X ij },A 为滤波窗口
A
在实际使用窗口时,窗口的尺寸以不超过图像中最小有效物体的尺寸为宜,一般先用3⨯3再取5⨯5逐渐增大,直到其滤波效果满意为止。对于有缓变的较长轮廓线物体的图像,采用方形或圆形窗口为宜,对于包含尖顶角物体的图像,适宜用十字形窗口。
【三】 程序清单与运行结果
程序清单
添加均值为0,方差为0.01的椒盐噪声时的程序: f=input('请输入文件名:','s');
choice=input('请选择中值滤波器的形状:1. 矩形 2.十字形 3.线形\n'); p=input('请输入阶数:'); if(mod(p,2)~=0) Fid=fopen(f); [A,count]=fread(Fid); B=reshape(A,256,256); C=zeros(256,256); B=B';
subplot(2,2,1),imshow(uint8(B)); title('(a)原图象');
J=imnoise(uint8(B),'salt & pepper',0.01); subplot(2,2,2),imshow(J);
title('(b)添加均值为0,方差为0.01的椒盐噪声图像');
if(choice==1) C=rectfilter(B,p);
subplot(2,2,3),imshow(uint8(C)); title('(c )矩形窗中值滤波后的图象');
else if(choice==2) C=crossfilter(B,p);
subplot(2,2,3),imshow(uint8(C));
title('(c)十字形窗中值滤波后的图象'); else (choice==3) C=straightfilter(B,p);
subplot(2,2,3),imshow(uint8(C)); title('(c)线形窗中值滤波后的图象'); end end else
disp('输入阶数错误!必须是奇数!'); end
程序中调用的各类窗口函数:
十字形窗口函数:
function B=crossfilter(A,n) m=(n+1)/2; for i=m:(256-m+1) for j=m:(256-m+1)
x=A(i-m+1:i+m-1,j-m+1:j+m-1); y=zeros(1,2*n-1); for k=1:n y(k)=x(m,k); end h=1; for k=1:n if(k~=m)
y(n+h)=x(k,m); h=h+1; end 线形窗口函数:
end
B(i,j)=med(y,2*n-1); end end
矩形窗口函数:
function B=rectfilter(A,n) m=(n+1)/2; for i=m:(256-m+1) for j=m:(256-m+1)
x=A(i-m+1:i+m-1,j-m+1:j+m-1); y=reshape(x,1,n*n); B(i,j)=med(y,n*n); end end
function B=straightfilter(A,n)
m=(n+1)/2; for i=m:(256-m+1) for j=1:256
x=[A(i-m+1:i+m-1,j)];
B(i,j)=med(x,n); end end
加椒盐噪声的运行结果:
图(1)
将椒盐噪声程序换成高斯噪声:
J2=imnoise(uint8(B),'gaussian',0.01); subplot(2,2,2),imshow(J2);
title('(b)添加均值为0,方差为0.01的高斯噪声图像');
加高斯噪声的运行结果:
图(2)
【四】 实验结果分析
在图(1)中,图(c ) 是对(a )图像进行中值滤波的的结果,图(b )是加了椒盐噪声的图像。由图(c ) 才可知,经中值滤波后,图像的噪声得到了很大程度的抑制。
在图(2)中,图(c ) 是对(a )图像进行中值滤波的的结果,图(b )是加了椒盐噪声的图像。由图(c ) 才可知,经中值滤波后,图像的噪声得到了一定程度的抑制。比较两个图可知,中值滤波器对椒盐噪声的的消噪效果比较好,但对高斯噪声的消噪效果不是很好。
中值滤波的优点:可以做到既去除噪声又能保护图像的边缘,从而获得较满意的复原效果。缺点:对带有噪声有选择性,适用于“椒盐”噪声,对于随机噪声不如低通法效果好。
【五】 心得体会
通过这次实验对中值滤波有了更深的认识,之前上课听老师讲了中值滤波的原理,但对它的作用及滤波后的效果没有真实的了解,这次实验刚好让我更好的学习和理解中值滤波,实验中的矩形,十字形窗口函数我不会写,是参考同学的,不会的部分请教了同学, 自己也查阅了一些资料,在实验的过程中学到了很多知识。
很感谢老师们给我这次实验的机会,让我深刻地认识到自己的优点和不足,在实验的过程中,遇到很多问题,我知道自己要学习的东西还很多很多,也懂了不亲自动手,就不知道自己究竟掌握了多少知识,纸上得来终觉浅,要真正学到知识就要多动手,多动脑。