虽然基于模板的线性滤波方法简便易行,但对于既需要消除噪声又要保持好的图像细节时,其效果并不理想,二非线性滤波在这方面具有一定的优势。
非线性滤波最经典使用的方法是基于模板的统计排序滤波,主要包括中值滤波、最大值滤波和最小值滤波三种方法,该滤波方法基于滤波器所在图像区域中像素的排序,由排序结果决定的值代替中心像素的值。
中值滤波:
尽管领域平均滤波法可以起到平滑图像的作用,但在消除噪声的同时,会使图像中的一些细节变得模糊。中值滤波法在消除噪声的同时还能保持图像中的细节部分,防止图像边缘部分模糊。与领域平均法不同,中值滤波是一种非线性滤波,它将领域内所有像素点值从小到大排序,取中间值作为中心像素点的输出值。采用中值滤波,在一定的条件下,可以克服数字图像细节模糊的问题。中值滤波的原理是利用一个奇数点的移动窗口(3*3或5*5窗口),将窗口中心点的值用窗口各点的中间值代替。计算公式为:gij=Med{xij}
中值滤波实现代码(matlab)如下:
1 %Median filtering 2clear;clc; 3 I=imread('1.png'); 4 I=rgb2gray(I); 5 [r c]=size(I); 6 I = imnoise(I,'salt & pepper',0.02);%加入噪声 7for x=2: r-1 8for y=2: c-1 9 w=I(x-1:x+1,y-1:y+1); 10 g=sort(w);%3*3窗口内元素排序 11 f(x,y)=median(median(g));%取中值 12 end 13end 14imshow(I,[]); 15 figure;imshow(f,[]);
测试结果如下:(Figure1为加了噪声的图像,Figure2为进行中值滤波处理后的图像,效果还是比较明显)
最大值滤波:
最大值滤波法的实现过程与中值滤波类似,不同之处是用像素领域内的最大值代替被处理像素的灰度值实现滤波。其主要用途是寻找最亮点。
计算公式为:gij=Max{xij}
最小值滤波:
最小值滤波法的实现是用像素领域内的最大值代替被处理像素的灰度值实现滤波。其主要用途是寻找最暗点。
计算公式为:gij=Min{xij}
锐化滤波器
梯度法拉