数字水印 | 基于小波变换的数字水印技术

🍍原文: 基于小波变换的数字水印技术

🍍写在前面: 本文属搬运博客,自己留存学习。



正文

小波变换 把一个信号分解成由基本小波经过移位和缩放后的一系列小波,它是一种 “时间——尺度” 信号的多分辨率分析方法,在时域和频域都具有表征信号局部特征的能力。

小波图像处理 把图像进行多分辨率分解,得到不同空间、频率的子图像,然后对图像的小波系数进行处理。一般而言, 小波变换在信号的高频部分可以获得比较好的时间分辨率,而在信号的低频部分可以获得比较好的频率分辨率,这样就能够有针对性地从信号中提取所需的目标信息。

小波数字水印技术 首先对图像进行小波变换,并对水印信息进行预处理,然后将处理后的水印通过一定的算法嵌入到选定的小波系数中,最后对含有水印的小波系数进行小波逆变换得到含有水印的数字图像。检验和提取的过程正好是以上过程的逆变换。



1 载体图像的小波变换

数字图像经过小波分解后被分割成 4 4 4 个频带:

  • 水平方向 ( L H ) \mathsf{(LH)} (LH):表征了图像在水平方向的边缘细节信息;
  • 垂直方向 ( H L ) \mathsf{(HL)} (HL):表征了图像在垂直方向的边缘细节信息;
  • 对角线方向 ( H H ) \mathsf{(HH)} (HH):表征了图像在对角线方向的边缘细节信息;
  • 低频部分 ( L L ) \mathsf{(LL)} (LL)

其中低频部分 ( L L ) \mathsf{(LL)} (LL) 可以继续分解,如图下所示:

在这里插入图片描述

说明:1 代表是一级分解得到的,2 代表是二级分解得到的。所谓的二级分解,貌似就是对低频 ( L L ) \mathsf{(LL)} (LL) 子带再次进行了一次小波分解。

图像的能量主要集中于低频 ( L L ) \mathsf{(LL)} (LL) 部分,因此低频 ( L L ) \mathsf{(LL)} (LL) 子带是原始图像的逼近子图,具有较强的抵抗外来影响的能力,稳定性较好。其他三个子带分别表征了,原始图像在水平 ( L H ) \mathsf{(LH)} (LH)、垂直 ( H L ) \mathsf{(HL)} (HL) 和对角线 ( H H ) \mathsf{(HH)} (HH) 部分的边缘细节信息,容易受外来噪声、图像操作等的影响,稳定性较差。

GPT 说:图像的能量通常是指图像中像素值的平方和。在某些应用中,能量可以被理解为图像的粗糙度或者复杂度。

一级分解:
在这里插入图片描述

二级分解:
在这里插入图片描述

Python 显示灰度图的效果貌似和 Matlab 的效果不一样,白熊的小脸雀黑😇



2 水印图像的预处理

为了保证水印的安全性,在嵌入水印前需要对水印进行加密处理。

置乱预处理 是一种简单常用的加密方法,水印图像置乱可以消除像素间的相关性,从而提高水印的鲁棒性。图像置乱算法有很多,如幻方置乱、Hilbert 置乱、随机数置乱,本文采用 A r n o l d \mathsf{Arnold} Arnold 置乱算法,将有意义的水印内容掩盖。

下述内容参考博客:图像加密笔记之 Arnold 变换及 Matlab 代码实现

A r n o l d \mathsf{Arnold} Arnold 置乱,又称阿诺德置乱或猫脸变换 C a t M a p \mathsf{Cat\ Map} Cat Map,因为提出这种算法的数学家拉基米尔·阿诺德最早将其应用于一张猫的图片上。所谓置乱,就是打乱图片上各个像素点的位置,以消除原图片相邻像素间的相关性。这个算法的实现并不复杂:

[ x n + 1 y n + 1 ] = [ 1 b a a b + 1 ] [ x n y n ] m o d ( N ) \begin{bmatrix} x_{n+1} \\ y_{n+1} \end{bmatrix}= \begin{bmatrix} 1 & b\\ a & ab+1 \end{bmatrix} \begin{bmatrix} x_{n} \\ y_{n} \end{bmatrix} mod(N) [xn+1yn+1]=[1abab+1][xnyn]mod(N)

( x n , y n ) (x_n, y_n) (xn,yn) 表示像素的原始位置, ( x n + 1 , y n + 1 ) (x_{n+1}, y_{n+1}) (xn+1,yn+1) 表示像素置乱后的位置。 a a a b b b 是扰乱 s c r a m b l i n g \mathsf{scrambling} scrambling 参数,可以自己进行指定。 m o d ( N ) mod(N) mod(N) 是指对 N N N 取余, N N N 为图像的长或宽。对于简单的情况,即长宽相同的图像,长和宽都等于 N N N。取余应该是为了让置乱后的像素位置限定在原始图像的长和宽 N N N 以内。

