均值模糊 是卷积核的系数完全一致,高斯模糊考虑了中心像素距离的影响,对距离中心的像素使用高斯分布公式生成不同的权重系数给卷积核,然后用此卷积核完成图像卷积得到输出结果就是图像高斯模糊之后的输出。
均值模糊和高斯模糊都是常见的图像模糊技术,它们有以下区别和联系:
原理方面
• 均值模糊:
• 是一种简单的算术平均操作。比如使用一个3×3的滤波器,计算这个滤波器覆盖的9个像素值的总和,然后除以9(像素个数),得到的平均值就是中心像素的新值。它对滤波器覆盖范围内的所有像素一视同仁,同等对待每个像素对中心像素的影响。
• 高斯模糊:
• 基于高斯函数(正态分布函数)来确定每个像素的权重。在滤波器范围内,中心像素的权重最高,离中心像素越远的像素权重越低。例如,在一个3×3的高斯滤波器中,中心像素的权重可能是0.4,相邻像素权重可能是0.2,边缘像素权重可能是0.1。计算中心像素新值时,要将每个像素值乘以其权重后相加。
模糊效果方面
• 均值模糊:
• 会产生比较均匀的模糊效果。因为是简单平均,所以对图像细节的模糊程度比较一致。当滤波器尺寸增大时,模糊效果更明显,但也更容易丢失细节,使图像看起来很“平”。
• 高斯模糊:
• 产生的模糊效果更自然。由于考虑了像素的权重,在模糊的同时能够更好地保留图像的边缘和细节信息。即使使用相对较大的滤波器,边缘部分也不会像均值模糊那样被过度模糊。
应用场景方面
• 均值模糊:
• 常用于对细节要求不高,主要目的是快速降低图像噪声的情况。例如,对一些监控视频进行初步的噪声去除,让画面看起来更平滑一些。
• 高斯模糊:
• 应用更广泛。在图像编辑软件中,常用于制作背景虚化效果,突出主体。比如在人像摄影中,将背景高斯模糊,使人物更加突出;还用于一些需要保留一定细节的图像预处理过程。
GaussianBlur(src, dst, ksize, sigmaX[, sigmaY[, borderType]])。
• src:这是输入图像,即需要进行高斯模糊的原始图像,可以是彩色图像或者灰度图像。
• dst:是输出图像,也就是经过高斯模糊后的图像。如果不指定,函数会自动创建一个合适的输出图像。
• ksize:它代表高斯核的大小。高斯核是一个二维矩阵,大小必须是奇数,例如Size(3,3)或Size(5,5)。这个核会在图像上滑动,按照高斯函数的规则来计算每个像素的新值。
• sigmaX:表示高斯核在X(水平)方向的标准差。标准差决定了高斯函数的形状,进而影响像素权重的分布。较大的标准差会使像素的权重分布更分散,产生更强烈的模糊效果。
• sigmaY(可选):代表高斯核在Y(垂直)方向的标准差。如果这个参数为0,那么它的值会自动被设置为和sigmaX一样,这种情况适用于生成圆形对称的高斯核。
• borderType(可选):用于处理图像边界的像素,因为高斯核可能会超出图像边界。和blur函数中的borderType类似,不同的边界类型有不同的处理方式,比如复制边界像素、反射边界像素等。
void QUickdemo::Gaussian_Blur(Mat& image) {
Mat dst;
Mat dstImage;
GaussianBlur(image, dstImage, Size(0, 0), 15);
imshow("高斯模糊", dstImage);
// 使用 GaussianBlur 函数对输入图像 image 进行高斯模糊处理,结果存储在 dst 中。
// Size(5, 5) 表示高斯核的大小为 5×5。
// 15 是高斯核在水平方向的标准差,垂直方向标准差默认为 0,此时与水平方向标准差相同。
GaussianBlur(image, dst, Size(5, 5), 15);
// 在名为 "高斯模糊" 的窗口中显示经过高斯模糊处理后的图像 dst。
imshow("高斯模糊", dst);
}