中值滤波
前面所说的高斯平滑和均值滤波也是预处理的一种,不过他们用牺牲图像细节为代价来换取平滑图像,他们对处理小的噪声点比较好,但是处理较大的噪声点比较无力。
平滑线性滤波器的工作原理可以比喻为用水冲洗桌面上的污点,冲洗的结果是污点并没有消失,只是被淡化,如果污点较大,较密集,则冲洗的结果是整个桌面都被污点所影响。而中值滤波的做法就是不去 采用冲洗冲淡的方式,直接将污点剔除。
在Matlab中可以使用函数medfilt2()实现中值滤波,但是这个函数仅仅智能用于处理灰度图像。
I2=medfilt2(I1,[m,n])
其中I1是待处理图像的像素矩阵,参数m,n给出了中值滤波处理模板的大小,默认为3*3。
下面的代码是同时对比了均值滤波,高斯滤波和中值滤波三种对于椒盐噪声的去除效果。
i=rgb2gray(imread('songshu.jpg'));
inoise=imnoise(i,'salt & pepper');
w1=[1 2 1;2 4 2;1 2 1]/16;
output1=imfilter(inoise,w1,'conv','replicate');
w2=[1 1 1;1 1 1;1 1 1]/9;
output2=imfilter(inoise,w2,'conv','replicate');
output3=medfilt2(inoise,[3,3]);
%高斯滤波
subplot(131),imshow(output1);
%均值滤波
subplot(132),imshow(output2);
%中值滤波
subplot(133),imshow(output3);
双边滤波
I=imread('songshu.jpg');
I=double(I)/255;
w=5;
sigma=[3 0.1];
B=bilateral_filter(I,w,sigma);
subplot(144),imshow(B);
貌似matlab2015b版本会报错,bfilter2函数和上面用的函数好像都找不到,有大神会的可以私信我。