方法总述:
首先,将原始图像分成大小相等的块,并计算原始图像的预测误差。
然后,分别对预测误差的8个位平面执行重排和位流压缩。
最后,对腾出空间后的图像进行流密码加密,并通过多LSB(最低有效位)替换将附加数据嵌入到腾出的空间中。
方法具体介绍
为腾出附加数据(要嵌入的信息)空间要进行像素预测和位平面的重排以及压缩。
1、像素预测
使用中值预测器(MED)进行像素预测。
具体方法见下图以及公式:
根据的原始图像的像素值及其位置,就可以对进行预测得到,接着计算预测误差。
然后,将的绝对值通过下式转化为8位二进制(表示8个位平面):
由于预测误差会出现正值和负值两种情况,因此在最高位平面(MSB)进行标记,1代表负值0代表正值。
由于最高位平面需要标记正负号,所以剩下的7位能表示最大十进制127,因此当预测误差超过的范围定义为溢出像素,依然使用其原始像素值,并且溢出像素的个数和它所处的位置会作为附加信息被记录下来。
2、位平面重排
上一步得到的预测误差通过8位二进制表示,得到了八个位平面,将位平面划分为相等大小的块。然后利用不同的块扫描方式进行扫描
扫描方式如图,总共有四种模式,用2位二进制表示分别标记为00、01、10、11。需要对每一个位平面都进行上面四种方式的重排。下一节会有例子
3、位平面压缩
使用Bit-Stream Compression(BSC)对每个位平面的四种扫描结果序列进行编码处理,进而得到压缩结果,
编码(就是为了得到最短的压缩结果)分为两种情况,设 :连续0或连续1的个数;:编码的前缀;:编码的中间值;:编码的后缀;:自定义参数;:的长度
具体公式:
- :,的值是从当前比特向后截取的长度为的重新排列的比特流。
- :首先根据公式 计算的值,由个连续的1组成,并以0结尾;;如果连续值是0,则的值取0,如果连续值是1,则的值取1
以下图为例作为介绍
原始图像可以用序列:000 000 000 001 000 000 100 000 000 000 000 000(36bits)表示
设置
位平面的重排类型00,块的大小3×3
000 000 000 000 001 000 100 000 000 000 000 000
=14(14个连续的0),,计算,所以,,转化为二进制 ,恰好,不需要补0;
综上:
=1(1个连续的1),,所以,因为,所以
综上:
=1(1个连续的1),,所以,因为,所以
综上:
=14(14个连续的0),,计算,所以,,转化为二进制 ,恰好,不需要补0;
综上:
所以第一种重排列的位平面最终的压缩结果为 (24bits)
位平面的重排类型01,块的大小3×3
000 000 000 100 000 000 000 001 000 000 000 000
=9(9个连续的0),,计算,所以,,转化为二进制 ,恰好,不需要补0;
综上:
=1(1个连续的1),,所以,因为,所以
综上:
=10(10个连续的0),,计算,所以,,转化为二进制 ,恰好,不需要补0;
综上:
=1(1个连续的1),,所以,因为,所以
综上:
=9(9个连续的0),,计算,所以,,转化为二进制 ,恰好,不需要补0;
综上:
所以第二种重排列的位平面最终的压缩结果为 (31bits)
~~~~~~~~剩下的两种不再做介绍,依次类推即可~~~~~~~~~~
如果剩下两种重排列压缩均小于24位的话,就选择00类型作为该平面的压缩方式,并且标签为00。
经过以上操作,可以压缩的位平面如下图所示:
其中Flag标记该位平面是否能够压缩,Type label标记的是重排列的类型,Compressed bit-plane是压缩之后的比特流,剩下的Vacated embedding room就是腾出的空间。
为了能够还原图像以及提取附加数据,需要嵌入块的大小、、溢出像素的数量的位置作为辅助信息,放在MSB位平面上,压缩的bit流放在LSB位平面上,空出的位置用0填充。
3、图像加密
利用密钥生成伪随机矩阵转化为8位的二进制,形成八个位平面与原图像像素取异或,进行加密。
4、在加密图像中隐藏数据
首先提取放置在LSB平面上的压缩比特流的数量,并且可以根据所提取的信息获得空出空间的位置。然后,采用数据隐藏密钥来加密附加数据。最后,加密后的附加数据通过LSB替换嵌入到空出来的多LSB平面中。
5、数据提取和图像恢复
分三种情况:只拥有,只拥有,同时拥有和。