文章全名:Reversible data hiding in encrypted images based on pixel prediction and multi-MSB planes rearrangement/基于像素预测和多MSB平面重排的加密图像可逆信息隐藏
本篇文章属于reserving room before encryption(RRBE)范畴。
首先,利用中值预测器(MED)计算预测值;接下来,用一个位平面表示预测误差(PEs)的符号,预测误差的绝对值用其他位平面表示;然后,将位平面划分为均匀快和非均匀块,并重新排列这些块;最后,根据不同的像素预测方案,自适应地嵌入不同大小的附加数据。
使用中值预测值(MED)对的原始图像进行计算【第一行第一列的像素作为恢复原始图像的参考像素不参与预测计算】。具体计算过程在上一篇博客中有介绍:MED计算过程
然后计算预测像素值与原始像素值之间的误差:
也就是第一行第一列的参考像素保留原有的像素值,其他位置像素进行差值运算。
同时,根据预测误差设置溢出像素,使溢出像素的预测误差=原始像素。
实际上,溢出像素的个数很少,以512×512的Lena图像为例,其溢出像素的个数为1063,因此最终重建的图像仍然是无损的。PE的分布比原始像素值的分布更为集中(中值预测和溢出像素修正的结果),也就意味着位平面中有更多的相同值,因此嵌入容量得到提高。
在得到PEs之后,要生成预测误差PE的位平面,本文提出一种自适应的方法计算PE位平面。计算过程如下:
考虑到灰度图像的像素值范围0-255,将参考像素(或)的预测误差PE(原始像素)转换为8位二进制序列
除参考像素外,其他像素的预测误差(PE)转换成7位二进制序列
由于这些位置还包含溢出像素 ,因此第8位二进制序列需要分情况进行转换:
也就是说,对于非溢出像素的预测误差(PE)来说,其符号由一个位平面表示(最低位),其绝对值由其它位平面表示(1-7位);对于溢出像素的预测误差(PE)直接使用常规的十进制转化二进制即可。
由于在计算PE的过程会有参考像素、溢出像素的存在,所以生成一个PE标签映射以方便识别不同的类型,分别用1表示溢出像素,用0表示其它像素,这样就得到了一个映射,是一种包含大量0的稀疏矩阵,可以进行压缩。如图:
通过以上操作,就可以将位平面划分成若干个不重叠的子块,每一个子块要么属于均匀块(UBs,块内数值相同),要么属于非均匀块(NUBs,块内数值不同)。因为1表示的是溢出像素,所以属于均匀块的个数更多。然后对于各个子块,用0表示均匀块,用1表示非均匀块,得到了标签映射,如下图。
同样地,该映射具有稀疏特征,可以进行压缩,其长度用16位二进制序列表示。 随后,顺序遍历处理后的位平面,将NUB放在位平面的前面,UB放在后面。【有点没看懂,为什么不调换顺序后再对其进行映射呢?】
还需要对NUB进行标记,如果可以嵌入信息标记为0,否则标记位为1.(判定标准在标记加密图像那一节)。将所有的辅助数据嵌入到相应的UB中,但保留最后一个位置方便恢复图像。考虑到有些位平面无法容纳所有辅助数据,因此最终生成8位二进制序列以指示当前位平面是否可以被嵌入信息。
使用的流密码加密,上一篇文章中有介绍,就是根据密钥伪随机产生的矩阵:
根据不同的块以不同的方式进行嵌入数据,但为了附加信息的安全性,利用密钥对数据进行加密操作。具体嵌入步骤如下:
首先提取MSB平面右下角的辅助数据,以确定信息是否可以嵌入到当前位平面以及嵌入位置。对于NUB是否可以嵌入,直接看下图,其它情况不允许嵌入
UB块的数据嵌入,如下图: 保证最后一个值不改变。
首先,合法的接收者根据MSB平面右下角的辅助数据将标记的加密图像划分为八个位平面。如果当前位平面是可嵌入的,则定位嵌入的附加数据,并依次提取剩余可嵌入位平面的辅助数据。对于每个NUB,如果其辅助数据为0,则可以在其中提取附加数据。对于每个UB,除了最后位置的预测值之外,按顺序提取位置的附加数据。最后,所有嵌入的附加数据都可以被无错误地提取,并用数据隐藏密钥解密。
首先,合法的接收者用加密密钥解密标记的加密图像,并提取MSB平面右下角的辅助数据,以确定当前位平面是否被重排。然后,顺序地提取剩余位平面的辅助数据。根据上述预测方案,可以恢复可嵌入位平面中的所有NUB和UB。最后,接收端根据提取出的标签图,无损地重建出原始图像
通过以上两个步骤。合法的接收者可以无差错地提取数据并且可以无损地恢复图像。
理论方法有些绕,可以利用源代码进行详细解读。
仅供学习,切勿转载,如有侵权,联系立删!
如有不对的地方,还请指出,多多交流~