当前位置: 首页 > news >正文

数字水印 | 图像噪声攻击(高斯/椒盐/泊松/斑点)

目录

    • Noise Attack
      • 1 高斯噪声(Gaussian Noise)
      • 2 椒盐噪声(Salt and Pepper Noise)
      • 3 泊松噪声(Poisson Noise)
      • 4 斑点噪声(Speckle Noise)
      • 5 完整代码


参考博客:Python 使用 opencv 对图像添加噪声(高斯/椒盐/泊松/斑点)



Noise Attack

1 高斯噪声(Gaussian Noise)

高斯噪声是通过在图片中引入服从高斯分布的随机噪声来实现的。通过调整高斯分布的标准差 s i g m a \mathsf{sigma} sigma,可以控制噪声的添加程度; s i g m a \mathsf{sigma} sigma 的值越大,图片受噪声影响越严重。

def add_gaussian_noise(image):mean = 0  # 设置高斯分布的均值sigma = 25  # 设置高斯分布的标准差# 根据均值和标准差生成符合高斯分布的噪声gauss = np.random.normal(mean, sigma, image.shape)# 添加高斯噪声noise_attacked_image = image + gauss# 控制添加噪声后的像素值在[0,255]之间noise_attacked_image = np.clip(noise_attacked_image, a_min=0, a_max=255)noise_attacked_image = noise_attacked_image.astype(np.uint8)return noise_attacked_image

实现效果

在这里插入图片描述



2 椒盐噪声(Salt and Pepper Noise)

椒盐噪声是通过在图片中引入黑白噪点来实现的,其中 代表黑色噪点 ( 0 , 0 , 0 ) (0,0,0) (0,0,0) 代表白色噪点 ( 255 , 255 , 255 ) (255,255,255) (255,255,255)。通过调整 a m o u n t \mathsf{amount} amount 参数,可以控制噪声的比例; a m o u n t \mathsf{amount} amount 值越大,图像受噪声影响越严重。

def add_salt_and_pepper_noise(image):amount = 0.04  # 设置添加的噪声占原始图像的比例s_vs_p = 0.5  # 设置噪声中salt和pepper的比例noise_attacked_image = np.copy(image)# 设置添加的salt噪声的数量num_salt = np.ceil(amount * s_vs_p * image.size)# 设置添加噪声的坐标位置coords = [np.random.randint(0, i-1, int(num_salt)) for i in image.shape]# 添加salt噪声noise_attacked_image[coords[0], coords[1], :] = [255, 255, 255]# 设置添加的pepper噪声的数量num_salt = np.ceil(amount * (1 - s_vs_p) * image.size)# 设置添加噪声的坐标位置coords = [np.random.randint(0, i - 1, int(num_salt)) for i in image.shape]# 添加pepper噪声noise_attacked_image[coords[0], coords[1], :] = [0, 0, 0]return noise_attacked_image

实现效果

在这里插入图片描述



3 泊松噪声(Poisson Noise)

def add_poisson_noise(image):# 计算图像像素的分布vals = len(np.unique(image))vals = 2 ** np.ceil(np.log2(vals))# 添加泊松噪声noise_attacked_image = np.random.poisson(image * vals) / float(vals)noise_attacked_image = noise_attacked_image.astype(np.uint8)return noise_attacked_image

由于我不知道原理,因此无法判断上述代码的正误。比如,以下博客的实现方式就与它不同:

  • 如何给图片添加泊松(Poisson)噪声(附 Python 代码)

实现效果

在这里插入图片描述在这里插入图片描述

前者噪声图像中心有非常明显的噪声点,但是后者噪声图像却没有,这噪声攻击是见人下碟啊😇



4 斑点噪声(Speckle Noise)

def add_speckle_noise(image):# 生成一个服从高斯分布的噪声gauss = np.random.randn(image.shape[0], image.shape[1], image.shape[2])# 添加speckle噪声noise_attacked_image = image + image * gauss# 控制添加噪声后的像素值在[0,255]之间noise_attacked_image = np.clip(noise_attacked_image, a_min=0, a_max=255)noise_attacked_image = noise_attacked_image.astype(np.uint8)return noise_attacked_image

实现效果

在这里插入图片描述



5 完整代码

