CV10 图像模糊(均值、高斯、中值、双边滤波)

简介: 当我们只想得到感兴趣的物体时,通过图像模糊,可以将那些尺寸和亮度较小的物体过滤掉,较大的物体则易于检测。除了降低噪声,这就是图像平滑(模糊)的另一个重要应用:减少噪点,突出ROI,以便目标提取。

通过将图像与低通滤波器内核进行2D卷积来实现图像模糊。这对于消除噪音很有用。它实际上从图像中消除了高频部分(例如噪声,边缘)。因此,在此操作中边缘有些模糊。(有一些模糊技术也可以不模糊边缘)。OpenCV主要提供四种类型的模糊技术:均值模糊、高斯模糊、中值模糊和双边滤波模糊。


当我们只想得到感兴趣的物体时,通过图像模糊,可以将那些尺寸和亮度较小的物体过滤掉,较大的物体则易于检测。除了降低噪声,这就是图像平滑(模糊)的另一个重要应用:减少噪点,突出ROI,以便目标提取。


一 均值模糊


  • 理论推导


均值模糊原理很简单,就是将将中心像素点周围的值累加,然后平均,去替代中心像素的值


假设有这么一块区域:


image.png


那么,新的中心像素为:


image.png


所以经过均值模糊后新的图像区域为


image.png


  • 效果对比


7a987a0c1a267bf05d5bfdee82a1e4d0.png


均值模糊适用性很广,运行速度快,但效果较差


二 高斯模糊


高斯模糊,通过二维高斯函数,根据已定义的卷积核半径,正态分布计算出一个卷积核,再对目标图像进行2D卷积,实现高斯模糊


  • 流程


64316dafcba81ecc3c19f873530e7b7f.png


  • 理论推导


高斯模糊实质上就是一种高级的均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小,每一个中心像素都由其本身和邻域内的其他像素值经过加权平均后得到。


一维高斯函数:


image.png


可以通过一维函数推导得到二维高斯函数


二维高斯函数:


image.png


注意是以中心点为原点,所以中心点的坐标为(0,0)、


在一维高斯函数中,u是x的平均值,故u=0


根据预设的卷积核半径,二维高斯函数可得2D卷积核,然后再扔进图像里进行加权运算


注意:整个卷积核的总和应该等于1。若大于1,图像变亮;小于1,图像变暗。

  • 高斯噪声


高斯模糊对高斯噪声具有良好的模糊效果,那高斯噪声是什么呢?


以下代码给图像添加了高斯噪声:


import cv2
import numpy as np
def clamp(pv):
    if pv > 255:
        return 255
    elif pv < 0:
        return 0
    else:
        return pv
def gaussian_noise(image, mean=0, var=0.005):
    image = np.array(image/255,dtype=float)
    noise = np.random.normal(mean,var**0.5,image.shape)
    out = image + noise
    if out.min() < 0:
        low_clip = -1.
    else:
        low_clip = 0.
    out = np.clip(out,low_clip,1.0)
    out = np.uint8(out*255)
    return out
def nothing(pp):
    pass
if __name__ == '__main__':
    img = cv2.imread("s1.png")
    cv2.namedWindow("Preview")
    cv2.createTrackbar("mean","Preview",0,5,nothing)
    cv2.createTrackbar("var","Preview",0,5,nothing)
    while(1):
        mean = cv2.getTrackbarPos("mean","Preview")
        var = cv2.getTrackbarPos("var","Preview")
        img_r = gaussian_noise(img,mean/10,var/100)
        cv2.imshow("Result",img_r)
        if cv2.waitKey(20) == ord('q'):
            break
    cv2.destroyAllWindows()


让我们看一下图片


530026c02157282dbe632bd3ad648113.png


高斯噪声,就是图像上红绿色的斑点


这里跑个题~


2008年家里有第一台电视机,TCL牌子的,每次下雨天,或者几条信号线接触不良的时候,就经常会出现这种红绿色的噪点,这就是高斯噪声。


然后,高斯模糊消除噪声


1b76f33e2d547005623495670a76ea34.png


可见,噪声消除了,图片也模糊了


三 中值模糊


中值模糊可以有效消除椒盐噪声


那什么是椒盐噪声呢?


字面意思:椒就是花椒粒,黑色的,而盐是白色的


所以我得出:高斯噪声是红绿色的,呈点状;椒盐噪声是黑白色的,且呈粒状


大家可以观察下面两幅图像对比这两种噪声的区别


  • 椒盐噪声


fd0a5822d9d3f9223961adccc6235527.jpg


  • 高斯噪声


image.png


中值模糊之前讲过,有兴趣的可以自行查阅


CV7 中值滤波详解


四 双边滤波


官方文档


在去除噪声的同时保持边缘清晰锐利非常有效。但是,与其他过滤器相比,该操作速度较慢。我们已经看到,高斯滤波器采用像素周围的邻域并找到其高斯加权平均值。高斯滤波器仅是空间的函数,也就是说,滤波时会考虑附近的像素。它不考虑像素是否具有几乎相同的强度。它不考虑像素是否是边缘像素。因此它也模糊了边缘,这是我们不想做的。


