图像去模糊中的均值滤波、高斯滤波、双边滤波简单介绍及代码演示

news2024/11/15 20:11:53

文章目录

  • 图像去模糊中的均值滤波、高斯滤波和双边滤波简单介绍
    • 均值滤波
    • 高斯滤波
    • 双边滤波
    • 总结

图像去模糊中的均值滤波、高斯滤波和双边滤波简单介绍

图像模糊是指图像中的细节和边缘被平滑和模糊化,通常是由于图像采集设备或者图像传输过程中的噪声和抖动引起的。为了恢复图像的细节和边缘,可以使用图像去模糊技术对模糊图像进行处理。本文将介绍一些常见的图像去模糊技术和它们的实现方法。

均值滤波

均值滤波是一种常见的线性滤波器,它通过用图像局部区域的像素平均值替换中心像素来减小噪声和细节。在均值滤波中,每个像素的值被替换为它周围像素的平均值。均值滤波器的大小通常是一个正方形或矩形,大小从 3x3 到 15x15 不等。均值滤波器的大小越大,图像的平滑程度越高,但是细节和边缘也会被更多地模糊化。

在 OpenCV 中,可以使用 cv2.blur 函数或者 cv2.boxFilter 函数来实现均值滤波。例如,以下代码演示了如何使用 cv2.blur 函数对图像进行均值滤波:

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读入图像
img = cv2.imread('img.png')

# 对图像进行均值模糊处理
blur = cv2.blur(img, (5, 5))

