原图像,加入椒盐噪声的图像和均值滤波的图像分别如图4-5、图4-6和图4-7所示。
图4-5 原图 图4-6加入椒盐噪声图像
图4-7 3*3的均值滤波器处理结果
4.2.3 非线性平滑滤波器
中值滤波器是最常用的非线性平滑滤波器。它是一种临域运算,类
26
似于卷积,但计算的不是加权求和,而是把邻域中的像素按灰度级进行排序,然后选择改组的中间值作为输出的像素值。具体步骤:
(1)将模板在图像中漫游,并将模板中心和图像某个像素的位置重合; (2)读取模板下对应像素的灰度值; (3)将这些灰度值从小到大排成一列; (4)找出这些值排在中间的一个;
(5)将这个中间值赋给对应模板中心位置的像素。 MATLAB实现中值滤波器代码所示: I=imread('saturn.tif');
J=imnoise(I,'salt & pepper',0.02); K1=medfilt2(J,[3,3]); figure,imshow(K1)
中值滤波的结果如图4-8所示。
图4-8 中值滤波结果
4.2.4 线性锐化滤波器
线性高通滤波器是最常用的线性锐化滤波器。这种滤波器的中心系
27
数都是正的,而周围的系数都是负的。对3*3的模板来说,典型的系数取值是:
[-1 –1 –1;-1 8 –1;-1 –1 -1]
事实上这是拉普拉斯算子,所有的系数之和为0。当这样的模板放在图像中灰度值是常数或变化很小的区域时,其输出为0或很小。这个滤波器将原来的图像中的零频域分量去除了,也就是将输出的图像的平均值变为0,这样就会有一部分像素的灰度值小于0。在图像处理中我们一般只考虑正的灰度值,所以还有将输出图像的灰度值范围通过尺度变回到所要求的范围。 MATLAB代码所示: I=imread('saturn.tif'); m=fspecial('laplacian') I1=filter2(m,I)
h=fspecial('unsharp',0.5); I2=filter2(h,I)/255; subplot(1,2,1); imshow(I1);
title('高通滤波laplacian算子') subplot(1,2,2); imshow(I2);
title('高通滤波unsharp') 处理结果如图4-9所示:
28
图4-9空域高通滤波
4.3 频域增强
4.3.1 基本原理
卷积理论是频域技术的基础。设函数f(x,y)与线性位不变算子h(x,y)的卷积结果是g(x,y),即g(x,y)=h(x,y)*f(x,y)
那么根据卷积定理在频域有:
G(x,y)=H(u,v)F(u,v)
其中G(x,y)、 H(u,v)、F(u,v)分别是g(x,y)、h(x,y)、f(x,y)的傅立叶变换。
频域增强的主要步骤是:
(1)技术所需增强图的傅立叶变换;
(2)将其与一个(根据需要设计的)转移函数相乘; (3)再将结果进行傅立叶反变换以得到增强的图。 频域增强的两个关键步骤:
(1)将图像从空域转换到频域所需的变换及将图像从频域空间转换回空域所需的变换;
29
(2)在频域空间对图像进行增强加工操作。
常用的频域增强方法有低通滤波和高通滤波。以下分别介绍在MATLAB中如何实现。
4.3.2 低通滤波
图像的能量大部分集中在幅度谱的低频和中频度,而图像的边缘和噪声对应于高频部分。因此能降低高频成分幅度的滤波器就能减弱噪声的影响。
Butterworth 低通滤波器是一种物理上可以实现的低通滤波器,n阶,截断频率为d0的Butterworth低通滤波器的转移函数为:
H(u,v)=
1
1?[d(u,v)/d0]2n用MATLAB实现Butterworth低通滤波器的代码所示: I1=imread('Saturn.tif'); figure,imshow(I1) I2=imnoise(I1,'salt'); figure,imshow(I2) f=double(I2); g=fft2(f); g=fftshift(g); [N1,N2]=size(g); n=2; d0=50; n1=fix(N1/2); n2=fix(N2/2); for i=1:N1
30