一、介绍
1.原理
图像的滤波分为线性滤波和非线性滤波,常见的线性滤波就是前面介绍的均值滤波、方框滤波、高斯滤波。常见的非线性滤波主要包括中值滤波、双边滤波,今天就先介绍中值滤波。线性滤波就是加权再求值,中值滤波则是取当前像素点及其邻域像素点,将这些像素点排序,再将位于中间位置的像素值作为当前像素点的输出值。以这个原始图像为例:
对66这个点做中值滤波,如果滤波核选择 3 * 3,那么取出来的值就是
对这9个值排序,结果是238、211、151、137、98、83、66、31、29,位于中间的是98,所以这个点的输出结果就是98。注意哈:
1、滤波核,X水平方向和Y垂直方向值相同,必须是奇数。(Emgu CV就这样规定)
2、不论从大到小排序,还是从小到大排序,98总是位于中间位置,所以结果就是它。
3、这个98不是9个点根据加权计算来的,所以不是线性滤波。
4、“中值” 的 意思是按照排序,位于中间位置的值。
2.函数介绍
官方定义如下:
public static void MedianBlur(
IInputArray src, // 输入图像
IOutputArray dst, // 输出图像
int ksize, // 滤波核的大小,也就是选取的邻域像素的高度和宽度。
)
二、举例
1.原始素材
原始素材定义为srcMat,如下:
还是这个有椒盐噪声的向日葵图片。
2.代码
Emgu CV中值滤波代码如下:
int ksizeX = 13;
Mat dstMat = srcMat.Clone();
CvInvoke.MedianBlur(dstMat, dstMat, ksize);
CvInvoke.Imshow("MedianBlur image, " + dstMat.Size.ToString(), dstMat);
3.运行结果
代码采用了13 * 13的滤波核,椒盐噪声已经没有了,花朵和绿叶上的纹理也被平滑了,但是花朵和绿叶的边缘还是很清晰的。所以记住中值滤波的特点:消除椒盐噪声、保留边缘。
原创不易,请勿抄袭。共同进步,相互学习。