【Emgu CV教程】6.7、图像平滑之MedianBlur()中值滤波


一、介绍

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的滤波核,椒盐噪声已经没有了,花朵和绿叶上的纹理也被平滑了,但是花朵和绿叶的边缘还是很清晰的。所以记住中值滤波的特点:消除椒盐噪声、保留边缘


原创不易,请勿抄袭。共同进步,相互学习。

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值