import cv2
import numpy as np
import matplotlib.pyplot as pltdef add_gaussian_noise(image):mean = 0  # 设置高斯分布的均值sigma = 25  # 设置高斯分布的标准差# 根据均值和标准差生成符合高斯分布的噪声gauss = np.random.normal(mean, sigma, image.shape)# 添加高斯噪声noise_attacked_image = image + gauss# 控制添加噪声后的像素值在[0,255]之间noise_attacked_image = np.clip(noise_attacked_image, a_min=0, a_max=255)noise_attacked_image = noise_attacked_image.astype(np.uint8)return noise_attacked_imagedef add_salt_and_pepper_noise(image):amount = 0.04  # 设置添加的噪声占原始图像的比例s_vs_p = 0.5  # 设置噪声中salt和pepper的比例noise_attacked_image = np.copy(image)# 设置添加的salt噪声的数量num_salt = np.ceil(amount * s_vs_p * image.size)# 设置添加噪声的坐标位置coords = [np.random.randint(0, i-1, int(num_salt)) for i in image.shape]# 添加salt噪声noise_attacked_image[tuple(coords)] = 255# 设置添加的pepper噪声的数量num_salt = np.ceil(amount * (1 - s_vs_p) * image.size)# 设置添加噪声的坐标位置coords = [np.random.randint(0, i - 1, int(num_salt)) for i in image.shape]# 添加pepper噪声noise_attacked_image[tuple(coords)] = 0return noise_attacked_imagedef add_poisson_noise(image):# 计算图像像素的分布vals = len(np.unique(image))vals = 2 ** np.ceil(np.log2(vals))# 添加泊松噪声noise_attacked_image = np.random.poisson(image * vals) / float(vals)noise_attacked_image = noise_attacked_image.astype(np.uint8)return noise_attacked_imagedef add_speckle_noise(image):# 生成一个服从高斯分布的噪声gauss = np.random.randn(image.shape[0], image.shape[1], image.shape[2])# 添加speckle噪声noise_attacked_image = image + image * gauss# 归一化图像的像素值noise_attacked_image = np.clip(noise_attacked_image, a_min=0, a_max=255)noise_attacked_image = noise_attacked_image.astype(np.uint8)return noise_attacked_imageimage = cv2.imread("logo.jpg")
image = image[:, :, [2, 1, 0]]# noise_attacked_image = add_gaussian_noise(image)
noise_attacked_image = add_salt_and_pepper_noise(image)
# noise_attacked_image = add_poisson_noise(image)
# noise_attacked_image = add_speckle_noise(image)# 画图
plt.subplot(1, 2, 1)
plt.title("image", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(image, cmap='gray')plt.subplot(1, 2, 2)
plt.title("noise_attacked_image", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(noise_attacked_image, cmap='gray')plt.savefig('test.jpg', dpi=400, bbox_inches='tight')
plt.show()


相关文章:

数字水印 | 图像噪声攻击(高斯/椒盐/泊松/斑点)

目录 Noise Attack1 高斯噪声(Gaussian Noise)2 椒盐噪声(Salt and Pepper Noise)3 泊松噪声(Poisson Noise)4 斑点噪声(Speckle Noise)5 完整代码 参考博客:Python…...

LeetCode-47 全排列Ⅱ

LeetCode-47 全排列Ⅱ 题目描述解题思路代码说明 题目描述 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 : 输入:nums [1,1,2]输出: [[1,1,2], [1,2,1], [2,1,1]] b站题目解读讲的不好&…...

list 的实现

目录 list 结点类 结点类的构造函数 list的尾插尾删 list的头插头删 迭代器 运算符重载 --运算符重载 和! 运算符重载 * 和 -> 运算符重载 list 的insert list的erase list list实际上是一个带头双向循环链表,要实现list,则首先需要实现一个结点类,而一个结点需要…...

一个程序员的牢狱生涯(47)学法

星期一 学法 二铺不知道什么时候走到了我的身边,向我说道,这是二铺在我进来号子后主动过来和我说话。 我听到二铺这声突兀的说话后,抬起头。这时我才看到,除了二铺,还有六子、棍子都围在我的身边,看着我。虽然六子和棍子依旧一副‘吊儿郎当’的样子,但我从他们几个的眼神…...

微信小程序-页面导航

一、页面导航 页面导航指的是页面之间的相互跳转&#xff0c;例如&#xff1a;浏览器中实现页面导航的方式有如下两种&#xff1a; 1.<a>链接 2.location.href 二、小程序中实现页面导航的两种方式 1.声明式导航 在页面上声明一个<navigator>导航组件 通过点击…...

计算机网络- 特定服务类型(Type of Service, TOS) 服务质量(Quality of Service, QoS)

特定服务类型&#xff08;Type of Service, TOS&#xff09; 具有特定服务类型&#xff08;Type of Service, TOS&#xff09;的数据包是指在IP头部中包含特定TOS字段设置的数据包。TOS字段用于指示数据包的服务质量要求&#xff0c;如延迟、吞吐量、可靠性等。现代IP网络通常…...

2.6 Docker部署多个前端项目

2.6 Docker部署多个项目 三. 部署前端项目 1.将前端项目打包到同一目录下&#xff08;tcm-ui&#xff09; 2. 部署nginx容器 docker run --namenginx -p 9090:9090 -p 9091:9091 -d nginx3. 复制nginx.conf文件到主机目录 docker cp nginx:/etc/nginx/nginx.conf /root/ja…...

如何格式化只读U盘?

U盘只读无法格式化&#xff0c;该怎么处理&#xff1f;别担心&#xff01;本文将向你提供一些实用方法&#xff0c;助你解决U盘写保护的难题。这些方法能有效帮助你解除U盘的只读状态&#xff0c;从而可以顺利进行格式化和其他操作。 不能格式化只读U盘 “我购买了一个U盘&…...

【并查集】专题练习

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 模板 836. 合并集合 - AcWing题库 #include<bits/stdc.h> using lllong long; //#define int ll const int N1e510,mod1e97; int n,m; int p[N],sz[N]; int find(int a) {if(p[a]!a) p[a]find(p[a]);return p[a…...

服装连锁店收银系统需要具备的五大功能

当今服装连锁店在市场竞争中需要拥有高效的收银系统来提升业务效率和顾客满意度。以下是服装连锁店收银系统需要具备的五大功能&#xff1a; 首先&#xff0c;完善的商品管理功能是至关重要的。这包括商品信息的录入、管理、更新和查询。收银系统应该能够快速而准确地识别商品&…...

IMU状态预积分代码实现 —— IMU状态预积分类

IMU状态预积分代码实现 —— IMU状态预积分类 实现IMU状态预积分类 实现IMU状态预积分类 首先&#xff0c;实现预积分自身的结构。一个预积分类应该存储一下数据&#xff1a; 预积分的观测量 △ R ~ i j , △ v ~ i j , △ p ~ i j \bigtriangleup \tilde{R} _{ij},\bigtrian…...

C语言编程:探索最小公倍数的奥秘

C语言编程&#xff1a;探索最小公倍数的奥秘 在编程的世界中&#xff0c;计算两个数的最小公倍数&#xff08;LCM&#xff09;是一个常见的数学问题。C语言作为一种基础且强大的编程语言&#xff0c;为我们提供了实现这一功能的工具。本文将从四个方面、五个方面、六个方面和七…...

Java设计模式-活动对象与访问者

活动对象 Java设计模式中&#xff0c;活动对象是指一个对象始终处于活动的状态&#xff0c;该对象包括一个线程安全的数据结构以及一个活跃的执行线程。 如上所示&#xff0c;ActiveCreature类的构造函数初始化一个线程安全的数据结构&#xff08;阻塞队列&#xff09;、初始化…...

用HAL库改写江科大的stm32入门-6-3 PWM驱动LED呼吸灯

接线图&#xff1a; 2 :实验目的&#xff1a; 利用pwm实现呼吸灯。 关键PWM定时器设置&#xff1a; 代码部分&#xff1a; int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…...

[数据集][目标检测]喝水检测数据集VOC+YOLO格式995张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;995 标注数量(xml文件个数)&#xff1a;995 标注数量(txt文件个数)&#xff1a;995 标注类别…...

【C++】开源:RabbitMQ安装与配置使用(SimpleAmqpClient)

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#x1…...

git使用流程与规范

原文网址&#xff1a;git代码提交流程与规范-CSDN博客 简介 本文git提交流程与规范是宝贵靠谱的经验&#xff0c;它能解决如下问题&#xff1a; 分支差距过大&#xff0c;导致合代码无数的冲突合完代码后发现代码丢失分支不清晰&#xff0c;无法追溯问题合代码耗时很长&…...

力扣 264. 丑数 II python AC

堆 from heapq import heappop, heappushclass Solution:def nthUglyNumber(self, n):q [1]vis {1}for _ in range(n - 1):now heappop(q)for i in [2, 3, 5]:if now * i not in vis:vis.add(now * i)heappush(q, now * i)return heappop(q)...

resetlogs强制拉库失败并使用备份system文件还原数据库故障处理---惜分飞

接手一个库,在open的过程中遭遇到ORA-600 2662错误 Sun May 26 10:15:54 2024 alter database open RESETLOGS RESETLOGS is being done without consistancy checks. This may result in a corrupted database. The database should be recreated. RESETLOGS after incomplete…...

解析Java中1000个常用类:Error类,你学会了吗?

在 Java 编程中,异常处理是一个至关重要的部分。Java 提供了丰富的异常处理机制,包括 Exception 和 Error。 本文将深入探讨 Error 类的功能、用法、实际应用中的注意事项,以及如何处理和预防这些错误。 什么是 Error 类? Error 类是 Java 中 Throwable 类的一个子类,用…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...