2023预测误差位平面冗余-RDHEI Based on Bit-Plane

RRBE

本文仅供学习,切勿转载和搬运,如有侵权,联系立删~

一、背景知识

The Gradient-Adjusted Predictor(GAP,梯度调整预测器)

根据被预测像素周围的七个像素进行预测

具体流程可参考文献X. Wu and N. Memon, "Context-based, adaptive, lossless image coding," IEEE Trans. Communications, vol. 45, no. 4, pp. 437-444, April 1997.

本文利用GAP的简化版本SGAP,只使用五个相邻像素进行预测,如图一:

 二、提出方法框架

内容拥有者首先对原始图像进行预处理,得到预测误差图像和误差矩阵块对应的块类型。然后对预测误差图像和矩阵块分别进行流密码加密和置乱。最后,将块类型编码并嵌入到块中以获得最终的加密图像并发送给数据隐藏器。

数据隐藏者从最终的加密图像块中提取其对应的块类型值并解码,计算剩余空间并将加密秘密数据嵌入其中,标记后的加密图像发送给接收方。

接收端对标记后的加密图像中的矩阵进行分块,提取图像中的辅助信息。根据不同的密钥,可以分别提取秘密数据和恢复原始图像。

三、详细介绍

A预处理

A.1计算预测误差 

边缘像素P_r作为参考像素保持不变,使用SGAP对其他像素进行计算,如下式,从而获得预测像素P_x

 除参考像素外,计算每个像素的预测误差:

 抛去参考像素,留下黄色区域矩阵P((M-1)\times (N-2)),如左图:

 由于预测误差存在正负,所以需要记录误差标志图作为辅助信息如右图,负1正0,总长度为MN-2M-N+2。因此获得了绝对值矩阵P',与参考像素共同组成预测误差图I_{op}

A.2误差矩阵类型

将上一步得到的矩阵P',分成n个互不重叠的s\times s大小的块矩阵B_i(i=1,2,...,n .n=\left \lfloor \frac{(M\times N)\times (N-2)}{s\times s} \right \rfloor),以下步骤用来依次处理每个B_i,块矩阵的像素被标记为e_t(t\in [1,t^2]),其中e_1作为参考像素,将所有像素转化为8位二进制

 再转换成十进制可通过下式:

 将块内除e_1外的像素的8位二进制序列与e_1的8位二进制序列进行MSB-LSB进行比较,获得相同比特的\alpha(\alpha \in [0,8]),通过下图给出一个例子:

这是针对预测误差做的处理,保留块内第一位参考像素的值好像没有什么意义,反倒占用了可嵌入的空间。

A.3合并块类型以生成β映射

遍历完所有的B_i矩阵块后,就会得到一个\alpha序列,可以计算\alpha序列中每个值[0,8]的频率,对纹理平滑和粗糙的图像作实验,以下表为例,

给出了一个较为普适性的结论: 统计结果表明,对于纹理简单的平滑图像,块类型主要分布在α = 4,5,6.纹理粗糙的复杂图像块类型主要分布在α = 2,3,4。因此可以进行块类型的合并来减少不必要的空间浪费。

本文提出了六种块类型,用\beta表示:

对平滑图像\beta _s

\alpha\beta
0,10
2,32
44
55
66
7,87

对复杂图像 \beta _c

\alpha\beta
0,10
22
33
44
5,65
7,87

因此得到一个\left \lfloor \frac{M-1}{s} \right \rfloor\times \left \lfloor \frac{N-2}{s} \right \rfloor大小的\beta标记图。举个平滑图例子:

因此,对于标记为\beta的块来说,所能腾出的空间是\beta (s^2-1)

A.4霍夫曼编码压缩\beta

以平滑图像Lena,块大小设置为2×2为例,按照\beta出现的频率,使用{00,01,100,101,110,111}进行编码,如下表:

这样原始图像的 \beta信息就会根据霍夫曼编码规则得到了一个\beta-映射。

为了恢复原始图像,需要将\beta的霍夫曼编码规则作为辅助信息嵌入到图像中,共占用32位比特:

由此,每一小块的所腾出的空间容量SEC_i和整个图像可嵌入空间MEC可计算为:

B图像加密

先对预测误差图I_{op}进行像素级别的流密码加密,再对误差绝对值矩阵P'分块进行置乱加密。

B.1流密码加密图像

使用加密密钥K_{e1}生成与原矩阵相同大小的伪随机矩阵R,转化成8位二进制,与原像素值对每一比特进行异或计算,得到加密的值。

B.2块置乱

