首先,将原始图像分成大小相等的块,并计算原始图像的预测误差。
然后,分别对预测误差的8个位平面执行重排和位流压缩。
最后,对腾出空间后的图像进行流密码加密,并通过多LSB(最低有效位)替换将附加数据嵌入到腾出的空间中。
为腾出附加数据(要嵌入的信息)空间要进行像素预测和位平面的重排以及压缩。
使用中值预测器(MED)进行像素预测。
具体方法见下图以及公式:
根据的原始图像的像素值及其位置
,就可以对
进行预测得到
,接着计算预测误差
。
然后,将的绝对值通过下式转化为8位二进制(
表示8个位平面):
由于预测误差会出现正值和负值两种情况,因此在最高位平面(MSB)进行标记,1代表负值0代表正值。
由于最高位平面需要标记正负号,所以剩下的7位能表示最大十进制127,因此当预测误差超过
的范围定义为溢出像素,依然使用其原始像素值,并且溢出像素的个数和它所处的位置会作为附加信息被记录下来。
上一步得到的预测误差通过8位二进制表示,得到了八个位平面,将位平面划分为相等大小的块。然后利用不同的块扫描方式进行扫描
扫描方式如图,总共有四种模式,用2位二进制表示分别标记为00、01、10、11。需要对每一个位平面都进行上面四种方式的重排。下一节会有例子
使用Bit-Stream Compression(BSC)对每个位平面的四种扫描结果序列进行编码处理,进而得到压缩结果,
编码(就是为了得到最短的压缩结果)分为两种情况,设 :连续0或连续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填充。
利用密钥生成伪随机矩阵
转化为8位的二进制,形成八个位平面与原图像像素取异或,进行加密。
首先提取放置在LSB平面上的压缩比特流的数量,并且可以根据所提取的信息获得空出空间的位置。然后,采用数据隐藏密钥来加密附加数据。最后,加密后的附加数据通过LSB替换嵌入到空出来的多LSB平面中。
分三种情况:只拥有,只拥有
,同时拥有
和
。