个人理解:就是要求置乱后的位置不能超出原始图像的范围。

该算法的逆变换,即将置乱后的图像恢复到原始图像的算法为:

[ x n y n ] = [ a b + 1 − b − a 1 ] [ x n + 1 y n + 1 ] m o d ( N ) \begin{bmatrix} x_{n} \\ y_{n} \end{bmatrix}= \begin{bmatrix} ab+1 & -b\\ -a & 1 \end{bmatrix} \begin{bmatrix} x_{n+1} \\ y_{n+1} \end{bmatrix} mod(N) [xnyn]=[ab+1ab1][xn+1yn+1]mod(N)

下面是一个图像使用 A r n o l d \mathsf{Arnold} Arnold 变换 ( a = 2 , b = 3 ) \mathsf{(a=2,b=3)} (a=2,b=3) 后的置乱效果:

在这里插入图片描述

对置乱效果进行还原:

在这里插入图片描述

经典的 A r n o l d \mathsf{Arnold} Arnold 变换具有许多局限性。比如说只能对长宽相等的图像进行处理,一般可以通过对图像进行分块填充等克服这个问题。除此之外,还有一些其他缺点,比如它必须通过多次置乱来达到一个较好的效果,且变换具有周期性,密钥空间不足等问题。



3 小波数字水印的嵌入

✒️ 将水印信息嵌入到小波系数上

根据人类视觉系统的照明和纹理掩蔽特性,将水印嵌入到图像的纹理和边缘上不易被觉察,但对图像的滤波操作和有损压缩操作容易丢失信息。小波变换的低频 ( L L ) \mathsf{(LL)} (LL) 部分集中了图像的大部分能量,它是视觉上最重要的部分,在这部分嵌入水印容易引起图像失真。但从鲁棒性出发,水印应当嵌入到视觉最重要的区域。

原文:图像的纹理和边缘是指, H H , H L , L H \mathsf{HH,HL,LH} HH,HL,LH 细节子图中的一些有较大值的小波系数。

水印的嵌入:
在这里插入图片描述



4 小波数字水印的提取

本节参考博客:离散小波变换含数字水印嵌入的图像水印提取

小波数字水印的原理总结如下:

  • 嵌入水印:首先,选择一个合适的小波函数作为基函数,并对原始图像进行小波变换,得到图像的低频和高频分量。然后,将水印信息嵌入到选定的高频分量中。嵌入过程可以通过修改高频系数的幅值或相位来实现。常用的嵌入方法有替换法、加减法和乘除法等。
  • 提取水印:首先,对带有水印的图像进行小波变换,得到图像的低频和高频分量。然后,根据预先设定的提取算法,从高频分量中提取出水印信息。提取算法通常与嵌入算法相对应,可以通过比较高频系数的差异或解码隐藏在高频系数中的信息来实现。

水印的提取:

在这里插入图片描述

这效果真是一言难尽啊😇



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

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

相关文章

Python中如何将小数转化为百分数进行输出

小数转化为百分数 Python中如何将小数转化为百分数进行输出基本概念使用字符串格式化1. 使用字符串格式化操作符 %2. 使用str.format()方法3. 使用f-string(格式化字符串字面量) **重点内容**:**无论是通过使用%格式化操作符、str.format()方…

AtCoder Beginner Contest 310 E题 NAND repeatedly

E题:NAND repeatedly 标签:动态规划题意:给定一个长度为 n n n的 01 01 01字符串 A i A_i Ai​,给定规则: 0 ⊼ 0 1 , 0 ⊼ 1 1 , 1 ⊼ 0 1 , 1 ⊼ 1 0 0⊼01,0⊼11,1⊼01,1⊼10 0⊼01,0⊼11,1⊼01,1⊼10。 求 ∑…

Linux进程间通信——匿名管道和命名管道

