社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python----OpenCV(图像増强——图像平滑、均值滤波、高斯滤波、中值滤波、双边滤波)

小小的python学习社 • 3 周前 • 96 次点击  
资料已经打包好了,需要的关注公众号发送“111”领取

一、图像平滑

图像平滑处理(Smoothing Images),也称为图像模糊处理、图像滤波(Images Filtering),就是在保留图像原有信息的情况下,过滤掉图像内部的噪声,所得到的图像称 为平滑图像。
图像处理中平滑操作就是一种预处理的手段,目的是为后续的处理工作做铺垫。
平滑的目的是什么
  • 噪声去除:图像在采集过程中可能会受到各种噪声的影响,平滑操作能够有效减小噪声对图像质量的影响。

  • 特征提取:通过平滑去除细节,有助于在后续处理(如边缘检测、形态学处理等)中更好地提取关键特征。

  • 图像压缩:某些压缩算法依赖于图像的平滑化,以降低数据冗余。

常见滤波
  • 均值滤波

  • 高斯滤波

  • 中值滤波

  • 双边滤波

二、均值滤波

 均值滤波是一种常用的线性滤波技术,主要用于平滑信号,从而减少噪声。这种方法通过将信号中某个点的值替换为其邻域内所有点的平均值,来消除噪声波动。
 但需要注意的是,由于它取的是“平均”,所以在消除噪声的同时,也会不可避免地模糊掉一些信号的细节

2.1、均值滤波核心思想

 均值滤波是一种简单的平滑技术,通过将图像中某个像素与其邻域像素的平均值替换,从而使图像变得模糊。它的核心思想是用一个固定大小的窗口(例如 3x3 或 5x5)在图像上滑动,然后将窗口内的所有像素值的平均值赋给当前像素。
1、选择窗口大小
均值滤波的第一步是选择一个滑动窗口的大小,通常为3x3、5x5等。窗口的大小决定了参与平均计算的像素点数量。一般选择奇数大小的窗口,以便有一个明确的中心点。
2、窗口移动

均值滤波的窗口需要在信号或图像上逐步移动。窗口通常从信号或图像的左上角开始,一步一步地向右移动,然后再向下移动,直到覆盖整个信号或图像。

如果步长加大,会使得计算结果的精度下降,导致滤波效果不佳。

3、计算平均值
在窗口确定的位置,将窗口中的所有数值相加,然后除以窗口中的数值个数,得到均值。这个均值将作为窗口中心点的新的数值。这就像我们做菜时,将所有食材切碎、混合,然后尝一尝,确定一个统一的“味道”。

2.2、适用场景

  • 椒盐噪声:均值滤波对随机的黑白噪声(如椒盐噪声)有较好的去除效果,因为它可以通过邻域平均将这些极端值抹去。
  • 图像处理和分析:在图像预处理阶段,均值滤波常常作为去噪步骤,用于准备更清晰的图像以供进一步处理,例如边缘检测、图像分割等。
import cv2 # 导入OpenCV库

img = cv2.imread('./images/jiaoyan_pands.jpg')
# 对图像进行均值模糊# (5, 5) 是模糊核的大小,它决定了模糊的程度。# 数字越大,模糊效果越明显。res = cv2.blur(img, (55))
# 显示原始图像cv2.imshow('img', img)
# 显示模糊后的图像cv2.imshow('res', res)
# 等待按键# 0 表示无限等待,直到用户按下任意按键。# 如果设置为正整数,则表示等待的毫秒数。cv2.waitKey(0)
# 销毁所有OpenCV窗口cv2.destroyAllWindows()

三、高斯滤波

3.1、概念

高斯滤波(Gaussian filter) 包含许多种,包括低通、带通和高通等,我们通常图像上说的高斯滤波,指的是高斯模糊(Gaussian Blur) ,是一种高斯低通滤波 ,其过滤调图像高频成分(图像细节部分),保留图像低频成分(图像平滑区域),所以对图像进行 ‘高斯模糊’ 后,图像会变得模糊。

高斯模糊对于抑制 高斯噪声 (服从正态分布的噪声) 非常有效。
这个矩阵的每个数字表示该位置上像素点的权重。中间的数字权重大,表示图像中心的 像素影响较大,而周围像素的影响较小。 
高斯模糊本质上就是利用高斯函数生成的高斯核(高斯模板)对图像进行卷积操作。
应用场景
  1. 噪声去除:在图像预处理阶段,常用于去除高斯噪声。
  2. 边缘检测前处理:在边缘检测算法(如Canny算法)之前,通常会先应用高斯滤波来去除噪声,提高边缘检测的效果。
