图像数据噪音种类以及Python生成对应噪音

前言

当涉及到图像处理和计算机视觉任务时,噪音是一个不可忽视的因素。噪音可以由多种因素引起,如传感器误差、通信干扰、环境光线变化等。这些噪音会导致图像质量下降,从而影响到后续的图像分析和处理过程。因此,对于从图像中获取准确信息的应用,我们需要有效地处理这些噪音。在本篇讨论中,我们将深入探讨图像数据中常见的几种噪音类型,以及相应的处理方法,旨在提升图像处理任务的准确性和稳定性。

噪音种类

在这里插入图片描述

1.高斯噪音(Gaussian Noise)

高斯噪声是一种常见的随机噪声类型,它在许多自然现象和工程应用中都会出现。其特点是随机的幅度和分布,符合正态分布(也称为高斯分布)。高斯噪声的产生可以由多种因素引起,例如电子元件的热噪声、光线的散射和传感器的非线性响应等。

高斯噪声会对图像产生以下影响:

  1. 图像细节模糊化:高斯噪声会在图像中引入随机干扰,导致图像细节变得模糊。
  2. 降低图像对比度:噪声会使图像的像素值变得不稳定,从而降低了图像的对比度。
  3. 影响图像分析和处理:在许多计算机视觉和图像处理任务中,噪声会干扰到对目标的检测、识别和测量。

高斯噪声在许多场景中都会出现,比如:

  1. 传感器捕获:在数字摄像头、声音采集器等传感器设备中,由于传感器的本身特性和外部环境等因素,会引入高斯噪声。
  2. 通信信号传输:在无线通信、有线通信等信号传输过程中,信号可能会受到干扰,从而产生高斯噪声。
  3. 天文学观测:望远镜在观测外太空物体时,由于大气扰动等因素,会产生高斯噪声。

上章节中我们有见到到高斯噪音图片,以原图片为例对比:

import numpy as np
import cv2

# 读取图片
image = cv2.imread('planck.jpg', cv2.IMREAD_COLOR)

# 生成高斯噪声
mean = 0
var = 0.8
sigma = var ** 0.5
gaussian = np.random.normal(mean, sigma, image.shape).astype('uint8')
noisy_image = cv2.add(image, gaussian)

# 显示带噪声的图像
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述高斯噪音图片展现为:
在这里插入图片描述

2.椒盐噪声(Salt and Pepper Noise)

椒盐噪声是一种常见的图像噪声,其特点是在图像中随机分布的黑白像素点,通常以黑色和白色的点来模拟椒和盐。这种噪声可能会在图像采集、传输或存储过程中引入,通常由于设备故障、传感器损坏、传输信号干扰或存储介质老化等原因引起。

椒盐噪声会对图像产生以下影响:

  1. 图像中出现随机的黑点和白点:这些黑点和白点会在图像中随机分布,导致图像中的细节和特征丧失。
  2. 降低图像质量:椒盐噪声会使图像的可视质量下降,降低了图像的清晰度和细节。
  3. 影响图像分析和处理:在许多图像处理和计算机视觉任务中,噪声会干扰到对目标的检测、识别和分析。

椒盐噪声在许多场景中都可能出现,比如:

  1. 摄影:在低光条件下拍摄照片,或者由于相机传感器损坏或脏污而引入椒盐噪声。
  2. 传感器故障:在数字摄像头、声音采集器等传感器设备中,由于传感器的损坏或故障,可能会引入椒盐噪声。
  3. 图像传输:在图像传输过程中,信号可能会受到干扰,从而产生椒盐噪声。

椒盐噪声展示为:

def salt_pepper_noise(image, salt_prob, pepper_prob):
    noisy_image = np.copy(image)
    total_pixels = image.shape[0] * image.shape[1] #计算图像的总像素数
    
    num_salt = int(total_pixels * salt_prob) #通过将总像素数与指定的椒盐噪声比例相乘,得到要添加的椒盐噪声的数量。
    salt_coords = [np.random.randint(0, i-1, num_salt) for i in image.shape]
    noisy_image[salt_coords[0], salt_coords[1]] = 255

    num_pepper = int(total_pixels * pepper_prob)
    pepper_coords = [np.random.randint(0, i-1, num_pepper) for i in image.shape]
    noisy_image[pepper_coords[0], pepper_coords[1]] = 0

    return noisy_image

# 使用方法
noisy_image = salt_pepper_noise(image, salt_prob=0.1, pepper_prob=0.1)
# 显示带噪声的图像
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

