十七、计算机视觉-图像平滑处理

提示:云峰

文章目录

  • 前言
  • [一、均值滤波(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()
相关推荐
y_dd17 分钟前
【生成式人工智能-三-promote 神奇咒语&RL增强式学习&RAG】
人工智能·学习
pwd`×续缘`30 分钟前
NLP--加载与使用预训练模型
人工智能·python·自然语言处理·transformer
XLTYQYB40 分钟前
XLT开关矩阵
人工智能·线性代数·矩阵
TechLead KrisChang1 小时前
CUDA常见编译器配置问题一览
linux·运维·服务器·人工智能·深度学习·机器学习
请一直在路上1 小时前
NLP——文本预处理
人工智能
broad-sky1 小时前
人脸识别Arcface的Tensorrt C++
图像处理·pytorch·深度学习·opencv·算法·计算机视觉·边缘计算
真诚的灰灰2 小时前
端到端自动驾驶:挑战与前沿
人工智能·机器学习·语言模型·自动驾驶
HyperAI超神经2 小时前
学术分享丨清华大学博士后李雨哲详解 Cell/Nature 子刊论文,探索基因组学的 AI 应用
人工智能·深度学习·神经网络·机器学习·生成对抗网络·语言模型·自然语言处理
yongyoudayee2 小时前
AI技术重塑招聘流程:效率与精准度的双重提升
人工智能·求职招聘·数智招聘
WSY88x2 小时前
揭秘“循环购”新风尚:消费即享超值回馈
大数据·人工智能·物联网·金融·产品经理