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

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!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于强化学习的一份介绍

在这篇文章中,我将介绍与强化学习有关的一些东西,具体包括相关概念、k-摇臂机、强化学习的种类等。 一、基本概念 所谓强化学习就是去学习:做什么才能使得数值化的收益信号最大化。学习者不会被告知应该采取什么动作,而是必须通…

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言:对于嵌入式硬件这个庞大的知识体系而言,太多离散的知识点很容易疏漏,因此对于这些容易忘记甚至不明白的知识点做成一个梳理,供大家参考以及学习,本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…

近几年新笔记本重装系统方法及一些注意事项

新笔记本怎么重装系统? 近几年的新笔记本默认开启了raid on模式或vmd选项,安装过程中会遇到问题,新笔记本电脑重装自带的系统建议采用u盘方式安装,默认新笔记本有bitlocker加密机制,如果采用一键重装系统或硬盘方式安装…

GPIO相关的寄存器(重要)

目录 一、GPIO相关寄存器概述 二、整体介绍 三、详细介绍 1、端口配置低寄存器(GPIOx_CRL)(xA...E) 2、端口配置高寄存器(GPIOx_CRH)(xA...E) 3、端口输入数据寄存器&#xff…

华为Mate 70临近上市:代理IP与抢购攻略

随着科技的飞速发展,智能手机已经成为我们日常生活中不可或缺的一部分。而在众多智能手机品牌中,华为一直以其卓越的技术和创新力引领着行业的发展。近日,华为Mate 70系列手机的发布会正式定档在11月26日,这一消息引发了众多科技爱…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具视频汇聚技术在智慧安防监控中的应用与优势

随着信息技术的快速发展和数字化时代的到来,安防监控领域也在不断进行技术创新和突破。NVR管理平台EasyNVR作为视频汇聚技术的领先者,凭借其强大的视频处理、汇聚与融合能力,展现出了在安防监控领域巨大的应用潜力和价值。本文将详细介绍Easy…

MySQL:表设计

表的设计 从需求中获得类,类对应到数据库中的实体,实体在数据库中表现为一张一张的表,类中的属性就对应着表中的字段(也就是表中的列) 表设计的三大范式: 在数据库设计中,三大范式&#xff0…

单元测试时报错找不到@SpringBootConfiguration

找到问题出现原因: 错误表示 Spring Boot 在运行测试时无法找到 SpringBootConfiguration 注解。 通常,SpringBootTest注解用于加载 Spring Boot 应用上下文,但它需要找到一个带有SpringBootConfiguration(或者Configuration&am…

Python爬虫下载新闻,Flask展现新闻(2)

上篇讲了用Python从新闻网站上下载新闻,本篇讲用Flask展现新闻。关于Flask安装网上好多教程,不赘述。下面主要讲 HTML-Flask-数据 的关系。 简洁版 如图,页面简单,主要显示新闻标题。 分页,使用最简单的分页技术&…

信捷PLC转以太网连接电脑方法

信捷XC/XD/XL等系列PLC如何上下载程序?可以选择用捷米特JM-ETH-XJ模块轻松搞定,并不需要编程,即插即用,具体看见以下介绍: 产品介绍 捷米特JM-ETH-XJ是专门为信捷PLC转以太网通讯面设计,可实现工厂设备信息化需求,对…

【头歌实训:拆分单链表】

头歌实训:拆分单链表 文章目录 任务描述相关知识单链表的基本概念单链表的头结点单链表的特点单链表插入一个结点单链表删除一个结点删除操作的语句如下: 创建单链表头插法建立单链表尾插法建立单链表 输出单链表 编程要求测试说明输入格式输出格式样例…

渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流

11月14日,渑池县人大副主任、工商联主席杨航率县中药材产业党委代表团一行13人,莅临河南广宇集团参观交流。河南广宇集团总经理王峰、副总经理王培等领导热情接待并陪同参观、座谈。 代表团一行首先参观了集团旗下郑州美信中医院(庚贤堂中医药…

零基础Java第十九期:认识String(一)

目录 一、String的重要性 二、String的常用方法 2.1. 字符串构造 2.2. String对象的比较 2.3. 字符串查找 2.4. 转化 2.4. 字符串替换 2.5. 字符串拆分 2.6. 字符串截取 一、String的重要性 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能…

基于Lora通讯加STM32空气质量检测WIFI通讯

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着环境污染问题的日益严重,空气质量的监测与管理已经…

JMeter中添加请求头

在JMeter中添加请求头的步骤如下: 1.打开HTTP信息头管理器 : 首先,你需要进入JMeter的HTTP请求组件。这可以通过在HTTP请求测试元素上右键点击,然后选择“添加 > 配置元件 > HTTP信息头管理器”来完成。 2.添加新的请求头…

面试_ABtest原理简介

01 什么是ABtest ABtest来源于假设检验,现有两个随机均匀的有样本组A、B,对其中一个组A做出某种改动,实验结束后分析两组用户行为数据,通过显著性检验,判断这个改动对于我们所关注的核心指标是否有显著的影响&#xf…

PCB+SMT线上报价系统+PCB生产ERP系统自动化拼板模块升级

PCB生产ERP系统的智能拼版技术,是基于PCB前端报价系统获取到的用户或市场人员已录入系统的板子尺寸及set参数等,按照最优原则或利用率最大化原则自动进行计算并输出拼版样式图和板材利用率,提高工程人员效率,减少板材的浪费。覆铜…

Kubernetes 10 问,测测你对 k8s 的理解程度

Kubernetes 10 问 假设集群有 2 个 node 节点,其中一个有 pod,另一个则没有,那么新的 pod 会被调度到哪个节点上? 应用程序通过容器的形式运行,如果 OOM(Out-of-Memory)了,是容器重…

《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配

文章目录 0. 概述1. 内存碎片问题2. 动态分配3. 首次适配算法4. 最优适配算法5. 最差适配算法 0. 概述 内存分配是操作系统管理过程中很重要的环节,首先需要考虑的是一块连续区域分配的过程,这个过程中会有很多问题,首先比较关注的一个问题是…

CICD持续集成与持续交付

一 CICD是什么 CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery) 1.1 持续集成(Continuous Integration) 持续集成…