数字水印 | 图像噪声攻击(高斯/椒盐/泊松/斑点)
目录
- 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)学法
星期一 学法 二铺不知道什么时候走到了我的身边,向我说道,这是二铺在我进来号子后主动过来和我说话。 我听到二铺这声突兀的说话后,抬起头。这时我才看到,除了二铺,还有六子、棍子都围在我的身边,看着我。虽然六子和棍子依旧一副‘吊儿郎当’的样子,但我从他们几个的眼神…...
微信小程序-页面导航
一、页面导航 页面导航指的是页面之间的相互跳转,例如:浏览器中实现页面导航的方式有如下两种: 1.<a>链接 2.location.href 二、小程序中实现页面导航的两种方式 1.声明式导航 在页面上声明一个<navigator>导航组件 通过点击…...
计算机网络- 特定服务类型(Type of Service, TOS) 服务质量(Quality of Service, QoS)
特定服务类型(Type of Service, TOS) 具有特定服务类型(Type of Service, TOS)的数据包是指在IP头部中包含特定TOS字段设置的数据包。TOS字段用于指示数据包的服务质量要求,如延迟、吞吐量、可靠性等。现代IP网络通常…...
2.6 Docker部署多个前端项目
2.6 Docker部署多个项目 三. 部署前端项目 1.将前端项目打包到同一目录下(tcm-ui) 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盘只读无法格式化,该怎么处理?别担心!本文将向你提供一些实用方法,助你解决U盘写保护的难题。这些方法能有效帮助你解除U盘的只读状态,从而可以顺利进行格式化和其他操作。 不能格式化只读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…...
服装连锁店收银系统需要具备的五大功能
当今服装连锁店在市场竞争中需要拥有高效的收银系统来提升业务效率和顾客满意度。以下是服装连锁店收银系统需要具备的五大功能: 首先,完善的商品管理功能是至关重要的。这包括商品信息的录入、管理、更新和查询。收银系统应该能够快速而准确地识别商品&…...
IMU状态预积分代码实现 —— IMU状态预积分类
IMU状态预积分代码实现 —— IMU状态预积分类 实现IMU状态预积分类 实现IMU状态预积分类 首先,实现预积分自身的结构。一个预积分类应该存储一下数据: 预积分的观测量 △ R ~ i j , △ v ~ i j , △ p ~ i j \bigtriangleup \tilde{R} _{ij},\bigtrian…...
C语言编程:探索最小公倍数的奥秘
C语言编程:探索最小公倍数的奥秘 在编程的世界中,计算两个数的最小公倍数(LCM)是一个常见的数学问题。C语言作为一种基础且强大的编程语言,为我们提供了实现这一功能的工具。本文将从四个方面、五个方面、六个方面和七…...
Java设计模式-活动对象与访问者
活动对象 Java设计模式中,活动对象是指一个对象始终处于活动的状态,该对象包括一个线程安全的数据结构以及一个活跃的执行线程。 如上所示,ActiveCreature类的构造函数初始化一个线程安全的数据结构(阻塞队列)、初始化…...
用HAL库改写江科大的stm32入门-6-3 PWM驱动LED呼吸灯
接线图: 2 :实验目的: 利用pwm实现呼吸灯。 关键PWM定时器设置: 代码部分: int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…...
[数据集][目标检测]喝水检测数据集VOC+YOLO格式995张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):995 标注数量(xml文件个数):995 标注数量(txt文件个数):995 标注类别…...
【C++】开源:RabbitMQ安装与配置使用(SimpleAmqpClient)
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路…...
git使用流程与规范
原文网址:git代码提交流程与规范-CSDN博客 简介 本文git提交流程与规范是宝贵靠谱的经验,它能解决如下问题: 分支差距过大,导致合代码无数的冲突合完代码后发现代码丢失分支不清晰,无法追溯问题合代码耗时很长&…...
力扣 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 类的一个子类,用…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
