计算机视觉 ---图像模糊

news2024/11/18 5:34:10

1、图像模糊的作用:

  • 减少噪声

    • 在图像获取过程中,例如通过相机拍摄或者传感器采集,可能会受到各种因素的干扰,从而引入噪声。这些噪声在图像上表现为一些孤立的、不符合图像主体内容的像素变化,如椒盐噪声(随机出现的黑白像素点)和高斯噪声(使图像整体变得模糊的噪声)。
    • 通过模糊处理,可以将这些噪声点与周围像素融合,从而使噪声在视觉上得到减弱,让图像看起来更加干净、平滑。例如,在天文观测图像中,由于信号微弱且探测器可能受到宇宙射线等干扰,图像会带有噪声,使用模糊方法能够有效改善图像质量,便于天文学家观察天体的特征。
  • 突出主体

    • 当图像包含多个元素,且主体与背景或者其他元素在视觉上相互干扰时,模糊可以用来弱化次要元素,从而使主体更加突出。
    • 例如在人物摄影作品中,如果背景比较杂乱,通过对背景进行模糊处理,能够引导观众的注意力聚焦在人物主体上,就像在拍摄肖像照时,利用浅景深效果(通过相机设置或者后期处理来模糊背景)突出人物面部表情和特征。
  • 模拟特定效果

    • 模拟景深效果:在摄影中,景深是指在拍摄的场景中,能够清晰成像的距离范围。通过对图像的部分区域进行模糊,可以模拟出相机拍摄时的景深效果,即焦点处清晰,而焦点外逐渐模糊。这可以增强图像的真实感和层次感,让二维的图像更有三维空间的感觉。
    • 模拟运动模糊:当物体在快速运动时,相机拍摄的图像会产生运动模糊效果。在图像制作或者后期处理中,可以通过模糊来模拟这种效果,用于表现物体的动态和速度感。比如在制作赛车游戏的宣传海报时,对赛车的图像进行适当的运动模糊处理,可以让海报更具动感和速度感。
  • 保护隐私

    • 在一些情况下,需要对图像中的人物面部或者敏感信息进行模糊处理。例如在新闻报道中,当涉及到不愿意曝光面部的人物或者需要隐藏某些隐私信息(如车牌号码、身份证号码等)时,通过模糊这些部分,使它们无法被清晰辨认,从而保护个人隐私。

2、常见模糊方法:

  • 均值模糊(Average Blur)

    • 原理:对于图像中的每个像素,计算其周围邻域(通常是一个矩形区域,如 3×3、5×5 等)内所有像素值的平均值,然后将这个平均值作为该像素的新值。例如,对于一个 3×3 邻域,就是将这 9 个像素的红、绿、蓝通道(如果是彩色图像)的值分别相加,再除以 9,得到新的像素值。
    • 特点:计算简单,能够快速地对图像进行平滑处理,有效地减少噪声。但是,这种方法会导致图像细节丢失较多,因为它是简单地求平均,会使图像变得比较模糊和平滑,对于边缘等细节的保留能力较差。
  • 高斯模糊(Gaussian Blur)

    • 原理:基于高斯函数来确定每个像素周围邻域内像素值对当前像素的影响权重。离当前像素越近的像素,其权重越大;离得越远,权重越小。然后根据这些权重计算出当前像素的新值。通常也会使用一个矩形邻域,如 3×3、5×5 等。高斯函数的数学表达式决定了这种权重的分布规律。
    • 特点:是一种比较常用的模糊方法,它在模糊图像的同时,能够较好地保留图像的边缘和主要细节信息。相比均值模糊,它对图像细节的破坏相对较小,能够产生更加自然的模糊效果,因为它的权重分配更符合人眼对周围物体的视觉感知规律。
  • 中值模糊(Median Blur)

    • 原理:选取图像中每个像素点周围邻域内像素值的中位数,并用这个中位数来替换当前像素点的值。邻域大小同样可以是 3×3、5×5 等。例如,对于一个 3×3 邻域内的 9 个像素值,将它们从小到大排序,取中间的值作为中心像素的新值。
    • 特点:对于去除椒盐噪声等具有较好的效果,因为它不是通过求平均来模糊,而是取中位数,所以在一定程度上能够保留图像的边缘和细节,避免了像均值模糊那样过度平滑图像。
  • 双边模糊(Bilateral Blur)

    • 原理:考虑了像素点的空间距离和像素值的差异两个因素。一方面根据像素点之间的空间距离确定权重,如同高斯模糊;另一方面根据像素值的差异确定权重,即对于与当前像素值差异较大的像素,给予较小的权重,反之给予较大的权重。最后综合这两个权重来计算当前像素点的新值。
    • 特点:能够在模糊图像的同时,很好地保留图像的边缘细节,实现了一种既能模糊背景又能使主体边缘清晰的效果。常用于需要突出主体且保持主体边缘清晰的场景,如人像摄影后期处理等。