3.泊松噪声(Poisson Noise)

泊松噪声是一种常见的图像噪声,它源于光子在成像过程中的随机性。具体来说,泊松噪声是由于光子到达相机传感器的数量具有随机性,特别是在低光条件下或者拍摄快门速度较快时,泊松噪声会更为显著。

泊松噪声通常呈现为图像中的亮度和颜色的随机变化,这种变化不是由于真实场景的特性所引起的,而是由成像系统的随机性和量化误差所引起的。

具体场景包括:

  1. 低光条件下的拍摄:在光线不足的情况下,相机传感器接收到的光子数量较少,从而增加了泊松噪声的出现几率。
  2. 高ISO设置:高ISO设置会放大传感器接收到的信号,但也会放大噪声信号,特别是泊松噪声。
  3. 医学图像:在X射线或核磁共振成像中,由于光子或电子的随机性,图像中会存在泊松噪声。

泊松噪声图片展示为:

# 生成泊松噪声
noise = np.random.poisson(image / 255.0) * 255
noisy_image = np.clip(image + noise, 0, 255).astype('uint8')

# 显示带噪声的图像
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

4.周期性噪声(Periodic Noise)

周期性噪声是一种在图像或信号中以特定频率和振幅重复出现的噪声。它通常以正弦或余弦波形的形式呈现,具有明显的周期性结构。周期性噪声可以在图像处理、信号处理和音频处理等领域中出现。

周期性噪声的出现情况和场景

  1. 传感器干扰:在图像或信号采集过程中,传感器可能受到电磁干扰或其他环境因素的影响,导致信号中出现周期性噪声。
  2. 电力干扰:在拍摄或录制过程中,可能会受到电源设备的电磁干扰,导致图像中出现周期性的条纹或噪点。
  3. 光源干扰:在照明条件不稳定的环境下拍摄图像,可能会因为光源频率的波动而产生周期性噪声。
  4. 传输噪声:在图像或信号传输过程中,可能会受到传输介质或设备的干扰,导致信号中出现周期性变化。
  5. 设备缺陷:一些摄像头或录音设备可能存在硬件缺陷,会引入周期性噪声。

周期性噪声的存在会影响到图像质量或信号的准确性,因此在图像处理和信号处理中,常常需要采取相应的方法来减少或去除周期性噪声,以提高数据的可靠性和可用性。

周期性噪音展现为:

import numpy as np
import cv2

def generate_periodic_noise(image_shape, frequency):
    x = np.arange(image_shape[1])
    y = np.arange(image_shape[0])
    xx, yy = np.meshgrid(x, y)
    noise = np.sin(2 * np.pi * frequency * xx / image_shape[1])
    return noise

# 读取图片
image = cv2.imread('planck.jpg', cv2.IMREAD_COLOR)

# 生成周期性噪声
frequency = 0.1  # 调整此参数以改变噪声频率
periodic_noise = generate_periodic_noise(image.shape[:2], frequency)

# 将噪声映射到 0-255 范围内
periodic_noise = ((periodic_noise - periodic_noise.min()) / (periodic_noise.max() - periodic_noise.min()) * 255).astype('uint8')

# 扩展维度以匹配图像的通道数
periodic_noise = np.stack((periodic_noise,) * 3, axis=-1)

# 将噪声叠加到图像上
noisy_image = cv2.add(image, periodic_noise.astype(np.uint8))

