图像处理之《基于多MSB预测和Huffman编码的加密图像可逆数据隐藏》论文精读
一、文章摘要
随着云存储和隐私保护的发展,可逆数据隐藏在加密图像中(RDHEI)作为一种技术越来越受到人们的关注,它可以:在图像加密领域嵌入额外的数据,确保嵌入的数据可以无差错地提取,原始图像可以无损地恢复。本文提出了一种基于多MSB(最高有效位)预测和Huffman编码的大容量RDHEI算法。首先,自适应预测每个像素的多MSB,并在原始图像中进行Huffman编码标记。然后,采用流密码法对图像进行加密。最后,利用空出的空间可以通过多MSB替换来嵌入额外的数据。实验结果表明,与现有方法相比,该方法具有更高的嵌入容量。
二、文章提出的方法
本文提出了一种基于多MSB预测和Huffman编码的大容量无差错数据提取和图像解密新方法。如图2所示,所提方法包含三个阶段:1)图像加密由内容所有者完成;2)数据嵌入由数据隐藏者完成;3)数据提取和图像解密由接收者完成。在图像加密阶段,我们首先在图像加密之前计算原始图像的标签映射,并将标签映射嵌入到加密后的图像中。在嵌入阶段,我们可以根据标签映射,通过自适应多MSB替换在每个加密像素中嵌入多比特信息。最后,对于具有数据隐藏密钥或图像加密密钥的接收者,可以分别进行数据提取或图像恢复,且提取的数据和恢复的图像均无差错。
A.标签映射生成
对于大小为m × n的原始图像I,首先计算每个像素的预测值。如图3所示,我们基于当前像素x(i, j)周围的三个像素,使用中值边缘检测器(MED)预测器[6]计算预测值px(i, j),其中1≤i≤m, 1≤j≤n, 公式如下:
接下来,我们将x(i, j)和px(i, j)的值通过公式(6)转换为8位二进制序列,表示为xk(i, j)和pxk(i, j),其中k = 1,2,…8。
然后,从MSB到LSB依次比较xk(i, j)和pxk(i, j)的每一位,直到某一位不同,当前像素的标签等于它们相同位的长度。由于转换后的二进制序列有8位,所以像素的标签有9个情况,即从0到8。假设标签值用t表示,即t = 0,1,2,…,8,根据式(7)得到的t的最大值为当前像素x(i, j)的标签。
其中x(i, j)tMSB和px(i, j)tMSB分别为x(i, j)和px(i, j)的t- MSB(像素的前t MSB)值。
由式(7)得到当前像素的标签值t,表示该像素在后续的数据隐藏过程中可以嵌入(t + 1)位。这是因为原始像素的前(t + 1)个MSB可以从它的预测值中得到。换句话说,原始像素的前t-MSB与其预测值相同,将其预测值对应位置的值求负即可得到第(t + 1)个MSB。
例如,如图4所示,假设当前像素值x等于156,其预测值px等于150。然后将x和px转换为8位二进制序列,记为xk和pxk (k = 1,2,…, 8),即xk = ’ 10011100 ', pxk = ’ 10010110 ‘。通过比较,可以得到xk和pxk的序列在第5个位置是不同的,即前四位是相同的,因此像素x的标签为’ label = 4 ',即可以在该像素中嵌入5位信息。
最后,我们可以通过上述方法扫描图像中的所有像素,得到原始图像的标签映射。请注意,第一行和第一列中的像素是参考像素,没有标记。
B.图像加密
在该部分中,对原始图像的每个像素使用加密密钥Ke进行加密。首先,我们通过密钥Ke生成一个m × n的伪随机矩阵r。接下来,将当前像素x(i, j)及其对应的r(i, j)根据公式(6)转换为8位二进制序列,记为xk(i, j)和rk(i, j)。然后执行如下加密操作:
其中xke(i, j)是加密的8位二进制序列,⊕是异或(XOR)操作。最后由公式(9)计算加密后的像素xe(i, j),得到加密后的图像Ie。
C.Huffman 编码
根据Section III-A中获得的原始图像的标签映射,我们可以计算出图像中可以嵌入的数据总量。当然,标签映射需要转换成二进制序列作为辅助信息并嵌入到加密图像中,其目的是保证原始图像可以完全重建。
对于自然图像中的所有像素,有9种标签,所以我们需要用9个二进制代码来表示所有类型的标签。由于每个标签的数量不同,我们通过Huffman编码来记录标签映射,这样可以有效地压缩辅助信息量,从而增加图像的有效载荷。因此,我们预定义了9种Huffman码来表示这9种标签,分别是{00,01,100,101,1100,1101,1110,11110,11111}。我们首先对9种标签按像素数进行排序,我们使用较短的代码表示像素数较大的标签。也就是说,对于9个Huffman编码,其中’ 00 ‘表示像素数最大的标签,’ 11111 '表示像素数最小的标签。
例如,在Lena图像中,标签映射的分布和相应的Huffman编码如表I所示,其中’-1’表示参考像素。我们可以看到,Lena中标签值为5的像素数量最大,因此这些像素被标记为’00’代码。标签值为1的像素数量最少,因此这些像素被标记为’11111’代码。
Huffman编码确定后,我们可以计算标签映射的长度,表示为LM,公式如下:
D.标签映射嵌入
为了在加密图像中产生空间来嵌入额外的数据,我们需要在数据隐藏操作之前先嵌入标签映射。在加密图像Ie中,我们首先通过Huffman编码将标签映射转换为二进制序列。然后,我们以Huffman编码规则、二进制序列的长度和二进制序列作为辅助信息。请注意,Huffman编码规则是9个Huffman编码,按照它们所代表的标签按0到8的顺序排列。接下来,为了保证Huffman编码规则和标签映射在后期能够完全提取出来,我们需要将部分辅助信息存储在第一行和第一列的参考像素中。这是因为我们在提取辅助信息时需要提前知道当前像素的标签,而当前像素的标签只能从前一个像素提取的辅助信息中获得,也就是说我们不能直接从当前像素中得到它的标签值。最后,根据标签映射,将剩余辅助信息和替换后的参考像素通过多MSB替换嵌入到加密图像中,嵌入公式如下:
其中t为Ie中当前像素xe(i, j)的标签值,bs为待嵌入的辅助信息。在嵌入辅助信息和参考像素后,我们得到了最终包含标签映射的加密图像。注意,为了在后续操作中完全提取辅助信息,需要在一些粗略图像中设置多个行和列作为参考像素。
E.数据隐藏
在本小节中,在数据隐藏之前我们需要从获得的加密图像中提取Huffman编码规则和标签映射Ie’。首先,提取第一行和第一列的部分辅助信息,得到Huffman编码规则和辅助信息长度。然后根据已有的辅助信息和Huffman编码规则,获得当前像素的标签值t,提取(t + 1)位辅助信息。在获得所有辅助信息后,我们可以根据Huffman编码规则恢复标签映射。最后,根据式(11),将附加的数据嵌入到剩余像素中,剩余像素是用于将数据嵌入加密图像中的预留空间。因此,生成包含附加数据的标记加密图像Iew。注意,为了进一步增强嵌入数据的安全性,我们在嵌入过程之前使用数据隐藏密钥Kd对其进行加密。
F.数据提取和图像恢复
首先,合法的接收者可以从标记的加密图像Iew中提取Huffman编码规则和标签映射。然后,根据标签映射,以同样的方式提取参考像素和加密的附加数据。最后,将参考像素放回第一行和第一列。上面的工作可以在没有密钥的情况下完成,但是下一个过程将得到不同的结果,这取决于接收方拥有的不同的密钥。
如果接收方只有数据隐藏密钥Kd,则可以直接对提取出来的加密附加数据进行解密,获得所嵌入的信息。然而,由于没有加密密钥,原始图像无法重建。
如果接收方只有加密密钥Ke,则可以恢复原始图像而不丢失。这是因为数据隐藏密钥只对嵌入的数据进行加密,并不影响图像处理的过程。首先,根据Ke生成的伪随机矩阵r对得到的图像进行解密,并由式(8)处理。然后我们得到解密后的图像Iew,除了参考像素外,每个像素的前(t + 1)位都与原始像素不同。因为这些像素根据它们的标签值t嵌入了额外的(t + 1)比特的信息。接下来,我们从上到下,从左到右扫描图像中的像素,除了参考像素。使用MED预测器计算当前像素xew’(i, j)的预测值px(i, j),然后根据标签值t和预测值px(i, j)恢复原始像素x(i, j)。这是因为x(i, j)的t-MSB与对应的px(i, j)相同,x(i, j)的第(t + 1)个MSB可以通过对px(i, j)的第(t + 1)个MSB求负得到。注意,如果标签值等于8,则原始像素等于其预测值。重建过程表示如下:
其中,px(i, j)tMSB为由式(7)求得的px(i, j)的t- MSB值,bt+1为原像素的第(t +1)个二进制值,由下式求得:
式中,pxt+1(i, j)为由式(6)求得的px(i, j)的第(t +1)个二进制位。最后得到无误差的原始图像。
因此,只有数据隐藏密钥Kd和图像加密密钥Ke同时存在,接收方才能可逆地提取附加数据并恢复原始图像。
三、汇报PPT
1、预备知识
2、相关工作
3、提出方法
3.1、标签映射生成
3.2、图像加密
3.3、Huffman编码
3.4、标签映射嵌入 & 3.5、数据隐藏
3.6 数据提取和图像解密
4、实验结果
4.1、安全性分析
4.2、性能分析
4.3、比较
5、结论
论文地址:Reversible Data Hiding in Encrypted Images Based on Multi-MSB Prediction and Huffman Coding
开源代码:This code is the implementation of the paper “Reversible Data Hiding in Encrypted Images Based on Multi-MSB Prediction and Huffman Coding”.
相关文章:

图像处理之《基于多MSB预测和Huffman编码的加密图像可逆数据隐藏》论文精读
一、文章摘要 随着云存储和隐私保护的发展,可逆数据隐藏在加密图像中(RDHEI)作为一种技术越来越受到人们的关注,它可以:在图像加密领域嵌入额外的数据,确保嵌入的数据可以无差错地提取,原始图像可以无损地恢复。本文提…...

Nginx安装配置项目部署然后加SSL
个人操作笔记记录 第一步:把 nginx 的源码包nginx-1.8.0.tar.gz上传到 linux 系统 第二步:解压缩 tar zxvf nginx-1.8.0.tar.gz 第三步:进入nginx-1.8.0目录 使用 configure 命令创建一 makeFile 文件。 直接复制过去运行 ./configur…...

【算法练习Day26】分发饼干摆动序列 最大子数组和
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 分发饼干摆动序列最大子数组…...
redis缓存击穿/穿透/雪崩面试回答
面试官:什么是缓存穿透 ? 怎么解决 ? 候选人: 嗯~~,我想一下 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致…...

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

科技资讯|苹果穿戴新专利,表带、服装等织物可变身柔性屏幕或扬声器
根据美国商标和专利局(USPTO)本周公示的清单,苹果公司获得了一项新的技术专利,可以在 Apple Watch 表带、服装等物品上,引入基于织物的柔性扬声器。 根据专利描述,通过在织物中嵌入声学组件(例…...

数据分析和机器学习的11个高级可视化图表介绍
可视化是一种强大的工具,用于以直观和可理解的方式传达复杂的数据模式和关系。它们在数据分析中发挥着至关重要的作用,提供了通常难以从原始数据或传统数字表示中辨别出来的见解。 可视化对于理解复杂的数据模式和关系至关重要,我们将介绍11…...

祝所有的程序猿们2023年的1024节快乐~
许久没更新Bolg了,眼看就要到1024节,其实也是没有可以更新的东西,目前在PhD,发现很多东西都还需要慢慢沉淀,放一doctoral college 开学的时候ppt的老图。 越往深处研究会陷入泥潭,考虑的细节将会越来越多&…...

Win10/Win11系统bitlocker正在等待激活如何解决?
有同学升级Win10系统后,发现C盘与D盘分区盘符中出现了黄色的锁定感叹号,还显示“bitlocker正在等待激活”,这可能是用户开启了bitlocker加密所导致的。下面就来看看解决的办法吧。 一、bitlocker正在等待激活的解决方法 打开控制面板-系统和安…...

酷开科技 | 酷开系统,为居家生活打开更精彩的窗口
电视在我们的日常生活中扮演着重要的角色。虽然,作为客厅C位的扛把子——电视的娱乐作用深入人心,但是,它的涵义和影响力却因我们每个人的具体生活环境而存在着种种差异,而我们的生活环境又受到我们所处的社会及文化环境的影响。 …...

谷歌真的不喜欢 Node.js ?
有人在 Quora 上提问,为什么谷歌不喜欢 Node.js 呢,Google 的 UX 工程师和来自 Node.js 团队的开发者分别回答了他们对这个问题的看法,对于编程语言来说,每一门语言都有它自己的优势,重要的是如何用它去解决问题。 谷…...
前端项目如何找到所有未被引用的文件
要找到 React 项目中所有未被引用的文件,可以使用工具来进行静态代码分析。以下是一些方法: 使用静态代码分析工具unimported: 静态代码分析工具可以找到未被引用的 JSX 文件。一个常用的工具是 “unimported”。以下是使用它的步骤ÿ…...

CANoe-使用IG Ethernet Packet Builder实现IP包分片的若干问题
在文章《CANoe-Ethernet IG和Ethernet Packet Builder的使用和区别》中,我们讲过Packet Builder可以组装多种类型的以太网报文: 当我们想组装一条icmpv4 echo request报文,payload只有1个字节的数据FF时,选择ICMPv4 Packet,创建一条ICMPv4报文,把payload改为1个字节: 然…...

UE4逆向篇-2_各类数据的查找方式
写在前面 1.通过前面的文章,相信各位已经能够自己找到GNames并使用DUMP工具导出GNames了。 2.本篇文章将介绍各种所需数据的查找方法。 一、准备工作 1.CheatEngine,本篇以及后续篇幅的重要工具。 2.一个记事本,保证你能记录下关键信息。…...
JDBC-day07(Apache-DBUtils实现CRUD操作)
九:Apache-DBUtils实现CRUD操作 1 Apache-DBUtils简介 Apache-DbUtils 是 Apache 组织提供的开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用DbUtils能极大简化JDBC编码的工作量,同时也不会影响程序的…...

零代码编程:用ChatGPT多线程批量将PDF文档转换为word格式
pdf2docx是Python的一个库,可以很方便的将PDF文档转换为word格式,首先安装这个库。 然后在ChatGPT中输入提示词: 你是一个Python编程专家,要完成一个文档格式转换的任务,具体步骤如下: 打开F盘的Books文件…...

codeshell安装配置
codeshell安装配置 1 注意事项1.1 Python版本问题 2 codeshell环境搭建2.1 codeshell使用软件各版本2.2 软件下载2.3 codeshell使用环境安装2.3.1 python-3.10.9-amd64.exe安装2.3.2 Anaconda3-2022.10-Windows-x86_64.exe安装2.3.3 创建环境2.3.4 Pytorch安装2.3.5 transforme…...

mfc140u.dll丢失的详细解决方法,最详细修复mfc140u.dll丢失的办法分享
在计算机技术日益发展的今天,我们不可避免地会遇到各种各样的技术问题。其中,“MFC140U.DLL丢失”是一个常见的错误,它可能会影响我们的电脑性能和软件运行。本文将详细介绍四种解决“MFC140U.DLL丢失”问题的方法。 首先,我们需…...
CMake
文章目录 前言一、快速开始编译C/C代码1. 只有源码的项目2. 包含库的项目3. 编译成库给他人使用使用cmake的流程1. 生成构建系统2. 执行构建3. 执行测试4. 安装 && 打包 二、cmake 语法简介1 变量2 条件语句3 脚本命令**消息打印****if-else**:**list命令**:…...

互联网Java工程师面试题·Spring篇·第二弹
目录 3、Beans 3.1、什么是 spring bean? 3.2、spring 提供了哪些配置方式? 3.3、spring 支持集中 bean scope? 3.4、spring bean 容器的生命周期是什么样的? 3.5、什么是 spring 的内部 bean? 3.6、什么是 spri…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

MLP实战二:MLP 实现图像数字多分类
任务 实战(二):MLP 实现图像多分类 基于 mnist 数据集,建立 mlp 模型,实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入,可视化图形数字; 2、完成数据预处理:图像数据维度转换与…...
SpringCloud优势
目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...