使用置乱密钥K_{e2}生成与块个数相同的没有重复的序列\left \{ \delta _1,\delta _2,...,\delta _n \right \},按照这个序列打乱所有的块,得到一个新的块的排序\left \{ {B'_{\delta _1}}{B'_{\delta _2}},...,{B'_{\delta _N}} \right \},进一步获得了加密图像I_E。注意,如果原始图像的尺寸不能被完整的分块,则不在块中的像素只进行流密码加密。

这一步的块加密除了增加图像安全性之外没有什么意义,本就是预处理得到图像的冗余空间,更何况对每一个像素进行了流加密,原始图像的空间相关性已经被破坏了

C数据隐藏

C.1嵌入块类型β值

这一步是通过内容持有者进行操作,对加密图像I_E包含的P'_E也分成s×s大小的小块,用块置乱密钥K_{e2}将β-映射置乱到对应的矩阵块位置的,得到P''_E。在嵌入过程中,每一个小块中的参考像素保持不变,将β-映射到其它剩余可嵌入位置,如下图:

平滑图像小块矩阵腾出的空间β为6
β映射嵌入的例子

其中蓝色区域就是可嵌入秘密信息的位置,灰色区域不变,黄色区域是小块内的参考像素,绿色区域是嵌入的β-映射。 完成所有β-映射嵌入后将得到的I'_E传给数据隐藏者。

 注意,当β=0时,霍夫曼编码111,此时嵌入的β映射取代的位置是没有腾出嵌入空间的,这些被替换的原有的值就需要被记录下来!

C.2秘密数据嵌入

数据隐藏者先将P''_E进行划分块处理,再根据块中提取到的β-映射以及霍夫曼编码规则进行解码恢复类型。将秘密信息通过密钥K_h进行加密,嵌入到每个块中可嵌入的空间

C.3多级嵌入

开始对每一个块的参考像素下手,将其组成一个新的块参考误差像素矩阵,再分块获得二级块类型二级块参考像素,直至不能参考像素不能在进行分割成小矩阵块。

C.4辅助信息嵌入

(1)块大小的值,4比特信息;

(2)记录误差正负MN-2M-N+2比特;

(3)六个霍夫曼编码规则34比特;

(4)对于β=0时嵌入的霍夫曼映射所取代的值,被称为溢出像素;

(5)多级嵌入级数\gamma

(6)最后的嵌入坐标(m,n),长度log_2(m\times n)

边缘参考像素;连接辅助信息来替换这些像素的LSB。统计辅助信息的长度表示为L_\xi,即替换参考像素P_rL_\xi LSB.将长度值L_\xi和替换的LSB连接在秘密数据的前面,并且将信息流顺序地嵌入到由每个加密块空出的位平面中。获得标记的加密图像I_w,发送到接收者。

D数据提取和图像恢复

D.1只有数据隐藏密钥

首先从标记的加密图像的边缘像素LSB位中提取辅助信息,包括块的大小、误差正负映射、编码规则、溢出像素被替换的MSB,多级嵌入级别和最后嵌入坐标;接着根据提取的信息对标记的加密图像中划分为小块,根据小块内的β-映射获得要提取的数据个数;然后再对所有块内的参考像素进行矩阵重组,根据提取的多级嵌入级别进行秘密信息提取;最后将提取到的信息连接在一起,可以获得替换的LSB和加密的信息,通过K_h解密即可获得原始秘密信息。

D.2只有图像加密密钥

首先从标记的加密图像的边缘像素LSB位中提取辅助信息,β-映射、溢出像素被替换的MSB、边缘像素的LSB,并还原LSB位;接着根据β-映射,将β=0块中所替换的MSB还原;将标记的加密图像中的误差矩阵划分为大小为s的块,并使用加密密钥K_{e2}对该块进行逆置乱以恢复加密块。使用由加密密钥K_{e1}生成的M× N伪随机序列解密图像;每个块中的参考误差像素仅在嵌入之前和之后被加密。在解密之后,参考误差像素的前β MSB可以用于恢复块中剩余像素的β MSB。块内剩余像素的(8−β)LSB已通过解密恢复;由边缘像素的LSB提取的正负映射用于恢复相应位置的预测误差像素;边缘像素使用SGAP来预测目标像素值,并且添加预测误差以恢复原始图像I_o

D.3同时拥有两个密钥

参照前两步进行操作即可。

四、实验结果分析

分别用ER(嵌入容量)、PSNR【用原始图像估计恢复图像的视觉质量】、MSE(测试方法可逆性)、SSIM(图像相似性的度量)来进行实验性能分析。

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

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

相关文章

selenium4的相对定位

selenium4相对定位 Selenium 4新增了相对定位器,能帮助用户查找元素附近的其他元素。可用的相对定位器有above、below、toLeftOf、toRightOf、near。在Selenium 4中,find_element方法能够接受一个新方法withTagName,它将返回一个RelativeLoca…

项目管理必备的五张图表,助力你高效掌控全局

在项目管理中,图表作为一种直观的工具,帮助项目经理更有效的规划、监控和控制项目的各个方面,以下是项目经理常用的几张图表,它们在项目管理中发挥着至关重要的作用。 1、甘特图 甘特图(Gantt Chart)是最…

C语言——oj刷题——猜数字游戏

当用C语言来实现猜数字游戏时,我们可以设计一个简单的游戏规则:计算机随机生成一个1到100之间的整数,玩家需要通过猜测来猜出这个数字。游戏会根据玩家猜测的数字与目标数字的大小关系给出提示,直到玩家猜中为止。 下面是一个用C…

类体相关知识

定义 类声明之后的一对大括号“{”,“}” 以及它们之间 的内容称作 ,大括号之间的内容称作类体的内容。 组成部分 变量的声明:用来刻画属性 。 方法的定义:用来刻画行为功能

2023年12月CCF-GESP编程能力等级认证Python编程七级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(每题 2 分,共 30 分) 第1题 假设变量 x 为 float 类型,如果下面代码输入为 100,输出最接近( )。 A.0 B.-5 C.-8 D.8 答案:B 第2题 对于下面动态规划方法实现的函数,以下选项中…

VR科学知识互动展示介绍|游戏体验馆加盟|VR展示厅

VR科学知识互动展示是一种利用虚拟现实技术来呈现科学知识并与观众进行互动的展示方式。通过VR设备,参观者可以沉浸在各种科学主题的虚拟环境中,以全新的视角和体验来探索科学领域的知识。 这样的展示通常结合了视觉、听觉和触觉等感官体验,使…

springboot-异步、定时、邮件任务

一、异步任务 1、创建项目 2、创建一个service包 3、创建一个类AsyncService 异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功&#xff…

1.2_1 分层结构、协议、接口和服务

1.2_1 分层结构、协议、接口和服务 (一)为什么要分层? 主机A如果想要向主机B发送文件,则一定要经过中间的一些介质、链路。 发送文件前要完成的工作: 1.发起通信的计算机必须将数据通信的通路进行激活。 所谓的激活&a…

多线程系列(十五) -常用并发工具类详解

一、摘要 在前几篇文章中,我们讲到了线程、线程池、BlockingQueue 等核心组件,其实 JDK 给开发者还提供了比synchronized更加高级的线程同步组件,比如 CountDownLatch、CyclicBarrier、Semaphore、Exchanger 等并发工具类。 下面我们一起来…

OJ_空闲块

题干 C实现 /** 输入样例: 12 1024 2048 8192 512 16384 1024 32768 8192 65536 8192 77824 1024 80896 3072 86016 1024 91136 5120 99328 512 104448 1024 112640 3072 1024 2560 10240 512 1024 6400 512 -1 输出样例: 104448 1024 112640 3072 1024…

字节后端实习 一面凉经

心脏和字节永远都在跳动 深圳还有没有大厂招后端日常实习生啊,求捞~(boss小公司也不理我) 很纠结要不要干脆直接面暑期实习,又怕因为没有后端实习经历,面不到大厂实习。死锁了

SpringMVC-请求与响应(附Servlet相关接口替换方案)

1.请求 1.请求参数 SpringMVC将传递的参数封装到处理器方法的形参中&#xff0c;达到快速访问参数的目的 1.普通类型参数传参 page.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <body> <h1>请…

从零学习Linux操作系统 第三十一部分 ansible常用模块介绍

一、ansible运行模块的两种方式 Ad-Hoc方式 ##利用ansible命令直接完成管理&#xff0c;主要用于临时命令使用场景 playbook方式 ##ansible脚本&#xff0c;主要用于大型项目场景&#xff0c;需要前期的规划&#xff0c;相当于shell当中的脚本 二、如何查看模块帮助 ansible…

基于Java springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…

DNS服务与管理

1. 规划节点 部署主从节点DNS服务的节点规划 IP主机名节点192.168.100.10master主DNS服务器192.168.100.20slave从DNS服务器 2. 基础准备 使用VMWare Workstation软件安装CentOS 7.2操作系统&#xff0c;镜像使用提供的 CentOS-7-x86_64-DVD-1511.iso&#xff0c;最小化Cen…

mysql从旧表 取出部分列并保存到新表几种方式介绍

在MySQL中&#xff0c;从旧表取出部分列并保存到新表有多种方式&#xff0c;主要包括以下几种&#xff1a; 1. 使用INSERT INTO ... SELECT语句&#xff1a; 这是最常用的方法。通过SELECT语句从旧表中选择需要的数据&#xff0c;然后使用INSERT INTO语句将数据…

shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Shell编程专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人 前言———— shell脚本中的if-else功能对于shell程序员来说是一笔重要的财富。当您需要根据预定义条件执行一组语句时&#xff0c…

MySQL 缓存策略

MySQL 缓存方案用来干什么 ? 缓存用户定义的热点数据&#xff0c;用户直接从缓存中获取热点数据&#xff0c;降低数据的读写压力。场景分析 内存访问速度是磁盘访问速度的 10 万倍。读的需求远远大于写的需求MySQL 自身缓冲层跟业务无关。MySQL 作为项目主要数据库&#xff0…

Cookie 探秘:了解 Web 浏览器中的小甜饼

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C++ 之LeetCode刷题记录(三十八)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target…