文章提炼
本篇的误差扩展算法(prediction error expanding,PEE)使用了菱形预测模式(rhombus pattern)、直方图转换(histogram shift)双嵌入方案(double embedding scheme),排序选定嵌入顺序(sorting),讨论了该算法中的越界问题(overflow/underflow question),在性能上比近来研究得到了很大的提升。
1.用四个临近像素进行预测
× 代表被预测像素,构成的集合为Cross set
● 代表预测 × 的临近像素,构成的集合为Dot set
此即菱形预测模式(rhombus pattern)。
预测公式:
预测误差:
对误差进行扩展,此即difference expansion:
原始图像被改变为:
恢复时,扩展误差为:
嵌入信息为:
原始预测误差为:
原始像素值为:
直方图按如下公式转换
解码时如下:
此即直方图转换(histogram shift)。
2.利用方差选择插入顺序
用像素相邻4个像素进行方差的计算:
此即排序选定嵌入顺序(sorting)。
3.越界问题(Overflow and Underflow Problem)
我们需要根据第二次嵌入是否越界来判断边缘像素是否已经插入,能插入是否需要位图,是否需要标记,不能插入则一定需要标记。
预测两次都没出现越界问题的像素不需要位图。
预测第一次不越界,第二次越界的像素,位图标为"0",分类为。
预测第一次就越界的,位图标为"1",分类为。
4.双嵌入方案(double embedding scheme),提高嵌入质量
Cross集,即×集,插入完了后,我们可以用Dot集,即●集再插入。
算法全流程,嵌入、提取流程示意图
嵌入的具体步骤:
先对Cross集嵌入,再对Dot集嵌入。
对Cross集:
1.在图像中划分好Cross集和Dot集,一般第一个像素开始为Cross集。
(提这一嘴,是因为其他论文为了适配它的方法,在算法结构的基础上衍生出了其他的划分方法。比如可参见我的这篇简述论文结构化简译New CNN-based Predictor For Reversible Data Hiding_zrc007007的博客-CSDN博客这篇论文为了适配它提出的神经网络预处理方法,从这篇中的每4个像素2个一组变为了每4个像素1个一组。有兴趣可以看看)
2.通过计算方差得出排序好的Cross集。
3.判断越界问题,生成位图。
4.中前34位留给阈值大小、还有载荷大小,用34位后进行嵌入。前面34位的预测误差同样需要作为数据嵌入到34位后。
对Dot集的嵌入方法,除了一开始已经划分好了,第四步中的头部信息也不用嵌入外,其他和Cross集一样。
注意这次用来产生预测值的是经过修改后的Cross集。
这样之后就得到了修改后的Dot集。
提取的具体步骤:
1.扫描前面34bit信息得到阈值大小、还有载荷大小。
2.根据越界问题的处理原理,反向推导,先判断像素是否能够扩展,
①能扩展,则直接提取
②不能扩展,根据位图,位图中该位置标记为0,则应该提取,为1则不能提取
用此种方法提取位图信息、之前的34位LSB、秘密信息。
首先根据对修改后的Dot集进行提取复原,得到集。然后根据复原后的Dot集对修改过的Cross集进行复原。
最终得到完整的原始图像和秘密信息。
复现代码
见我文章:
论文复现代码Reversible Watermarking Algorithm Using Sorting and Prediction_zrc007007的博客-CSDN博客