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

news2024/11/24 16:57:11

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

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



正文

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

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

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



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.coloradmin.cn/o/1667122.html

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

相关文章

# 从浅入深 学习 SpringCloud 微服务架构(十七)--Spring Cloud config(1)

从浅入深 学习 SpringCloud 微服务架构(十七)–Spring Cloud config(1) 一、配置中心的 概述 1、配置中心概述 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如 SpringBoot 的 application.y…

面试中算法(金矿)

有一位国王拥有5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人人数也不同。 例如,有的金矿储量是5ookg黄金,需要5个工人来挖掘;有的金矿储量是2ookg黄金,需要3个工人来挖掘...... 如果参与挖矿的工人的总数是10。…

HTTP 连接详解

概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器。一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失、受损或失序 TCP(Transmission Control Protocol&…

【大数据】HDFS、HBase操作教程(含指令和JAVA API)

目录 1.前言 2.HDFS 2.1.指令操作 2.2.JAVA API 3.HBase 3.1.指令操作 3.2.JAVA API 1.前言 本文是作者大数据专栏系列的其中一篇,前文中已经详细聊过分布式文件系统HDFS和分布式数据库HBase了,本文将会是它们的实操讲解。 HDFS相关前文&#x…

商家转账到零钱怎么开通?一步步教你玩转微信营销新利器

在数字化营销日新月异的今天,微信支付凭借其便捷、安全的特点,成为了商家不可或缺的支付工具。而其中的“商家转账到零钱”功能,更是为商家提供了一个全新的营销利器。今天,我们就来详细解读一下如何开通这一功能(我处…

强化学习在一致性模型中的应用与实验验证

在人工智能领域,文本到图像的生成任务一直是研究的热点。近年来,扩散模型和一致性模型因其在图像生成中的卓越性能而受到广泛关注。然而,这些模型在生成速度和微调灵活性上存在局限。为了解决这些问题,康奈尔大学的研究团队提出了…

从0开始学python(七)

目录 前言 1 break、continue和pass函数 1.1 break 1.2 continue 1.3 pass 2、序列的索引及切片操作 2.1字符串的索引和切片 2.1.1 字符串索引 2.1.2 字符串切片 总结 前言 上一篇文章我们介绍了python中的循环结构,包括for和while的使用。本章接着往下讲。…

springboot+layuimini实现树形表格

树形表格实现增删改查 这里写目录标题 效果图前端页面代码前端插件后端代码controllerserviceserviceImpl 实现类Entitymapperxml mybatis代码数据表 效果图 前端页面代码 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"&g…

java项目之企业OA管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的企业OA管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 企业OA管理系统的主要使用…

CCPD车牌检测识别数据集

CCPD 是一个在开源免费的中国城市车牌识别数据集。 1. 介绍 CCPD (Chinese City Parking Dataset, ECCV)是中国城市车牌数据集&#xff0c;共有两个CCPD2019和CCPD2020 数据集&#xff0c;总数据量约35W左右&#xff0c;可用于车牌检测和识别模型算法开发。 CCPD 发表的论文:…

体验GM CHM Reader Pro,享受高效阅读

还在为CHM文档的阅读而烦恼吗&#xff1f;试试GM CHM Reader Pro for Mac吧&#xff01;它拥有强大的功能和出色的性能&#xff0c;能够让你轻松打开和阅读CHM文件&#xff0c;享受高效、舒适的阅读体验。无论是学习、工作还是娱乐&#xff0c;GM CHM Reader Pro都能成为你的得…

(java)websocket服务的两种实现方式

1.基于java注解实现websocket服务器端 1.1需要的类 1.1.1服务终端类 用java注解来监听连接ServerEndpoint、连接成功OnOpen、连接失败OnClose、收到消息等状态OnMessage 1.1.2配置类 把spring中的ServerEndpointExporter对象注入进来 2.1代码示例 2.1.1 maven配置 <…

字节码基础

基本概念 java中的字节码&#xff0c;英文bytecode。是java代码编译后的中间代码格式。JVM需要读取并解析字节码才能执行相应的任务。java字节码是JVM的指令集。JVM加载字节码格式的class文件。校验之后通过JIT编译器转换成本机机器代码执行。 java字节码简介 1、java byteco…

MySQL 身份认证漏洞 CVE-2012-2122

漏洞影响版本 MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.演示 开启靶场 进入漏洞目录 cd /root/vulhub/mysql/CVE-2012-2122开启漏洞靶场 docker-compose up -d攻击 直接 运行 这个命令 for i i…

基于SSM+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

Linux开发--Linux内核开发移植

Linux内核开发移植 Linux内核版本变迁及其获得 Linux是最受欢迎的自由电脑操作系统内核&#xff0c; 是一个用C语言写成&#xff0c; 并且符合POSIX标准的类Unix操作系统 Linux是由芬兰黑客Linus Torvalds开发的&#xff0c; 目的是尝试在英特尔x86架构上提供自由免费的类Un…

旅游推荐管理系统(小组项目)

文章目录 前言 一、项目介绍 1. 项目目的 2. 项目意义 2.1 提升旅游体验 2.2 促进旅游业发展 2.3 数据积累与分析 2.4 提升服务品质 2.5 优化资源配置 二、项目结构 1. 主要使用的技术 1.1 若依&#xff08;Ruoyi&#xff09;框架 1.2 Vue.js框架 1.3 Ajax 1.4 …

RS2227XN功能和参数介绍及PDF资料

RS2227XN是一款模拟开关/多路复用器 品牌: RUNIC(润石) 封装: MSOP-10 描述: USB2.0高速模拟开关 开关电路: 双刀双掷(DPDT) 通道数: 2 工作电压: 1.8V~5.5V 导通电阻(RonVCC): 10Ω 功能&#xff1a;模拟开关/多路复用器 USB2.0高速模拟开关 工作电压范围&#xff1a;1.8V ~ 5…

leetcode刷题指南

本文我将分享给大家一套我自己使用良久并觉得非常高效的 学习论&#xff0c;它可以运用到 Leetcode 上的刷题&#xff0c;也可以 generalize 到生活中涉及到学习以及记忆的方方面面。当然&#xff0c;本文将以 Leetcode 刷题为 case study 去进行讲解。 更具体一点, 我会教大家…

WEB后端复习——JSP、EL、JSTL

JSP:Java Serve Pages(Java服务器页面) 运行在服务器的脚本、在静态网页HTML代码中嵌入java 优势特点 1.被编译后可以多次直接运行&#xff0c;代码执行效率高&#xff08;一次加载、多次可用&#xff09; 2.动态代码封装&#xff0c;组件可重用性高&#xff08;JavaBean EJ…