三图像的平滑与锐化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三 图像的平滑与锐化
一.实验目的
1.掌握图像滤波的基本定义及目的;
2.理解空域滤波的基本原理及方法;
3.掌握进行图像的空域滤波的方法。
二.实验基本原理
图像噪声从统计特性可分为平稳噪声和非平稳噪声两种。
统计特性不随时间变化的噪声称为平稳噪声;统计特性随时间变化的噪声称为非平稳噪声。
另外,按噪声和信号之间的关系可分为加性噪声和乘性噪声。
假定信号为S (t ),噪声为n (t ),如果混合叠加波形是S (t )+n (t )形式,则称其为加性噪声;如果叠加波形为S (t )[1+n (t )]形式, 则称其为乘性噪声。
为了分析处理方便,往往将乘性噪声近似认为加性噪声,而且总是假定信号和噪声是互相独立的。
1.均值滤波
均值滤波是在空间域对图像进行平滑处理的一种方法,易于实现,效果也挺好。
设噪声η(m,n)是加性噪声,其均值为0,方差(噪声功率)为2σ,而且噪声与图像f(m,n)不相关。
除了对噪声有上述假定之外,该算法还基于这样一种假设:图像是由许多灰度值相近的小块组成。
这个假设大体上反映了许多图像的结构特征。
∑∈=s j i j i f M y x g ),(),(1
),( (3-1)
式(2-1)表达的算法是由某像素领域内各点灰度值的平均值来代替该像素原来的灰度值。
可用模块反映领域平均算法的特征。
对模板沿水平和垂直两个方向逐点移动,相当于用这样一个模块与图像进行卷积运算,从而平滑了整幅图像。
模版内各系数和为1,用这样的模板处理常数图像时,图像没有变化;对一般图像处理后,整幅图像灰度的平均值可不变。
(a) 原始图像 (b) 邻域平均后的结果
图3-1 图像的领域平均法
2.中值滤波
中值滤波是一种非线性处理技术,能抑制图像中的噪声。
它是基于图像的这样一种特性:噪声往往以孤立的点的形式出现,这些点对应的象素很少,而图像则是由像素数较多、面积较大的小块构成。
在一维的情况下,中值滤波器是一个含有奇数个像素的窗口。
在处理之后,位于窗口正中的像素的灰度值,用窗口内各像素灰度值的中值代替。
例如若窗口长度为5,窗口中像素的灰度值为80、90、200、110、120,则中值为110,因为按小到大(或大到小)排序后,第三位的值是110。
于是原理的窗口正中的灰度值200就由110取代。
如果200是一个噪声的尖峰,则将被滤除。
然而,如果它是一个信号,则滤波后就被消除,降低了分辨率。
因此中值滤波在某些情况下抑制噪声,而在另一些情况下却会抑制信号。
中值滤波很容易推广到二维的情况。
二维窗口的形式可以是正方形、近似圆形的或十字形的。
在图像增强的具体应用中,中值滤波只能是一种抑制噪声的特殊工具,在处理中应监视其效果,以决定最终是福才有这种方案。
实施过程中的关键问题是探讨一些快速算法。
3.空域低通滤波:
从信号频谱角度来看,信号的缓慢变化部分在频率域属于低频部分,而信号的迅速变化部分在频率域是高频部分。
对图像来说,它的边缘以及噪声干扰的频率分量都处于频率域较高的部分,因此,可以采用低通滤波的方法来去除噪声。
而频域的滤波又很容易从空间域的卷积来实现,为此只要适当设计空间域的单位冲激响应矩阵,就可以达到滤除噪声的效果。
下面是几种用于噪声平滑低通卷积模板。
⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡0101*0101041 ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡1111*0101081 ⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡1111*21111101 采用有低通性的模板(更多模板参见matlabtoolbox 课件),能够完成对图像的平滑。
4.空域高通滤波:
采用有高通性的模板,能够完成对图像的锐化;
在模板运算中,模板的权值体现了该位置点的灰度对整个模板运算结果影响的影响度,权值越大,影响越大。
三.实验提示
用VC 做实验请参见教材4.7节,注意模板对话框的设计。
1.MATLAB 图像处理工具箱提供了基于卷积的图像滤波函数filter2, filter2的语法格式为:
Y = filter2 (h,X)
其中Y = filter2(h,X)返回图像X 经算子h 滤波后的结果,默认返回图像Y 与输入图像X 大小相同。
在MATLAB 图像处理工具箱中,提供了medfilt2函数用于实现中值滤波。
Medfilt2函数的语法格式为:
B = medfilt2(A) 用3×3的滤波窗口对图像A 进行中值滤波。
B = medfilt2(A,[m n]) 用指定大小为m ×n 的窗口对图像A 进行中值滤波。
2.完成人为的往一幅图像中加入噪声,并通过多次相加求平均的方法消除所加入的噪声。
在MATLAB 中提供了给图像加入噪声的函数imnoise
imnoise 的语法格式为
J = imnoise(I,type)
J = imnoise(I,type,parameters)
其中J = imnoise(I,type)返回对原始图像I 添加典型噪声的有噪图
像J。
参数type和parameters用于确定噪声的类型和相应的参数。
主要包括
'gaussian' Gaussian white noise
'localvar' Zero-mean Gaussian white noise with an intensity-dependent variance
'poisson' Poisson noise
'salt & pepper' On and off pixels
'speckle' Multiplicative noise
下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:
例:
I=imread('eight.tif');
J1=imnoise(I,'gaussian',0,0.02);
J2=imnoise(I,'salt & pepper',0.02);
J3=imnoise(I,'speckle',0.02);
subplot(2,2,1),imshow(I),title('原图像');
subplot(2,2,2),imshow(J1),title('加高斯噪声');
subplot(2,2,3),imshow(J2),title('加椒盐噪声');
subplot(2,2,4),imshow(J3),title('加乘性噪声');
在上面的例子中使用了一个函数subplot。
其作用就是将多幅图像显示再同一幅图像显示对话框中。
其语法格式为:
subplot(m,n,p)
其作用就是将一个图像显示对话框分成m行n列,并显示第p幅图像。
在MA TLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。
我们用均值滤波对一幅图像做处理时,往往取不到较理想的效果,可重复做几次。
代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及
将这些图像数据进行相加运算。
MATLAB中FOR END循环的用法如下:for end循环
这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:
for variable = expression
statements
end
举例如下:
例:
%一个简单的for循环的例子。
for i=1:10;
y(i)=i;
end;
y%显示y的结果
y =
12345678910
im2double函数,其语法格式为:
I2 = im2double(I1)
其中I1是输入的图像数据,它可能是unit8或unit16型数据,通过函数的变化输出I2为一个double型数据,这样两图像数据就可以方便的进行相加等代数运算.
四.实验内容与要求
实验要求设计一个程序完成下列要求:
1.读出eight.tif这幅图像,给这幅图像加入椒盐噪声后并与前一张图显示在同一图像窗口中;
2.对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要求在同一窗口中显示;
3.运用for循环,将1幅加有噪声的图像进行10次,20次均值滤波,查看其特点,显示均值处理后的图像;
4.对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要求在同一窗口中显示结果。
1.
I=imread('eight.tif');
I1=imnoise(I,'salt & pepper',0.02);
subplot(1,2,1),imshow(I),subplot(1,2,2),imshow(I1)
2.
I=imread('eight.tif');
I1=imnoise(I,'salt & pepper',0.02);
h1=[0 0.25 0;0.25 0 0.25;0 0.25 0];
h2=[0.125 0.125 0.125;0.125 0 0.125;0.125 0.125 0.125];
h3=[0.1 0.1 0.1;0.1 0.2 0.1;0.1 0.1 0.1];
J1=imfilter(I1,h1);J2=imfilter(I1,h2);J3=imfilter(I1,h3);
subplot(2,2,1),imshow(I1),subplot(2,2,2),imshow(J1);subplo t(2,2,3), imshow(J2);subplot(2,2,4),imshow(J3)
3.
I=imread('eight.tif');
I1=imnoise(I,'salt & pepper',0.02);
h=[0.125 0.125 0.125;0.125 0 0.125;0.125 0.125 0.125];
for n=1:10;I1=imfilter(I1,h);subplot(5,2,n),imshow(I1);end
I=imread('eight.tif');
I1=imnoise(I,'salt & pepper',0.02);
h=[0.125 0.125 0.125;0.125 0 0.125;0.125 0.125 0.125];
for n=1:20;I1=imfilter(I1,h);subplot(4,5,n),imshow(I1);end
4.
I=imread('eight.tif');
I1=imnoise(I,'salt & pepper',0.02);
h=[0.125 0.125 0.125;0.125 0 0.125;0.125 0.125 0.125];
J1=imfilter(I1,h); J2=medfilt2(I1,[3 3]);
figure,subplot(1,3,1),imshow(I1),subplot(1,3,2),imshow(J1); subplot(1,3,3),imshow(J3);。