论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)

 本文介绍论文《基于自适应哈夫曼编码的密文可逆信息隐藏算法》的基本算法流程。

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第1张图片 算法流程

一 哈夫曼编码

哈夫曼编码(Huffman Coding),又称霍夫曼编码。Huffman于1952年提出这种编码方式。主要功能就是缩短编码长度。论文采用哈夫曼编码,目的就是尽可能的缩短位图(bit map)的编码长度,节省存储空间。

此处只简述构建方法。具体详细说明还有唯一可译性等解释可参考我的这篇文章:

一文搞懂哈夫曼编码如何根据哈夫曼树构造及其唯一可译性_zrc007007的博客-CSDN博客

熟悉可跳过。

构建方法

首先构建哈夫曼树。构建哈夫曼树的原则就是①先合并权值最小,在具体应用中就是出现频率最小的两个节点;②所有节点必须都在树上。

比如我们有5种字符,ABCDE,出现频率如下:

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第2张图片

然后合并权值/出现概率最小的两项,这里就是0.1的A和0.15的B。后面类似。 

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第3张图片

其余合并过程如下:

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第4张图片

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第5张图片

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第6张图片

然后根据哈夫曼树进行编码,就可以得到哈夫曼编码了。我们先确认编码规则,很简单,左边标1,右边标0,还是左边标0,右边标1。比如我们这里选左边标1,右边标0,那标出来的结果就是这样的:

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第7张图片

所以编码结果如下:

A 111

B 110

C 101

D 100

E 0

二 中值预测器MED

中值预测器(Median Edge Detector, MED),指用图像中值进行预测的预测器。一般保留图像的第一行和第一列,然后根据以下公式,用当前像素的左、上、左上像素值预测其值:

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第8张图片

比如一个这样的块:

 论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第9张图片

然后用中值预测的结果应该是这样:

 论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第10张图片

三 用哈夫曼编码、中值预测器生成位图、嵌入信息

生成哈夫曼编码结果

还是上面的例子。我们首先把原始值与预测结果转化为二进制。

列一下转化为二进制的公式吧:

然后比较各像素最多前多少位与预测值一样。所产生的值就是标记值label。

比如原值x=158与预测值px=164的比较。

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第11张图片

 如上面图像块的比较结果就如下:

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第12张图片

然后统计各值出现的次数,再对其进行哈夫曼编码,除了第一行第一列标记的-1。比如这里统计的结果如下:

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第13张图片

生成嵌入信息

位图嵌入信息如下:

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第14张图片

 其中c_t(t=0,1,...,8)为哈夫曼编码,也就是后面的h_t的长度的二进制形式,也就是上面表格中码长2、4、4、3、1等的二进制形式,分别用4位进行存储;

h_t(t=0,1,...,8)为具体的哈夫曼编码,就是上面表格中的码字;

f为用该码字对位图进行编码的总编码长度Lm对应的二进制形式,Lm计算公式如下:

而对m×n的图像,f\left \lceil log_2m \right \rceil + \left \lceil log_2n \right \rceil + 2位存储;

\eta为位图具体的Lm位二进制序列,就是位图的具体信息了。前面的则都是附加信息。

四 图像加密

用加密密匙生成一个伪随机矩阵R,必须要和图像同样大小,比如都得是m×n。然后都转化为二进制,执行按位异或操作。公式如下:

其中⊕为按位异或操作。记得再转换回来十进制(如下公式)。

五 嵌入

嵌入位图

首先保存图像第一行、第一列的信息,这些信息在位图之后嵌入,然后用空出来的位置首先嵌入位图,至于另一部分,则按如下公式嵌入:

论文简述基于自适应哈夫曼编码的密文可逆信息隐藏算法(基于位图压缩的加密图像可逆信息隐藏算法)_第15张图片

b_s为要嵌入的信息,tI_e中当前像素的位图标记值。

你可能会有疑惑,欸,为啥7位和8位一样都是全部嵌入,这个嵌入是不是多了一个比特位啊,别着急,嵌入秘密信息时也是一样的,然后我会一起解释。

嵌入秘密信息

同样是比最大相同MSB位多一位来嵌入秘密信息。

顺着嵌入完位图、首行首列的参考像素信息后,余下的空间就可以嵌入秘密信息了(提一嘴,通常加密了)。

为什么要多一位来嵌入秘密信息呢?因为多的那一位,是可以通过取反来预测的!所以这一位也是可以预测的,所以可以这么嵌入。

六 提取和恢复

信息提取

按顺序提取位图、首行列的参考像素信息,后面的就是秘密信息了。通常配了一个数据隐藏密匙k_d,用这个解密之后就可以得到了秘密信息。

图像恢复

按原则,位图的t位是一样的,第t+1位是取反能够得到的,所以这t+1位就是预测可得。(当然,如果t=8,t+1的说法就是全部都预测可得,不用取反了)剩下的没有动,只要有图像加密密匙k_e就能通过和加密过程一样的解密操作解出来。所以稍微放一下公式吧:

其中

g_1=px(i,j)^{tMSB}                           高t位MSB预测可得 

g_2=(px(i, j)^{t+1}\bigoplus 1) \times 2^{7-t}      第t+1位取反可得

剩下的mod取余,解密可得。

你可能感兴趣的:(算法,数据结构,图像处理,霍夫曼树)