提示:云峰
文章目录
- 前言
- [一、均值滤波(Mean Filtering)](#一、均值滤波(Mean Filtering))
- [二、高斯滤波器(Gaussian Filter):](#二、高斯滤波器(Gaussian Filter):)
- [三、中值滤波器(Median Filter)](#三、中值滤波器(Median Filter))
前言
在本节中,我们将探讨图像处理中的平滑处理技术。与之前介绍的膨胀、腐蚀以及其他几种算子一样,平滑处理同样是通过卷积核的运算实现的。如果在之前的课程中已经理解了卷积核的概念,以及他的原理,那么本课就会变得简单许多。我们已经学习了如何使用卷积核对图像进行膨胀、腐蚀等操作,这些操作都是通过将卷积核与图像进行某种运算来实现的。接下来,我们将探讨如何利用不同的卷积核和运算方式来实现平滑处理,从而改善图像质量并减少噪声的影响。常见的滤波有 ,均值滤波、方框滤波 高斯滤波等。用过photoshop的可能就感觉熟悉了,这不是ps滤镜中的模糊吗?是的,你可以吧平滑当成ps中的模糊操作。他们底层实现方式应该都是一样的。
提示:以下是本篇文章正文内容,下面案例可供参考
一、均值滤波(Mean Filtering)
1、均值滤波(Mean Filtering)
将像素点周围的像素值取平均值,从而减少噪声的影响。
我们看下图
图像平滑处理和之前课程讲的其他操作原理差不多,通过卷积操作将图像中每个像素点周围的像素值进行加权平均,从而减少图像中的噪声并平滑图像。
比如上面的红框是一个3x3的卷积核覆盖的图像的9个像素点。卷积核本身内容都是1,代表他的权重都是1,所以计算均值滤波的计算方式就是(20+10+189+251+12+89+151+231+221)/9=130
通过计算 上图卷积核中心位置的12的最新值就是130.
比如一张图片上有很多噪声点。我们上图其中卷积核中心的12 颜色明显和周围有很大的差距,可能就是一个噪声点,通过我们的平滑操作,中间的点就和其他点颜色比较接近了,这样这个噪声点就看不到了。
但是均值滤波卷积核的每个元素都是相同的权重,因此它会将每个像素点周围的像素值取平均。这意味着,图像中每个像素的值都会受到周围像素值的影响,从而导致图像中的高频信息(例如边缘、细节等)被平滑掉,使得图像变得模糊。
均值滤波的方法是blur,是模糊的意思,所以也可以说是一种模糊的操作。
我们看下 代码怎么实现:
python
# 定义卷积核大小
kernel_size = (3, 3)
# 使用OpenCV的均值滤波函数进行滤波
output_image = cv2.blur(input_image, kernel_size)
# 显示原始图像和经过均值滤波后的图像
cv2.imshow('Input Image', input_image)
cv2.imshow('Output Image (Average Filter)', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
我们看下 上图第一张是原图 上面有很多椒盐噪点,通过操作 是不是噪点就不太明显了。
二、高斯滤波器(Gaussian Filter):
使用高斯函数来计算像素周围邻域的权重,然后将权重化为卷积核。
高斯函数是一种数学函数,它描述了自然界中许多现象的分布情况。简单来说,高斯函数可以让我们知道某些东西的值在均值附近是最常见的,而离均值越远,出现的概率就越低。
我们想一下上面说的均值滤波,最终值是9个像素点的平均值。这样是不是有个问题。比如下图中心点12 距离89、251、10、231最近,正常情况中心点的的新值应该更接近这4个点的颜色才对,但是均值滤波不管这些 把周围全部的点都平等加进来计算了。
而高斯滤波的卷积核中的数值是由高斯函数计算得到的,他有一个合理的权重,离中心点越近他的权重越高。我们看下高斯函数,如下图
卷积核的中心点对应着高斯函数的峰值,即具有最大的权重。从卷积核的中心向外部扩展,权重逐渐减小。钟形曲线中心代表着中心点 具有最高的权重,随着距离越远,他的权重逐渐下降。这就是高斯滤波的卷积核的计算方式。
高斯滤波的实现
python
# 高斯滤波
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
# 显示原始图像和滤波后的图像
cv2.imshow("Original Image", image)
cv2.imshow("Blurred Image", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、中值滤波器(Median Filter)
在图像中的某个区域内,大多数像素都是由同一种类型的物体或背景所组成的,因此该区域内的像素值应该是相似的。而噪声通常以异常值的形式出现在图像中,例如椒盐噪声(salt-and-pepper noise)会使部分像素的值变为最大或最小值。
所以中值滤波的操作方式是 一个卷积核在图像上滑动,把卷积核内的所有像素值按照大小进行排序,找到其中间位置的像素值,即中值。当前像素的值就是中值。还是刚才的图 我们看一下
上图卷积核中心的12 的新值 应该是这些值中间的一个值 也就是151. 这样做的效果是,噪声点的像素值不再对图像产生影响,而且在相邻像素值相似的区域中,中值滤波器可以有效地保留图像的边缘信息。
在图像中,如果存在一片区域内的像素值非常相似,即使这些像素值不是由噪声引起的,中值滤波器也会对这些区域进行平滑处理。这是因为中值滤波器会在滑动窗口中对所有像素值进行排序,并将窗口中间位置的像素值替换为中值,这样做会导致在相邻像素值相似的区域中,中值滤波器也会对图像进行平滑处理。
然而,与其他平滑滤波器(如高斯滤波器)不同的是,中值滤波器在保留图像边缘信息方面表现更好。这是因为中值滤波器只是简单地取中间位置的像素值,而不像其他滤波器那样对像素值进行加权平均,因此它在处理图像边缘时不会引入过多的模糊效果,能够更好地保留图像的边缘信息。
我们看下实现代码和效果
python
# 中值滤波
blurred_image = cv2.medianBlur(image, 5) # 5 是滤波器的核大小
# 显示原始图像和滤波后的图像
cv2.imshow("Original Image", image)
cv2.imshow("Blurred Image", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()