前言
提示:Emgu CV中有很多滤波函数,但是偏偏没有最简单的最大值、最小值滤波。
今天讲最简单的最大值滤波,也就是像素点Point(X,Y)和周边的像素点进行比较,取最大的值替换掉Point(X,Y)的值。所以,最大值滤波,可以消除椒噪声,也就是去除暗斑,但会增强亮斑。
一、滤波核及原理
滤波核也叫滤波器,是Emgu CV中决定如何选择邻域像素点值判断的依据,滤波的过程称为卷积,这个在机器学习领域也是一个常见的操作,意思和这里一样。
滤波核包括两个概念:
- 水平方向取值范围和垂直方向取值范围。
- 每个邻域像素值的权重。
假如这里有一张原始图片,是单通道的灰度图,某个像素点P(x,y)值是66,见下图:

假如我的滤波核是15,也就是以66这个像素点为中心,水平方向取1个邻域,垂直方向取5个邻域,那么取出来的数据就是:

最大值滤波时,每个点像素值权重是1,很显然,这里的最大值就是226,目标图片中P(x,y)这个点的值就是226。
如果滤波核是33,那取出来的数据就是:

最大值滤波结果就变成了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 =

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

被折叠的 条评论
为什么被折叠?



