图像处理之《基于多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…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