3、举个例子:

        这里使用高斯模糊对一张图像在不同尺度上进行模糊处理,感兴趣的话大家也可以尝试使用其他模糊方法对图像进行处理。

这里使用到了OpenCV库中的cv2.GaussianBlur()函数进行高斯模糊处理,函数参数有以下几个:

  • src:这是要进行高斯模糊处理的原始图像。图像可以是单通道(如灰度图)或多通道(如彩色图,通常为 BGR 格式)。例如,你可以使用cv2.imread函数读取一幅图像作为src参数的值。
  • ksize:它是一个表示高斯核大小的元组。核大小决定了模糊的程度和范围。元组的格式为(width, height),通常使用正方形核,即widthheight相等,如(3,3)(5,5)(7,7)等。核越大,模糊效果越明显。
  • sigmaX:它是高斯核在 X 方向(水平方向)上的标准差。这个参数控制了高斯分布的形状,从而影响模糊的效果。如果将其设置为 0,则函数会根据ksize自动计算一个合适的值。通常,手动设置一个合适的值可以更精细地调整模糊效果。例如,对于一些需要轻微模糊的图像,可以设置一个较小的sigmaX值。
  • sigmaY(可选):它是高斯核在 Y 方向(垂直方向)上的标准差。如果不指定这个参数(即只传入三个参数srcksizesigmaX),函数会默认sigmaY = sigmaX,也就是在 X 和 Y 方向上使用相同的标准差进行模糊处理。

(对于其他的模糊处理方法,OpenCV中也有对应的函数可以使用,感兴趣的话可以尝试一下)

具体代码及注释如下:

import cv2
import matplotlib.pyplot as plt

# 读取图像
image = cv2.imread('./luffy.jpeg')
# 将图像从BGR格式转换为RGB格式,以便在matplotlib中正确显示
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 定义不同尺度的高斯模糊邻域大小
kernel_sizes = [23, 45, 65]

# 存储不同尺度模糊后的图像结果
blurred_images = []

# 对图像进行不同尺度的高斯模糊
for kernel_size in kernel_sizes:
    blurred_image = cv2.GaussianBlur(image_rgb, (kernel_size, kernel_size), 0)
    blurred_images.append(blurred_image)

# 显示原始图像和不同尺度模糊后的图像
plt.figure(figsize=(10, 10))  # 调整图形大小以适应2x2的布局

# 显示原始图像
plt.subplot(2, 2, 1)  # 2行,2列,第1个位置
plt.imshow(image_rgb)
plt.title('Original Image')
plt.axis('off')

# 显示不同尺度模糊后的图像
for i, blurred_image in enumerate(blurred_images):
    plt.subplot(2, 2, i + 2)  # 2行,2列,第2到第4个位置
    plt.imshow(blurred_image)
    plt.title(f'Gaussian Blur with Kernel Size {kernel_sizes[i]}')
    plt.axis('off')

plt.tight_layout()  # 确保图像布局紧凑
plt.show()

最终效果图(对两个图像分别进行高斯模糊):

有任何问题欢迎在评论区提出讨论!

Over!!

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

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

相关文章

[JAVA]MyBatis框架—如何获取SqlSession对象实现数据交互(基础篇)

假设我们要查询数据库的用户信息,在MyBatis框架中,首先需要通过SqlSessionFactory创建SqlSession,然后才能使用SqlSession获取对应的Mapper接口,进而执行查询操作 在前一章我们学习了如何创建MyBatis的配置文件mybatis.config.xm…

node.js下载安装步骤整理

>> 进入node.js下载页面下载 | Node.js 中文网 >>点击 全部安装包 >>删除网址node后面部分,只保留如图所示部分,回车 >>点击进入v11.0.0/版本 >>点击下载node-v11.0.0-win-x64.zip(电脑是windows 64位操作系统适用) >…

解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件

勾选Auto-detect proxy setting并填入 https://plugins.jetbrains.com 代理URL,可以先做检查连接:

解决Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题

Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题 项目问题问题描述解决方案具体实现 项目问题 在 Jenkins 中使用 Git 参数插件 进行参数化构建,具有多方面的重要性和好处。这不仅提高了构建的灵活性和透明度,还能大大提升开发和运维效率。以下是使用…

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数 前言一、什么是 datatable 参数?Gherkin 表格示例 二、datatable 参数的基本使用三、完整代码和运行效果完整的测试代码 前言 …

Windows内核编程准备

Windows内核编程 驱动 本课程涉及的驱动,是利用驱动程序的高级权限,去做一些用户层不能做的工作,严格来说,这些写出来的东西不能算是驱动,因为它不会驱动任何设备 权限 内核程序是运行在R0级的,因此比应…

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…