文章目录 一、引言二、管道的基本原理1、管道的定义与结构2、管道的工作原理 三、匿名管道(Anonymous Pipe)1、匿名管道的概念2、匿名管道的创建与使用3、匿名管道的读写规则4、匿名管道的特点5、使用匿名管道实现进程池 四、命名管道(Named …

MySQL的复合查询

多表查询 MySQL中的多表查询是一个强大的功能,允许你在一个查询中组合来自多个表的数据。这通常通过JOIN语句实现,但也可以使用子查询或集合操作符(如UNION)。下面我将介绍几种常见的多表查询方式及其用途。 INNER JOIN&#xf…

学习java第六十八天

在AOP术语中,切面的工作被称为通知。通知实际上是程序运行时要通过Spring AOP框架来触发的代码段。 Spring切面可以应用5种类型的通知: 前置通知(Before):在目标方法被调用之前调用通知功能; 后置通知&a…

计算机视觉——基于改进UNet图像增强算法实现

1. 引言 在低光照条件下进行成像非常具有挑战性,因为光子计数低且存在噪声。高ISO可以用来增加亮度,但它也会放大噪声。后处理,如缩放或直方图拉伸可以应用,但这并不能解决由于光子计数低导致的低信噪比(SNR&#xff…

Oracle如何实现rsa加密和例子

在Oracle数据库中实现RSA加密通常需要使用Java编写的存储过程,因为Oracle自身并不直接支持RSA加密的原生函数。下面是一个基本的例子,说明如何在Oracle中使用Java存储过程来实现RSA加密。 首先,你需要一个Java类(比如我们称之为R…

【Spring】@ServerEndpoint 与 Spring 是如何集成的

文章目录 前言表象理解后记更多文章 前言 最近工作需要用到 Websocket 协议。好奇来自 Jdk 包的 ServerEndpoint 是如何与 Spring Boot 集成的,特此记录一下结论。 表象 如果要暴露形如 ws://${ip}:${port}/ws 的服务地址,用于websocket 通信&#xf…

STC8增强型单片机开发——串口调试UART

一、什么是串口 串口是一种在数据通讯中广泛使用的通讯接口,通常我们叫做UART (通用异步收发传输器Universal Asynchronous Receiver/Transmitter),其具有数据传输速度稳定、可靠性高、适用范围广等优点。在嵌入式系统中,串口常用于与外部设备…

关于Speech processing Universal PERformance Benchmark (SUPERB)基准测试及衍生版本

Speech processing Universal PERformance Benchmark (SUPERB)是由台湾大学、麻省理工大学,卡耐基梅隆大学和 Meta 公司联合提出的评测数据集,其中包含了13项语音理解任务,旨在全面评估模型在语音处理领域的表现。这些…

基于深度学习神经网络的AI图像PSD去雾系统源码

第一步:PSD介绍 以往的研究主要集中在具有合成模糊图像的训练模型上,当模型用于真实世界的模糊图像时,会导致性能下降。 为了解决上述问题,提高去雾的泛化性能,作者提出了一种Principled Synthetic-to-real Dehazing (…

Windows 跨服务器进行 MYSQL备份脚本

Windows 服务器进行 MYSQL备份的脚本,使用该脚本前,请先测试一下 1、新建一个文本文档 2、将下面代码放入文本文档中,保存退出 echo off :: 命令窗口名 title mysql-bak:: 参数定义 set "Y%date:~,4%" set "m%date:~5,2%&qu…

【计算机网络篇】数据链路层(9)使用集线器的共享式以太网

文章目录 🛸使用同轴电缆的共享总线以太网 🎆使用集线器的共享式以太网🥚集线器的特点 🍔10BASE-T星型以太网 🛸使用同轴电缆的共享总线以太网 若总线上的某个机械连接点接触不良或断开,则整个网络通信就不…

Nginx part3 创建一个https的网站

目录 HTTPS 公钥和密钥 加密解密方式: https搭建步骤 强调一下 1、准备环境 2、配置文件 3、制作证书 4、进行设置 HTTPS 啥是https,根据百度:HTTPS (全称:Hypertext Transfer Protocol Secure)&a…

HCIE学习笔记----OSPF详解

OSPF邻居建立的条件 OSPF建立邻居“41”条件总结 4个一致 一个不一致 1.保证接口的前缀 网络信息一致 2.保证ospf区域号和区域类型一致 3.hello包间隔时间和死亡时间一致 4.认证类型和认证认证信息一致 5.路由器的ID不一致 保证唯一性 一-----OSPF 邻接关系建立过程与状…

耦合协调分析模型

耦合协调分析模型(Coupling Coordination Analysis Model)是一种用于评估两个或多个系统之间相互作用和协调性的数学模型。广泛应用于多个领域,包括但不限于社会科学、经济学、环境科学和工程学。耦合协调分析模型的核心在于量化系统间的耦合…

Android UI:动画:帧动画

文章目录 定义两种创建方式 代码:直接创建对象XML:加载动画文件,创建对象API 类 动画类操作 绑定ImageView启动动画总结 定义 按顺序展示不同的图片 两种创建方式 代码:直接创建对象 XML:加载动画文件,…

本地项目上传到gitee

1. 新建仓库,不要勾选 2. git init git add . git commit -m "test" git remote add origin 【url】 git push --set-upstream origin master

MySQL·索引

目录 索引的意义 索引的理解 为何IO交互要是 Page 理解Page 其他数据结构为何不行? 聚簇索引 VS 非聚簇索引 索引操作 主键索引操作 唯一键索引操作 普通索引的创建 总结 全文索引 索引的意义 索引:提高数据库的性能,索引是物美…

css backdrop-filter 实现背景滤镜

官方给出的定义是:backdrop-filter属性允许您将图形效果(如模糊或颜色偏移)应用于元素后面的区域。因为它适用于元素后面的所有内容,所以要查看元素或其背景的效果,需要透明或部分透明。 大致分为以下10种&#xff1a…