图像处理之《基于多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…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