【代码大模型】Compressing Pre-trained Models of Code into 3 MB论文阅读

Compressing Pre-trained Models of Code into 3 MB key word: code PLM, compression, GA算法 论文&#xff1a;https://dl.acm.org/doi/pdf/10.1145/3551349.3556964 代码&#xff1a;https://github.com/soarsmu/Compressor.git 【why】 1.问题描述&#xff1a; code LLM …

论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法

论文概述 《基于现实迷宫地形的电脑鼠设计》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题&#xff0c;特基于超声波测距与传统迷宫算法原理&#xff0c;设计出一款可在现实迷宫地…

PG-DERN 解读:少样本学习、 双视角编码器、 关系图学习网络

本文提出了一种用于 分子属性预测 的 少样本学习&#xff08;Few-shot Learning&#xff09; 模型—— PG-DERN&#xff0c;该模型结合了 双视角编码器&#xff08;Dual-view Encoder&#xff09; 和 关系图学习网络&#xff08;Relation Graph Learning Network&#xff09; 双…

w039基于Web足球青训俱乐部管理后台系统开发

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

H3C NX30Pro刷机教程-2024-11-16

H3C NX30Pro刷机教程-2024-11-16 ref: http://www.ttcoder.cn/index.php/2024/11/03/h3c-nx30pro亲测无需分区备份 路由器-新机初始化设置路由器登录密码telnet进入路由器后台 刷机上传uboot到路由器后台在Windows环境下解压后的软件包中打开 tftpd64.exe在NX30Pro环境下通过以…

[2024最新] java八股文实用版(附带原理)---java集合篇

介绍一下常见的list实现类&#xff1f; ArrayList 线程不安全&#xff0c;内部是通过数组实现的&#xff0c;继承了AbstractList&#xff0c;实现了List&#xff0c;适合随机查找和遍历&#xff0c;不适合插入和删除。排列有序&#xff0c;可重复&#xff0c;当容量不够的时候…

python 异步编程之协程

最近在学习python的异步编程&#xff0c;这里就简单记录一下&#xff0c;免得日后忘记。 首先&#xff0c;python异步实现大概有三种方式&#xff0c;多进程&#xff0c;多线程和协程&#xff1b;多线程和多进程就不用多说了&#xff0c;基本上每种语言都会有多进行和多线程的…

20241112-Pycharm使用托管的Anaconda的Jupyter Notebook

Pycharm使用托管的Anaconda的Jupyter Notebook 要求 不要每次使用 Pycharm 运行 Jupyter 文件时都要手动打开 Anaconda 的 Jupyter Notebook 正文 pycharm中配置好会自动安装的&#xff0c;有的要自己配置 Pycharm中配置 文件 ——> 设置 ——> 语言和框架……&am…

Android 无签名系统 debug 版本APK push到设备引起的开机异常问题分析(zygote进程)

问题背景 前置操作&#xff1a; 替换原system/priv-app 目录下已有的应用包未未签名的debug版本&#xff0c;然后重启。 现象&#xff1a; 无法正常开机&#xff0c;卡在开机动画&#xff0c;并且pm没有起来&#xff0c;因为执行adb install 命令是返回“cmd: Cant find se…

【学习心得】数据分析三剑客跟学Gitee仓库

之前&#xff0c;自己在学习数据分析过程中的学习方法和思路&#xff0c;将那些摸索与实践中的心得体会分享出来&#xff0c;能够得到大家的喜欢、点赞我非常高兴&#xff0c;谢谢大家的支持&#xff01;这些正面的反馈对我来说&#xff0c;不仅是莫大的鼓励&#xff0c;更是持…

Vue 批量注册组件实现动态组件技巧

介绍 Vue 动态组件的应用场景很多,可应用于动态页签,动态路由等场景,其核心原理是批量注册。在Vue2和Vue3中实现原理相同,只是语法略有差异。 Vue2 实现 基于 webpack require.context() 是webpack提供的一个自动导入的API 参数1&#xff1a;加载的文件目录 参数2&#xff…

AndroidStudio-Activity的生命周期

一、Avtivity的启动和结束 从当前页面跳到新页面&#xff0c;跳转代码如下&#xff1a; startActivity(new Intent(源页面.this&#xff0c;目标页面.class))&#xff1b; 从当前页面回到上一个页面&#xff0c;相当于关闭当前页面&#xff0c;返回代码如下&#xff1a; finis…

DB-GPT系列(四):DB-GPT六大基础应用场景part1

一、基础问答 进入DB-GPT后&#xff0c;再在线对话默认的基础功能就是对话功能。这里我们可以和使用通义千问、文心一言等在线大模型类似的方法&#xff0c; 来和DB-GPT进行对话。 但是值得注意的是&#xff0c;DB-GPT的输出结果是在内置提示词基础之上进行的回答&#xff0c…