任何线性滤波都可以描述为将原始图像的傅里叶变换和滤波模板的傅里叶变换相乘,结果是在每个频率处有用的内容强度和无用噪声的水平都以相同的因子减弱。虽然线性滤波计算简单,但是常不能区分图像中有用的内容和无用的噪声。这种问题可以通过非线性滤波来解决。
非线性滤波主要有基于集合的、基于形状的、基于排序的三种类型,下面是基于排序的非线性滤波。
非线性平滑滤波
-
中值滤波
中值滤波原理:中值滤波依靠模板排序来实现。首先用1-D信号来介绍原理。设模板尺寸为M,M=2r+1,r为模板半径。
median代表取中值,即对模板覆盖的信号序列按照数值大小进行排序,并取排序后处在中间位置的值,且1<j-r<j+r<N。也就是{fi}中有一半值大于gi,有一半值小于gi 。该操作称为游程中值,可以通过滑动奇数长度的模板实现。
2-D中值滤波:
对于一个所用尺寸为n×n的中值滤波模板,其输出值应大于等于模板中(n2-1)/2个像素的值,又应小于等于模板中(n2-1)/2个像素的值。
中值滤波使用时,每次从图像中取除和模板大小相同的像素,将所有原图排序,然后取中间值放回模板中心处,最后修改到原图中。
中值滤波的模板:当使用超过包含9~13个像素的模板来消除图像中的噪声时,计算量的增加比消噪效果的改善更为明显,所以常可使用稀疏的5×5模板来减少运算量。下面是一些用于中值滤波的模板:
中值滤波的主要功能: 中值滤波对于孤立的噪声像素的消除能力很强,与周围像素灰度值相差很大的像素会被改为与周围像素值相近的值。由于不是简单的取均值,所以产生的模糊比较少。中值滤波既能消除噪声(中值滤波适合用于消除脉冲噪声),又能很好的保持图像细节。 -
最频值滤波
最频值代表一个分布中最有可能出现的值,最频值滤波表示用最频值作为滤波的输出。使用最频值滤波不仅可以消除噪声(尤其是脉冲噪声),还可 以锐化目标边缘
非线性锐化滤波
借助非线性滤波也可以获得对图像锐化的结果。此时的模板运算采用模板卷积进行。
- 基于梯度的锐化滤波
图像处理中最常用的微分方法是利用梯度(基于一阶微分)。利用微分可以锐化图像,利用积分可以平滑图像。在实际滤波中,常常只使用梯度矢量的幅度 。
梯度锐化和拉普拉斯锐化的区别:
拉普拉斯锐化是使用二阶微分的图像锐化,梯度锐化是使用一阶微分的图像锐化。
拉普拉斯锐化增强了图像中灰度不连续边缘和灰度突变对比度,减弱了对应图像中灰度值缓慢变化区域的对比度,形成细节的能力更强
梯度锐化去除变化慢的背景,在灰度平坦区域中增强细小的突变,突出灰度图像中看不见的斑点,主要用于提取边缘。 - 最大-最小锐化变换
最大-最小锐化变换是将最大值滤波和最小值滤波结合使用的图像增强技术。
将一个模板覆盖区域里的中心像素值与该区域里的最大值和最小值进行比较,然后将中心像素值用与其较接近的极值(最大或最小值)替换。
MATLAB实现
%% 非线性滤波
% 非线性平滑滤波
% 非线性锐化滤波
clc,clear
I = imread('lenna1.jpg');
%% 非线性平滑滤波
% 中值滤波消除脉冲噪声
I1 = imnoise(I,'salt & pepper'); %加入椒盐噪声
figure(1);
subplot(1,3,1);imshow(I);title('原图像');
subplot(1,3,2);imshow(I1);title('椒盐噪声');
I2 = medfilt2(I1,[3,3]); % 中值滤波
subplot(1,3,3);imshow(I2);title('中值滤波消除脉冲噪声');
%% 非线性锐化滤波
% 梯度锐化和拉普拉斯锐化的比较
f_sobel = fspecial('sobel');%梯度
f_laplacian = fspecial('laplacian',0);%拉普拉斯
I3 = imfilter(I,f_sobel);
I4 = imfilter(I,f_laplacian);
figure(2);
subplot(1,3,1);imshow(I);title('原图像');
subplot(1,3,2);imshow(I3);title('梯度锐化');
subplot(1,3,3);imshow(I4);title('拉普拉斯锐化');