空域滤波是基于邻域处理的增强方法,直接在图像所在的二维空间进行处理,即对每一个像素的灰度值进行处理。它使用某一模版对每个像素与其周围邻域的所有像素进行某种数学运算得到该像素的灰度值,新的灰度值的大小不仅与该像素的灰度值有关,而且还与其领域内的像素值有关[19]。
空域滤波是在图像空间通过邻域操作完成的,最常用的运算是模版运算,基本思路是将某个像素的值作为它本身的灰度值和其相邻像素灰度值的函数。模版可以看作是M*N的小图像,最基本的尺寸为3*3,更大的尺寸如5*5,7*7,如下所示为3*3的模板:
点(a,b)位于3*3的模板中心,所以像素值可用公式表达为:
其中f(a,b)其均值像素值。
在进行图像线性均值滤波时,卷积模板是最常用的模板,其基本计算步骤如下:
将模板在图中漫游,并将模板中心与图中某个像素位置重合。
将模板上的各个像素与模板下的各对应像素的灰度值相乘。
将所有乘积相加(为保持图像的灰度范围,常常将灰度值除以模板中像素的个数)得到的结果赋给图中对应模板中心位置的像素。
如下3*3的像素区域M与模版N的卷积运算:
借助模板进行空域滤波,可使原图像转换为增强图像,模版系数不同,得到不同的增强效果,从处理效果上可以把空域滤波分为线性空域滤波和非线性空域滤波。线性平滑滤波是一种常见的空域滤波形式,它是一种低通滤波,通低频阻高频,由于图像的边缘部分位于高频区,所以线性平滑滤波后,会造成图像边缘的模糊[20]。
在MATLAB中,可以调用函数imfilter()对图像进行平滑滤波,具体代码运行如下:
clear all;
close all;
I=imread('1.png');
J=imnoise(I,'salt&pepper',0.02);(www.xing528.com)
h=ones(3,3)/5;
h(1,1)=0;h(1,3)=0;
h(3,1)=0;h(1,3)=0;
K=imfilter(J,h);
figure;
subplot(131);imshow(I);
subplot(132);imshow(J);
subplot(133);imshow(K);
在运行程序中,先读入图像,再通过函数imnoise()给图像添加椒盐噪声,然后建立线性滤波模板,本次模板采用的是3*3的模板,最后通过imfilter()对添加后的噪声进行平滑滤波。运行后的结果如下图8.5所示:
图8.5 函数imfilter()对图像进行滤波结果
图像的滤波,实际上是卷积计算,在MATLAB软件中可以采用conv2()进行二维卷积计算,通过函数filter2()进行二维线性数字滤波,采用函数fspecial()产生不同的滤波器模板,该函数的具体调用方式可通过以下的例子程序展示:
在程序中,首先读入灰度图像,再通过函数imnoise()给图像添加椒盐噪声,然后通过函数fspecial()建立3*3和5*5的线性滤波模板,最后通过函数filter2()对添加后的噪声进行平滑滤波。程序运行后的结果如下图8.6所示。左图为添加噪声后的图像,中图为采用3*3的模板进行滤波后的图像,右图为采用5*5的模板进行滤波后的图像。
图8.6 采用不同大小模板进行滤波结果图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。