空间滤波是一种采用滤波处理的影像增强方法。其理论基础是空间卷积和空间相关。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。分为低通滤波(平滑化)、高通滤波(锐化)和带通滤波。处理方法有计算机处理(数字滤波)和光学信息处理两种。
邻域处理包括以下过程:
(1)选择中心点(x,y);
(2)仅对预定义的围绕点(x,y)的邻域内的像素执行运算;
(3)令运算结果为该点处邻域处理的响应;
(4)对图像上的每一点重复上述处理。
移动中心点会产生新的邻域,每个邻域对应输入图像上的一个像素。对邻域中像素的计算为线性的,则运算称为线性空间滤波(空间卷积);否则是非线性空间滤波。
线性空间滤波可分为相关和卷积。相关是指模板w如图进行图像数组f的处理。卷积则是在w通过f之前先将它旋转180°。(过程如图所示)
在matlab中用函数imfilter实现线性空间滤波:
g = imfilter(f,w,filtering_mode,boundary_options,size_options)
f是输入图像
w是滤波模板
g是滤波结果
filtering_mode是制定滤波过程是使用卷积(conv)还是相关(corr)
boundary_options用于处理边界填充零问题,边界的大小由滤波器决定
size_options可以是same(输出于输入图像大小相同)或full(输出与被扩展图像大小相同)
f = imread('4.png');
w = ones(31);
w=w./(31*31);
subplot(231),imshow(f),title('原图像');
gd = imfilter(f,w);
subplot(232),imshow(gd,[]),title('默认值滤波后');
gr = imfilter(f,w,'replicate');
subplot(233),imshow(gr,[]),title('用外边界扩展后');
gs= imfilter(f,w,'symmetric');
subplot(234),imshow(gs,[]), title('用自身镜像扩展后');
gc= imfilter(f,w,'circular');
subplot(235),imshow(gc,[]), title('周期扩展后');
f8 = im2uint8(f);
g8r = imfilter(f8,w, 'replicate');
subplot(236),imshow(g8r,[]), title('转换uint8后再外边界扩展后');
线性空间滤波后的图像黑白边缘被模糊了,用默认值滤波和二维周期函数的一个周期来扩展的图像,会产生黑色边缘,自身镜像和外边缘扩展不会产生黑色边缘。用几幅图来测试算法的稳定性,线性空间滤波后的图片均被模糊,可以适用于填补断裂的缝隙这类图像。
非线性空间滤波是基于涉及邻域像素内的非线性操作。为了执行非线性滤波操作,工具箱提供了两个函数:nlfilter和colfilt,nlfilter直接执行二维操作,colfilt按列组织数据。在大多数图像处理应用中,更多采用colfilt而不是nlfilter。
在matlab中用函数colfilt实现非线性空间滤波
g = colfilt(f,[m n],'sliding',fun) %m和n表示滤波区域的维数,'sliding'表明处理过程是m*n区域在输入图像f中逐像素进行滑动,fun是函数句柄
在使用colfilt之前需要对输入图像进行填充,我们需要用函数padarray,对于二维函数,语法为:
fp = padarray(f,[r c],method,direction) %f是输入图像,fp是输出图像,[r c]表示填充f的行列数