# 在 Matplotlib 中创建子图,分别显示原始图像和模糊图像
plt.subplot(1, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('sharp image')
plt.subplot(1, 2, 2)
plt.imshow(blur, cmap='gray')
plt.title('blur image')

# 将显示的图像保存到文件中,并设置分辨率为 300 dpi
plt.savefig('save.png', dpi=300)

# 显示图像
plt.show()

在这个代码中,cv2.blur 函数接受两个参数,第一个参数是待滤波的图像,第二个参数是滤波器的大小。在这个例子中,我们使用了一个大小为 5x5 的滤波器对图像进行了均值滤波。

虽说是滤波,但是你是用高清图片会变模糊的。生成的图片效果如下所示。

在这里插入图片描述

cmap 是 Matplotlib 库中用于指定颜色映射的参数。在 plt.imshow 函数中,它用于指定显示图像时使用的颜色映射。如果不指定 cmap 参数,则默认使用颜色映射 viridis。在 gray 颜色映射中,灰度图像中的每个像素值都被映射到一个对应的灰色和黑色的颜色值之间。

在参数 cmap 中,可以指定多个不同的颜色映射。除了 gray 之外,常用的颜色映射包括:

  • viridis:一种从蓝色到黄色的颜色映射,用于表示数据值的大小或者密度。
  • jet:一种从蓝色到红色的颜色映射,用于表示数据值的大小或者密度。
  • hot:一种从黑色到红色的颜色映射,用于表示数据值的大小或者密度。
  • cool:一种从青色到红色的颜色映射,用于表示数据值的大小或者密度。
  • rainbow:一种七色彩虹色的颜色映射,用于表示数据值的大小或者密度。

高斯滤波

高斯滤波是一种常见的线性滤波器,它通过对图像进行加权平均来减小噪声和细节。和均值滤波不同,高斯滤波使用的权重是高斯函数。在高斯滤波中,像素的值被替换为它周围像素的加权平均值,权重由高斯函数计算得出。高斯滤波器的大小通常是一个正方形或矩形,大小从 3x3 到 15x15 不等。高斯滤波器的大小越大,图像的平滑程度越高,但是细节和边缘也会被更多地模糊化。

在 OpenCV 中,可以使用 cv2.GaussianBlur 函数来实现高斯滤波。例如,以下代码演示了如何使用 cv2.GaussianBlur 函数对图像进行高斯滤波:

import cv2
import matplotlib.pyplot as plt

# 读入图像
img = cv2.imread('img.png')

# 对图像进行高斯模糊处理
blur = cv2.GaussianBlur(img, (5, 5), 0)

# 在 Matplotlib 中创建子图,分别显示原始图像和模糊图像
plt.subplot(1, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('sharp image')
plt.subplot(1, 2, 2)
plt.imshow(blur, cmap='gray')
plt.title('blur image')

# 将显示的图像保存到文件中,并设置分辨率为 300 dpi
plt.savefig('gauss_img.png', dpi=300)

# 显示图像
plt.show()

在这个代码中,cv2.GaussianBlur 函数接受三个参数,第一个参数是待滤波的图像,第二个参数是滤波器的大小,第三个参数是高斯函数的标准差。在这个例子中,我们使用了一个大小为 5x5 的滤波器和标准差为 0 的高斯函数对图像进行了高斯滤波。

在这里插入图片描述

cv2.GaussianBlur() 是 OpenCV 中用于进行高斯滤波的函数,其语法如下:

dst = cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

其中,各参数的含义如下:

  • src:输入图像,可以是单通道或多通道图像,数据类型为 uint8float32
  • ksize:高斯核的大小,可以使用 (width, height) 来指定,也可以使用一个正整数来表示核的宽和高相等。核的大小必须是正且奇数。
  • sigmaX:高斯核在 X 方向上的标准差,若值为 0,则根据核的大小自动计算标准差。
  • sigmaY:高斯核在 Y 方向上的标准差,若值为 0,则使用与 sigmaX 相同的值。
  • borderType:边界填充方式,可以取以下值之一:
    • cv2.BORDER_CONSTANT:常数填充,填充值由 value 参数指定。
    • cv2.BORDER_REPLICATE:复制边界像素值填充。
    • cv2.BORDER_REFLECT:反射边界填充。
    • cv2.BORDER_WRAP:环绕边界填充。
    • cv2.BORDER_REFLECT_101cv2.BORDER_DEFAULT:反射边界填充,但不包括边缘像素。
    • cv2.BORDER_TRANSPARENT:透明边界填充。

在这里的代码中,cv2.GaussianBlur() 函数对输入的图像 img 进行高斯模糊处理,使用了 (5, 5) 的 5x5 大小的高斯核, sigmaX 为 0,表示根据核的大小自动计算标准差。最终得到的模糊图像保存在 blur 中。

sigmaX 是高斯核在 X 方向上的标准差,用于控制高斯核函数的形状。它的取值越大,表示高斯函数在 X 方向上的分布越平缓,核的权重分布越广,模糊程度越大。反之,sigmaX 取值越小,表示高斯函数在 X 方向上的分布越陡峭,核的权重分布越集中,模糊程度越小。如果 sigmaX 设为 0,则会根据核的大小自动计算标准差,此时核的形状会根据核的大小自动调整。

需要注意的是,在进行高斯模糊时,sigmaX 的值与图像的特征尺度有关系。如果输入的图像中包含较细的纹理或者边缘,那么需要选择一个比较小的 sigmaX 值,以保留这些细节。如果输入的图像中包含较粗的结构或者噪声,那么需要选择一个较大的 sigmaX 值,以平滑图像并减少噪声。如果 sigmaX 的值过大,会导致图像过度模糊,使得图像失去细节。因此,在实际应用中,可以通过不断尝试不同的 sigmaX 值,来获得更好的高斯模糊效果。

双边滤波

双边滤波是一种非线性滤波器,它可以减小噪声和细节的同时保留图像的边缘。在双边滤波中,像素的值被替换为它周围像素的加权平均值,权重由像素之间的距离和像素之间的灰度差异共同决定。因此,双边滤波可以减小噪声和细节,同时保留图像的边缘和细节。

在 OpenCV 中,可以使用 cv2.bilateralFilter 函数来实现双边滤波。例如,以下代码演示了如何使用 cv2.bilateralFilter 函数对图像进行双边滤波:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('img.png')

blur = cv2.bilateralFilter(img, 9, 75, 75)

plt.subplot(1, 2, 1)
plt.imshow(img, cmap='cool')
plt.title('sharp image')
plt.subplot(1, 2, 2)
plt.imshow(blur, cmap='cool')
plt.title('blur image')
plt.savefig('bila_img.png', dpi=300)
plt.show()

在这个代码中,cv2.bilateralFilter 函数接受四个参数,第一个参数是待滤波的图像,第二个参数是滤波器的大小,第三个参数是像素值空间的标准差,第四个参数是像素值灰度差异的标准差。在这个例子中,我们使用了一个大小为 9 的滤波器和标准差为 75 的像素值空间和像素值灰度差异对图像进行了双边滤波。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3UwqJyU7-1683127902244)(E:\wang\Typora文档\csdn\图像重建\图像去模糊中的均值滤波、高斯滤波、双边滤波.assets\bila_img.png)]