# 显示带噪声的图像
cv2.imshow('Noisy Image with Periodic Noise', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

5.瑞利噪声(Rayleigh Noise)

瑞利噪声(Rayleigh Noise)是一种在图像或信号处理中常见的随机噪声模型。它的概率密度函数(PDF)遵循瑞利分布。

瑞利噪声通常由以下情况引起:

  1. 通信系统中的干扰:在无线通信中,信号可能会受到多径传播、障碍物遮挡等因素的影响,从而导致接收到的信号出现瑞利噪声。
  2. 医学成像中的噪声:在医学成像如超声波成像等领域,瑞利噪声可以由于声波在人体组织中传播时的吸收和散射引起。
  3. 传感器噪声:某些传感器测量过程中的不确定性也可能呈现瑞利噪声的特征。

瑞利噪声的特点是其幅值的分布服从瑞利分布,而相位是均匀分布的。

瑞利噪音图片展示;

def generate_rayleigh_noise(image_shape, scale):
    noise = np.random.rayleigh(scale, image_shape)
    return noise

# 生成瑞利噪声
scale = 50  # 调整此参数以改变噪声幅度
rayleigh_noise = generate_rayleigh_noise(image.shape[:2], scale).astype('uint8')
# 扩展维度以匹配图像的通道数
periodic_noise = np.stack((rayleigh_noise,) * 3, axis=-1)
# 将噪声叠加到图像上
noisy_image = cv2.add(image, periodic_noise)

# 显示带噪声的图像
cv2.imshow('Noisy Image with Rayleigh Noise', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

6.爱尔兰(伽马)噪声

爱尔兰(伽马)噪声是一种噪声模型,通常用于描述在低光照条件下的传感器噪声,如图像传感器或其他感光设备。它的概率密度函数(PDF)遵循伽马分布。

具体来说,爱尔兰噪声的概率密度函数如下:
在这里插入图片描述
其中,k和θ 是分布的参数,Γ(k) 是伽马函数。

在图像处理领域,爱尔兰噪声通常由于低光照条件下的电子噪声或传感器特性而引起。它会导致图像中的一些像素变得异常亮或异常暗,从而降低了图像的质量。

在图像处理中,我们可以使用一些滤波技术或者采用其他后处理方法来减轻或去除爱尔兰噪声,以提升图像的质量和可用性。

伽马噪声展示:

# 生成伽马噪声
shape, scale = 10.0,10.0  # 设置伽马分布的参数
gamma_noise = np.random.gamma(shape, scale, image.shape).astype('uint8')

# 将噪声叠加到图像上
noisy_image = cv2.add(image, gamma_noise)

# 显示带噪声的图像
cv2.imshow('Noisy Image with Gamma Noise', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
图像数据噪音是在图像获取、传输或处理过程中引入的不希望的随机或人为干扰,它会影响图像质量和可用性。常见的图像噪音种类包括高斯噪音、椒盐噪音、泊松噪音、斑点噪音、周期性噪音等。

在Python中,我们可以利用NumPy和OpenCV等库来生成各种类型的噪音。例如,可以通过生成随机数并将其叠加到图像上来模拟高斯噪音,或者在图像中随机生成黑白像素来模拟椒盐噪音。对于泊松噪音和斑点噪音,可以使用相应的数学模型来生成。

处理图像噪音的方法包括均值滤波、中值滤波、高斯滤波等。这些方法可以根据不同类型的噪音选择合适的滤波器来去除干扰,从而提升图像质量。
下一章我将总结所有图像去噪方法以及代码实现。

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

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

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

相关文章

0027Java程序设计-房屋出租管理系统

文章目录 摘 要目 录系统设计开发环境 摘 要 随着我国市场经济的快速发展和人们生活水平的不断提高,简单的房屋出租服务已经不能满足人们的需求。如何利用先进的管理手段,提高房屋出租的管理水平,是当今社会所面临的一个重要课题。 本文采用…

I/O 模型学习笔记【全面理解BIO/NIO/AIO】

文章目录 I/O 模型什么是 I/O 模型Java支持3种I/O模型BIO(Blocking I/O)NIO(Non-blocking I/O)AIO(Asynchronous I/O) BIO、NIO、AIO适用场景分析 java BIOJava BIO 基本介绍Java BIO 编程流程一个栗子实现…

【2024秋招】小米中间件后端开发一面2023-9-13-base武汉

1 自我介绍 2 快手实习 2.1 讲讲你写的curd启动器,做了哪些工作呢 答: 2.2 网上也有一些开源的curd代码生成器,你为什么需要自研呢(重要) 答: (1)这个必须得自研,因…

『第三章』雨燕栖息地:Swift 开发环境

在本篇博文中,您将学到如下内容: 1. Swift 开发平台2. Swift 集成开发环境 Xcode?3. 原型试验场:Playground4. 另一种尝试:iPad 上的 Swift Playgrounds5. Swift 交互实验室:Swift REPL总结 咫尺春三月,寻常百姓家。为…

【RTOS学习】软件定时器 | 中断处理

🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 软件定时器 | 中断处理 🏀软件定时器⚽守护任务守护任务的调度 ⚽使用软件定时器的函数…

多级缓存入门

文章目录 什么是多级缓存JVM进程缓存环境准备安装MySQL导入Demo工程导入商品查询页面 初识Caffeine Lua语法初识Lua第一个lua程序变量和循环Lua的数据类型声明变量循环 条件控制、函数函数条件控制 多级缓存安装OpenRestyOpenResty快速入门反向代理流程OpenResty监听请求编写it…

【linux】麒麟v10安装Redis哨兵集群(ARM架构)

安装redis单示例的请看:麒麟v10安装Redis(ARM架构) 安装服务器 ​Hostname​IP addressmaster,sentinel192.168.0.1slave1,sentinel192.168.0.2slave2,sentinel192.168.0.3 下载安装包 (三台都操作) wget https://re…

施工进度难以把控,项目失控怎么办?

在施工项目中,施工进度的控制是非常重要的,它直接关系到项目是否能够按时完成以及项目成本的控制。然而,有时候由于各种原因,施工进度可能会难以把控,导致项目失控。那么,当项目失控时,我们应该…

Ansible上通过roles简化playbook演示介绍

目录 一.roles介绍 1.作用 2.role的目录结构 3.role和tasks的执行优先级顺序 二.自定义一个httpd的角色 1.完整目录结构展示 2.主要的各个目录配置 (1)vars目录和templates目录 (2)tasks目录和handlers目录 &#xff08…

云原生Docker数据管理

目录 Docker的数据管理 数据卷 数据卷容器 容器互联 容器中管理数据主要有两种方式: 数据卷(Data Volumes)数据卷容器(Data Volume Dontainers) Docker的数据管理 数据卷 数据卷是一个供容器使用的特殊目录&a…

题目 1120: C语言训练-“水仙花数“问题2python详解)——练气三层后期

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) 🍒专栏:算法修炼之练气篇(Python版) ✨…

今天玩到一个微信钓鱼小游戏,很有趣,居然还能玩萝卜刀

这款钓鱼冠军微信小游戏很有创意,除了传统的钓鱼玩法,居然还融合了黄金矿工的玩法,很不错的想法,而且居然还能玩最近比较火的萝卜刀,快来扫码体验一下吧,或者微信里搜索 《钓鱼冠军》小游戏,认…

2023年Q3线上生鲜水产数据分析:市场不景气,销额同比下滑44%

事实上,今年线上的生鲜生意市场并不景气。无论是Q1季度还是Q2季度,线上(京东平台)的销售额均同比去年下滑了10%左右。 然而到了Q3季度,整个下滑态势愈发严峻。可以看到鲸参谋数据显示,7月至9月生鲜水产在京…

Jmeter性能测试 —— TPS拐点寻找

寻找TPS性能拐点1、准备脚本①在本地电脑调试Jmeter压测脚本 ②上传到压测机Jmeter所在的服务器 2、执行压力测试①执行压测脚本 jmeter –n –t xianchengzuse.jmx ②记录业务压测数据 3、监控服务器性能指标 ①监控CPU输入top命令 ②监控内存 free –m ③jstat监控sweep和…

基于WebRTC构建的程序因虚拟内存不足导致闪退问题的排查以及解决办法的探究

目录 1、WebRTC简介 2、问题现象描述 3、将Windbg附加到目标进程上分析 3.1、Windbg没有附加到主程序进程上,没有感知到异常或中断 3.2、Windbg感知到了中断,中断在DebugBreak函数调用上 3.3、32位进程用户态虚拟地址和内核态虚拟地址的划分 …

大数据-Storm流式框架(四)---storm容错机制

1、集群节点宕机 Nimbus服务器 硬件 单点故障?可以搭建HA jStorm搭建 nimbus的HA nimbus的信息存储到zookeeper中,只要下游没问题(进程退出)nimbus退出就不会有问题, 如果在nimbus宕机,也不能提交…

特约|数码转型思考:Web3.0与银行

日前,欧科云链研究院发布重磅报告,引发银行界及金融监管机构广泛关注。通过拆解全球70余家银行的加密布局,报告认为,随着全球采用率的提升与相关技术的成熟,加密资产已成为银行业不容忽视也不能错过的创新领域。 作为…

机器学习实验一:KNN算法,手写数字数据集(使用汉明距离)(2)

KNN-手写数字数据集: 使用sklearn中的KNN算法工具包( KNeighborsClassifier)替换实现分类器的构建,注意使用的是汉明距离; 运行结果:(大概要运行4分钟左右) 代码: import pandas as…

记录一次时序数据库的实战测试

0x1.前言 ​ 本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。文中涉及漏洞均以提交至教育漏洞平台。 0x2.背景 ​ 在某…

023-第三代软件开发-自定义Button

第三代软件开发-自定义Button 文章目录 第三代软件开发-自定义Button项目介绍自定义Button第一类型-加声音第二类型-加样式 第三类型-减声音总结一下存在一点小问题 关键字: Qt、 Qml、 Button、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&…