文章目录
- 一、介绍
- 1.原理
- 2.函数介绍
- 二、举例
- 1.原始素材
- 2.代码
- 3.运行结果
一、介绍
1.原理
高斯滤波是Emgu CV里面最常用的滤波,因为它在平滑图像的同时,可以更好的保留轮廓和边缘信息。下面这段来自百度百科的介绍:
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 [1]通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
2.函数介绍
官方定义如下:
public static void GaussianBlur(
IInputArray src, // 输入图像
IOutputArray dst, // 输出图像
Size ksize, // 滤波核的大小,也就是选取的邻域像素的高度和宽度。
double sigmaX, // X方向上的高斯核标准偏差
double sigmaY = 0.0, // Y方向上的高斯核标准差;如果sigmaY为零,则将其设置为等于sigmaX;如果两个sigmas为零,则分别从ksize.width和ksize.height计算得出;为了完全控制结果,而不管将来可能对所有这些语义进行的修改,建议指定所有ksize,sigmaX和sigmaY。
BorderType borderType = BorderType.Reflect101 // 边界样式,一般选默认
)
注意:
1、均值滤波和方框滤波,其邻域内每个像素的权重是相等的。但是在高斯滤波中,中心点的权重值加大,远离中心点的权重值减小,然后再计算邻域内各个像素值不同权重的和。
2、数学基础好的读者,可以看看高斯函数以及滤波核是如何计算出来的。
二、举例
1.原始素材
原始素材定义为srcMat,如下:
还是这个有椒盐噪声的向日葵图片。
2.代码
Emgu CV高斯滤波代码如下:
int ksizeX = 13;
int ksizeY = 13;
Mat dstMat = srcMat.Clone();
CvInvoke.GaussianBlur(dstMat, dstMat, new System.Drawing.Size(ksizeX, ksizeY), 0, 0);
CvInvoke.Imshow("GaussianBlur image, " + dstMat.Size.ToString(), dstMat);
3.运行结果
代码采用了13 * 13的滤波核,椒盐噪声已经去掉了很多,或者说椒盐噪声痕迹也变得比较浅了,花朵和绿叶的边缘,还是很清晰的。读者可以对比一下13 * 13滤波核的均值滤波,边缘明显会变得模糊很多。下面是一个对比,对一张绿色叶子的分别进行均值滤波和高斯滤波,滤波核都是13 * 13,高斯滤波边缘(或者说细节)保留功能效果很明显,这就是为什么高斯滤波在图像预处理中用的更广泛的原因。
原创不易,请勿抄袭。共同进步,相互学习。