总结

在本文中,我们介绍了图像去模糊的三种常见方法:均值滤波、高斯滤波和双边滤波。这些方法都是基于滤波器对图像像素进行加权平均来减小噪声和细节的。每种方法都有其优点和缺点,需要根据具体应用场景选择合适的方法。在实际应用中,可以通过调整滤波器的大小和参数来控制图像的平滑程度和细节保留程度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL 执行顺序

数据的关联过程 from&join&where group by having&where select order by limit 这是一条标准的查询语句: 这是我们实际上SQL执行顺序: 我们先执行from,join来确定表之间的连接关系,得到初步的数据 where对数据进行普通的初步的筛选 …

低代码开发重要工具:jvs列表页中如何实现左树右表的配置

左树右表是一种数据查询展示方式,通常用于处理带有层级关系的查询条件的数据展示。它的基本思想是将一个大表分成左树和右表,左树是一个树形结构,右表是一个扁平的表。通过在左树上建立索引,可以大大提高查询效率。 左树右表的实…

C/C++每日一练(20230504)

目录 1. 将数据流变为多个不相交区间 🌟🌟🌟 2. 冒泡法排序大小 🌟 3. Pow(x, n) 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专…

使用机器人为无线传感器网络提供服务(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 无线传感器网络是一种无线网络,包括大量循环的、自定向的、微小的、低功耗的设备,称为传感器节点&…

MySQL存储引擎对比总结

文章目录 一、存储引擎是什么二、存储引擎有哪些三、常用存储引擎介绍1、InnoDB2、MyISAM3、MEMORY4、MRG_MYISAM (MERGE)5、ARCHIVE6、BLACKHOLE7、FEDERATED8、CSV9、PERFORMANCE_SCHEMA10、NDB 一、存储引擎是什么 存储引擎是数据库的核心&#xff0…

微信小程序实现订阅消息功能(Node服务器篇)

在上一篇内容当中在微信小程序中实现订阅消息功能,都在客户端(小程序)中来实现的,在客户端中模拟了服务器端来进行发送订阅消息的功能,那么本篇就将上一篇内容中仅在客户端中实现发送订阅消息功能进行一个分离,使用 Node.js 搭载后…

吧佬联手抵制奸商,百元级游戏电脑横出江湖

最近小忆闲得在电商平台搜索了下关键词「游戏主机」,不出意外销量榜前列清一色全是「i9 级高端游戏主机」。 这些主机不论配置单介绍还是十万百万级销量宣传标语,都给人一种血赚不亏的「豪华」感。 咱就说时代在变,唯一不变的是奸商们的套路与…

什么样的台灯灯光是好的?推荐中性色温的护眼台灯

台灯的灯光指的是白光和黄光&#xff0c;就是台灯的色温&#xff0c;而色温也是也会影响我们的直观感受的。 低色温&#xff08;>3000K&#xff09;光源偏黄&#xff0c;属于暖色调&#xff0c;适合休息高色温&#xff08;<5000K&#xff09;光源偏白&#xff0c;属于冷…

MWORKS.Sysplorer 2023a前瞻版上线——面向MBD全流程的覆盖

信息物理融合系统&#xff08;CPS&#xff09;的设计、建模与仿真是装备数字化的核心技术。MWORKS.Sysplorer经过多年的发展&#xff0c;已经支持机械、电气、流体、热力学等多个物理域的统一建模和统一仿真求解&#xff0c;解决了物理域统一表达与统一建模问题。为了支持完整的…

嘉立创EDA元件库开发环境及设计介绍

一、元件符号概述 如图1所示&#xff0c;元件符号是元件在原理图中的表现形式&#xff0c;主要由元件边框、管脚&#xff08;包括管脚符号和管脚名称&#xff09;、元件名称及说明组成&#xff0c;通过放置的管脚来建立电气连接关系。元件符号中管脚序号是和电子元件实物的管脚…

Node 11会话控制

会话控制 介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议&#xff0c;它没有办法区分多次的请求是否来自于同一个客户端&#xff0c;无法区分用户 而产品中又大量存在的这样的需求&#xff0c;所以我们需要通过 会话控制 来解决该问题 常见的会话控制技术有…

ChatGPT被淘汰了?Auto-GPT到底有多强

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。 说Auto-GPT淘汰了ChatGPT了&#xff0c;显然是营销文案里面的标题党。毕竟它还是基于ChatGPT的API&#xff0c;某种意义只是基于ChatGPT能力的应用。但最近&#xff0c;Auto…

大型央企集团财务经营分析框架系列(二)

01集团化的数字化项目为什么会失败深度原因&#xff1a;方向性错误 这几年见过一些央企、国企、大型企业集团尝试过一些数字化的项目&#xff1a;数据中台、大数据分析、BI 分析项目&#xff0c;投入很大、周期也很长&#xff0c;甚至有的在项目开始前也找了专业的咨询公司来规…

按键外部中断

文章目录 运行环境&#xff1a;1.1 按键外部中断1)按键检测2)外部中断的3中触发方式 2.1配置1)原理图2)引脚配置3)中断配置4)RCC和SYS 3.1代码分析3.2添加代码1)中断处理函数IRQ中添加电平转换代码2)launch设置 5.1实验效果 运行环境&#xff1a; ubuntu18.04.melodic 宏基暗影…

如何用ChatGPT做团队绩效管理?根据员工的个人优势、不足、目标来生成更具体的绩效反馈

该场景对应的关键词库&#xff1a;&#xff08;25个&#xff09; 绩效管理、目标设定、绩效评估、员工优势、员工弱点、反馈机制、个人发展计划、职业规划、评估工具、数据分析、绩效考核、评分标准、KPI指标、成果目标、个人任务、团队任务、激励机制、晋升机会、增量奖励、培…

你的个人AI助理Pi来了

还记得之前的文章《不要老盯着ChatGPT&#xff0c;这几家公司的产品同样不容小觑》提到的Inflection AI公司吗&#xff1f;通过其官方推文了解到&#xff0c;前期我们关注的个人AI助理有了新的进展&#xff0c;Pi开始对外发布。 Pi是什么 Pi 是一种 AI&#xff0c;一种旨在提供…

使用crontab定时自动更新DDNS

需求说明&#xff1a; N1盒子的armbian系统配置好了 ipv6 的ddns&#xff0c;实现了域名访问本机&#xff0c;但是本地ipv6可能会发生变化&#xff0c;当发生变化后&#xff0c;需要手动执行指令&#xff0c;将新的ip与域名绑定&#xff0c;现在我们采用定时任务&#xff0c;每…

18 线性表的查找

查找的基本概念 **查找&#xff1a;**在数据集合中寻找满足某种条件数据元素的过程&#xff0c;称之为查找。 查找的结果 分别两种&#xff1a; 查找成功 即在数据集合中找到了满足条件的数据元素。查找结果给出整个记录的信息&#xff0c;或者改记录在查找表中的位置。查找失…

vivo积分任务体系的架构演进-平台产品系列05

作者&#xff1a;vivo 互联网平台产品研发团队- Mu JunFeng 积分体系作为一种常见营销工具&#xff0c;几乎是每一家企业会员营销的必备功能之一&#xff0c;在生活中随处可见&#xff0c;随着vivo互联网业务发展&#xff0c;vivo积分体系的能力也随之得到飞速提升&#xff0c;…

Java字符串的用法、原理、性能分析和总结

本文介绍了Java字符串的创建方式、拼接、比较、查找和替换等常见操作&#xff0c;并解析了Java字符串在内存中的存储方式及常量池的作用。文章还提到了Java字符串的性能问题&#xff0c;建议在进行大量的字符串操作时&#xff0c;应该尽量避免使用""号操作符和concat…