中值滤波
中值滤波也是基于空间域(邻域)操作的,中值滤波是将像素邻域内灰度的中值来代替中心像素的值,把不同灰度的像素点看起来更接近于邻域内的像素点。
优点是可以很好的过滤掉椒盐噪声。中值滤波是非线性的图像处理方法,在去噪的同时可以兼顾到边界信息的保留。
缺点是易造成图像的不连续性。在使用均值滤波法去噪的同时也使得边界变得模糊。
中值滤波与均值滤波的区别
均值滤波基于加权求平均值来计算当前像素点的新灰度值。
而中值滤波则基于涉及滤波器包围的邻域内像素的中间值代替当前像素点的灰度值。
在MATLAB中,可自定义中值滤波函数,也可利用medfilt2函数来实现非线性滤波。medfilt2函数中的第一个参数必须是二维的,若输入图像为彩色图像,则先要把彩色图像灰度化。medfilt2函数的使用语法示例如下所示:
J = medfilt2(I,[m n]);
其中,[m n]表示滤波区域的维数。
示例代码
I = imread('toyobjects.png');
I_1 = imnoise(I,'salt & pepper',0.05); %对图像添加椒盐噪声
J = medfilt2(I_1,[3 3]); %取3×3大小掩模,对噪声图像进行中
值滤波
subplot(1,3,1),imshow(I),title('(a)原图像');
subplot(1,3,2),imshow(I_1),title('(b)添加噪声图像');
subplot(1,3,3),imshow(J),title('(c)中值滤波处理后图像');