import cv2 # 导入OpenCV库
img = cv2.imread('./images/jiaoyan_pands.jpg')
# 对图像进行高斯模糊# (5, 5) 是高斯核的大小,它决定了模糊的程度。# sigmaX=0 表示OpenCV会根据核的大小自动计算X方向的标准差。# 高斯模糊相比均值模糊,在平滑图像的同时更能保留图像的边缘信息。gres = cv2.GaussianBlur(img, (55), sigmaX=0)
# 显示原始图像cv2.imshow('img', img)
# 显示高斯模糊后的图像cv2.imshow('gres', gres)
# 等待按键# 0 表示无限等待,直到用户按下任意按键。cv2.waitKey(0)
# 销毁所有OpenCV窗口cv2.destroyAllWindows()

四、中值滤波

中值滤波是一种常用的图像处理技术,特别用于去除图像中的噪声。其基本原理是通过替换每个像素的值为其邻域内像素的中值来平滑图像,减少噪声。
中值滤波的步骤
  1. 对于图像中的每个像素点,选取一个邻域窗口(通常是3x3、5x5或7x7的窗口)。
  2. 将窗口内的所有像素值排序。
  3. 用排序后的中间值替代当前像素的值。
这种滤波方法尤其对椒盐噪声(即图像中有白点和黑点)效果显著,因为它能有效去除这些异常值,而不影响图像的整体结构。

中值滤波的优缺点

  • 优点:能有效去除椒盐噪声,保留图像边缘信息。
  • 缺点:处理速度较慢,尤其在窗口较大时,计算量会增加。
import cv2 # 导入OpenCV库

img = cv2.imread('./images/jiaoyan_pands.jpg')
# 对图像进行中值模糊# 5 是模糊核的大小(必须是奇数)。# 中值模糊对于去除椒盐噪声(salt-and-pepper noise)特别有效,# 因为它用像素邻域内的中值来替代中心像素的值,# 从而有效地消除离群的噪声点,同时又能较好地保留图像边缘。medres = cv2.medianBlur(img, 5)
# 显示原始图像cv2.imshow('img', img)
# 显示中值模糊后的图像cv2.imshow('medres', medres)
# 等待按键# 0 表示无限等待,直到用户按下任意按键。cv2.waitKey(0)
# 销毁所有OpenCV窗口cv2.destroyAllWindows()

五、双边滤波

 双边滤波(Bilateral Filtering)是一种在保持边缘的同时去除噪声的图像平滑技术。与传统的高斯滤波不同,双边滤波在空间上进行平滑的同时,也考虑像素值的差异,从而有效地保护边缘信息。
双边滤波的核心思想是:在滤波时,不仅考虑像素之间的空间距离,还考虑像素值的相似性。具体来说,双边滤波的权重由两部分组成

双边滤波主要用于以下几个领域:

  1. 去噪:适用于去除图像中的噪声,特别是图像中包含大量高频噪声时。

  2. 图像平滑:在保持边缘的同时平滑图像,常用于图像美化。

  3. 图像增强:增强图像中的特征,突出重要部分,尤其是在边缘部分。

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
import cv2 # 导入OpenCV库

img = cv2.imread('./images/nezha.png')
# 对图像进行双边滤波# 双边滤波是一种非线性的平滑滤波方法,它在平滑图像的同时能够很好地保留边缘。# 参数解释:# 1. img: 输入图像。# 2. 15: 滤波器核的直径。该值越大,参与计算的像素越多,去噪效果越明显,但计算量也越大。# 3. 30: 颜色空间标准差 (sigmaColor)。该值越大,在颜色相差较大的像素之间进行模糊的可能性越大。#        较大的值意味着更多的颜色会被混合在一起。# 4. 75: 坐标空间标准差 (sigmaSpace)。该值越大,越远的像素会相互影响,模糊效果越明显。#        它决定了在多大的空间范围内进行模糊。# 双边滤波的优点在于它结合了空间距离和像素颜色相似度来决定像素的权重,# 从而实现了在去除噪声的同时保留图像的边缘细节。biltblur = cv2.bilateralFilter(img, 153075# 修正了sigmaSpace参数为75,使其更常见且避免过大的模糊
# 显示原始图像cv2.imshow('img', img)
# 显示双边滤波后的图像cv2.imshow('biltblur', biltblur)
# 等待按键# 0 表示无限等待,直到用户按下任意按键。cv2.waitKey(0)
# 销毁所有OpenCV窗口cv2.destroyAllWindows()
资料已经打包好了,需要的关注公众号发送“111”领取
 结语 

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python学习视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185363
 
96 次点击