【Emgu CV教程】6.2、图像平滑之最大值滤波

本文介绍了EmguCV库中缺失的简单最大值滤波功能,通过15、33和5*5滤波核实例展示其原理,用于消除暗斑(椒噪声)并可能增强亮斑。作者提供了C#代码实现,并展示了滤波对带噪声图像的影响。


前言

提示:Emgu CV中有很多滤波函数,但是偏偏没有最简单的最大值、最小值滤波。

今天讲最简单的最大值滤波,也就是像素点Point(X,Y)和周边的像素点进行比较,取最大的值替换掉Point(X,Y)的值。所以,最大值滤波,可以消除椒噪声,也就是去除暗斑,但会增强亮斑。


一、滤波核及原理

滤波核也叫滤波器,是Emgu CV中决定如何选择邻域像素点值判断的依据,滤波的过程称为卷积,这个在机器学习领域也是一个常见的操作,意思和这里一样。

滤波核包括两个概念:

  • 水平方向取值范围和垂直方向取值范围。
  • 每个邻域像素值的权重。

假如这里有一张原始图片,是单通道的灰度图,某个像素点P(x,y)值是66,见下图:
在这里插入图片描述
假如我的滤波核是15,也就是以66这个像素点为中心,水平方向取1个邻域,垂直方向取5个邻域,那么取出来的数据就是:
在这里插入图片描述
最大值滤波时,每个点像素值权重是1,很显然,这里的最大值就是226,目标图片中P(x,y)这个点的值就是226。
如果滤波核是3
3,那取出来的数据就是:
在这里插入图片描述
最大值滤波结果就变成了211,如果滤波核是5*5呢,结果就是254。这就能看出来几个问题:

选择不同的滤波核,有不同的结果。
滤波核越大,选取的范围越大,计算量也越大。
滤波核都是奇数,因为目标点是中心,左右的取值距离和上下的取值距离是相同的。

二、举例

1.原始素材

原始素材定义为srcMat,如下:
在这里插入图片描述
这是一个脸上长了雀斑的卡通人物,注意哈,雀斑颜色偏暗,最适合最大值滤波。

2.代码

C#内最大值滤波代码如下:

int ksizeX = 3;
int ksizeY = 3;
int width = srcMat.Cols;
int height = srcMat.Rows;
Mat dstMat = new Mat(new System.Drawing.Size(width, height), DepthType.Cv8U, 1);
Mat tempMat = srcMat.Clone();
Image<Bgr, int> dstImage = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值