一、图像平滑
图像平滑处理(Smoothing Images),也称为图像模糊处理、图像滤波(Images Filtering),就是在保留图像原有信息的情况下,过滤掉图像内部的噪声,所得到的图像称 为平滑图像。图像处理中平滑操作就是一种预处理
的手段,目的是为后续的处理工作做铺垫。噪声去除:图像在采集过程中可能会受到各种噪声的影响,平滑操作能够有效减小噪声对图像质量的影响。
特征提取:通过平滑去除细节,有助于在后续处理(如边缘检测、形态学处理等)中更好地提取关键特征。
图像压缩:某些压缩算法依赖于图像的平滑化,以降低数据冗余。
二、均值滤波
均值滤波是一种常用的线性滤波技术,主要用于平滑信号,从而减少噪声。这种方法通过将信号中某个点的值替换为其邻域内所有点的平均值,来消除噪声波动。
但需要注意的是,由于它取的是“平均”,所以在消除噪声的同时,也会不可避免地模糊掉一些信号的细节。2.1、均值滤波核心思想
均值滤波是一种简单的平滑技术,通过将图像中某个像素与其邻域像素的平均值替换,从而使图像变得模糊。它的核心思想是用一个固定大小的窗口(例如 3x3 或 5x5)在图像上滑动,然后将窗口内的所有像素值的平均值赋给当前像素。均值滤波的第一步是选择一个滑动窗口的大小,通常为3x3、5x5等。窗口的大小决定了参与平均计算的像素点数量。一般选择奇数大小的窗口,以便有一个明确的中心点。均值滤波的窗口需要在信号或图像上逐步移动。窗口通常从信号或图像的左上角开始,一步一步地向右移动,然后再向下移动,直到覆盖整个信号或图像。
如果步长加大,会使得计算结果的精度下降,导致滤波效果不佳。
在窗口确定的位置,将窗口中的所有数值相加,然后除以窗口中的数值个数,得到均值。这个均值将作为窗口中心点的新的数值。这就像我们做菜时,将所有食材切碎、混合,然后尝一尝,确定一个统一的“味道”。2.2、适用场景
- 椒盐噪声:均值滤波对随机的黑白噪声(如椒盐噪声)有较好的去除效果,因为它可以通过邻域平均将这些极端值抹去。
- 图像处理和分析:在图像预处理阶段,均值滤波常常作为去噪步骤,用于准备更清晰的图像以供进一步处理,例如边缘检测、图像分割等。
import cv2
img = cv2.imread('./images/jiaoyan_pands.jpg')
res = cv2.blur(img, (5, 5))
cv2.imshow('img', img)
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、高斯滤波
3.1、概念
高斯滤波(Gaussian filter) 包含许多种,包括低通、带通和高通等,我们通常图像上说的高斯滤波,指的是高斯模糊(Gaussian Blur) ,是一种高斯低通滤波 ,其过滤调图像高频成分(图像细节部分),保留图像低频成分(图像平滑区域),所以对图像进行 ‘高斯模糊’ 后,图像会变得模糊。
高斯模糊
对于抑制 高斯噪声
(服从正态分布的噪声) 非常有效。这个矩阵的每个数字表示该位置上像素点的权重。中间的数字权重大,表示图像中心的 像素影响较大,而周围像素的影响较小。 高斯模糊本质上就是利用高斯函数生成的高斯核(高斯模板)对图像进行卷积操作。- 噪声去除:在图像预处理阶段,常用于去除高斯噪声。
- 边缘检测前处理:在边缘检测算法(如Canny算法)之前,通常会先应用高斯滤波来去除噪声,提高边缘检测的效果。
import cv2
img = cv2.imread('./images/jiaoyan_pands.jpg')
gres = cv2.GaussianBlur(img, (5, 5), sigmaX=0)
cv2.imshow('img', img)
cv2.imshow('gres', gres)
cv2.waitKey(0)
cv2.destroyAllWindows()
四、中值滤波
中值滤波是一种常用的图像处理技术,特别用于去除图像中的噪声。其基本原理是通过替换每个像素的值为其邻域内像素的中值来平滑图像,减少噪声。- 对于图像中的每个像素点,选取一个邻域窗口(通常是3x3、5x5或7x7的窗口)。
这种滤波方法尤其对椒盐噪声(即图像中有白点和黑点)效果显著,因为它能有效去除这些异常值,而不影响图像的整体结构。中值滤波的优缺点
- 优点:能有效去除椒盐噪声,保留图像边缘信息。
- 缺点:处理速度较慢,尤其在窗口较大时,计算量会增加。
import cv2
img = cv2.imread('./images/jiaoyan_pands.jpg')
medres = cv2.medianBlur(img, 5)
cv2.imshow('img', img)
cv2.imshow('medres', medres)
cv2.waitKey(0)
cv2.destroyAllWindows()
五、双边滤波
双边滤波(Bilateral Filtering)是一种在保持边缘的同时去除噪声的图像平滑技术。与传统的高斯滤波不同,双边滤波在空间上进行平滑的同时,也考虑像素值的差异,从而有效地保护边缘信息。双边滤波的核心思想是:在滤波时,不仅考虑像素之间的空间距离,还考虑像素值的相似性。具体来说,双边滤波的权重由两部分组成双边滤波主要用于以下几个领域:
去噪:适用于去除图像中的噪声,特别是图像中包含大量高频噪声时。
图像平滑:在保持边缘的同时平滑图像,常用于图像美化。
图像增强:增强图像中的特征,突出重要部分,尤其是在边缘部分。
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
import cv2
img = cv2.imread('./images/nezha.png')
biltblur = cv2.bilateralFilter(img, 15, 30, 75)
cv2.imshow('img', img)
cv2.imshow('biltblur', biltblur)
cv2.waitKey(0)
cv2.destroyAllWindows()
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python学习视频合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

资料获取方式:↓↓↓↓
1.关注下方公众号↓↓↓↓,在后台发送:“111” 即可免费领取