双边滤波器在空间中也采用高斯滤波器,但是又有一个高斯滤波器,它是像素差的函数。空间的高斯函数确保仅考虑附近像素的模糊,而强度差的高斯函数确保仅考虑强度与中心像素相似的那些像素的模糊。由于边缘的像素强度变化较大,因此可以保留边缘。


双边滤波就是更高一级的高斯滤波


双边模糊在模糊的同时,保持纹理。但计算机需耗费较多时间和资源去计算


简而言之,双边滤波可以给人像美白,广泛用于给小姐姐PS磨皮中[Doge]


不废话,直接上图片看效果


232f49bb4f4bd8a1d74432aed52f2a53.png


有点心动的感觉~~~


五 程序应用


import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('B1.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# 1.均值模糊
# blur = cv2.blur(img,(5,5))
# 2.高斯模糊
# blur = cv2.GaussianBlur(img,(31,31),0)
# 3.中值模糊
# blur = cv2.medianBlur(img,5)
# 4.双边滤波模糊
blur = cv2.bilateralFilter(img,32,75,75)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]),plt.yticks([])
plt.show()


cv2.blur()函数


功能:均值滤波


输入参数:


1.图像名

2.卷积核半径


cv2.GaussianBlur()函数


功能:高斯模糊


输入参数:


1.图像名

2.高斯核的大小,格式为(width, height),其中 width 和 height 可以不同,两者都是正奇数;如果设为 0,则根据 输入参数3 得到。(数值越大,高斯模糊越强)

3.x和y轴的标准差


cv2.bilateralFilter()函数


功能:双边滤波


输入参数:

1.图像名


2.滤波强度,数值太大图片易卡通化,不真实(一般d=5/9)


3.sigma参数A


4.sigma参数B


  • 滤波强度


  1. 过大的滤波器(d>5)执行效率低
  2. 对于实时应用,建议取d=5
  3. 对于需要过滤严重噪声的离线应用,可取d=9


  • sigma参数


  1. 简单起见,可以令2个sigma的值相等
  2. 如果他们很小(小于10),那么滤波器几乎没有什么效果
  3. 如果他们很大(大于150),那么滤波器的效果会很强,使图像显得非常卡通化


结语


这几天会疯狂更,因为快开学了,到时候比赛+专业课,再学点东西都未必有时间了

相关文章
|
存储 监控 Linux
zabbix使用snmp监控Linux主机(二十)
使用snmp监控Linux主机 1.snmp协议介绍 SNMP(简单网络管理协议)也是应用层的一种协议,默认端口号为161,我们平时监控Linux主机都是安装一个agent客户端进行监控,但是有的公司还需要监控网络设备和Windows主机,这时就不得不采用snmp协议去监控设备了
917 0
zabbix使用snmp监控Linux主机(二十)
|
API 调度 C语言
C++实现进程调度模拟程序——哲学家进餐问题
C++实现进程调度模拟程序——哲学家进餐问题
583 0
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
21010 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
机器学习/深度学习 编解码 算法
万字长文解读图像超分辨率 Real-ESRGAN 论文笔记+代码阅读
万字长文解读图像超分辨率 Real-ESRGAN 论文笔记+代码阅读
2364 3
|
弹性计算 人工智能 数据挖掘
阿里云高校计划“云工开物”解读,适合学生及高校教师参考
阿里云推出“云工开物”高校计划,向学生和教师提供优惠,旨在支持高等教育和培养科技人才。学生通过学信网认证可获300元优惠券和3折云服务器优惠;教师享5折全线产品折扣。此外,还有“极速上云”活动和各类挑战赛,促进实践和创新。
阿里云高校计划“云工开物”解读,适合学生及高校教师参考
|
数据挖掘
2022亚太数学杯数学建模竞赛C题(思路、程序......)
2022亚太数学杯数学建模竞赛C题(思路、程序......)
577 0
|
关系型数据库 MySQL 数据库
【MySQL】:超详细MySQL完整安装和配置教程
【MySQL】:超详细MySQL完整安装和配置教程
43077 5
|
机器学习/深度学习 人工智能 自然语言处理
未来智能交互:AI技术的进展与应用展望
随着人工智能(AI)技术的迅猛发展,智能交互系统正逐步成为日常生活和工作中不可或缺的一部分。本文探讨了AI技术在智能交互领域的最新进展,以及未来可能的应用前景,涵盖了语音识别、自然语言处理和智能助理等关键技术的演进与应用案例。 【7月更文挑战第3天】
1011 0
|
机器学习/深度学习 算法
全连接层那些事(Fully Connected Layer)
全连接层那些事(Fully Connected Layer)
|
机器学习/深度学习 数据采集 监控
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)
5524 1
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)