基于直方图平移的图像二次分块可逆数据隐藏方法

时间:2022-06-13 06:42:51

基于直方图平移的图像二次分块可逆数据隐藏方法

摘要:由Ni提出的对像素进行直方图平移进行可逆数据隐藏,一方面在单峰值或双峰值的情况下嵌入容量不够高,另一方面在嵌入数据之后对于图像的保真度也不够好。在此,基于直方图平移的方式,提出一种改进算法,将图像进行二次划分,增加像素峰值点,提升图片的峰值信噪比。实验结果表明,该算法不仅可以实现可逆数据隐藏,而且与Ni算法相比,既提升了嵌入容量,也使隐藏后的图像失真更小。

关键词:可逆数据隐藏;直方图平移;像素分块;双向直方图平移;区域再分块

中图分类号:TP309

文献标识码:A

DOI:10.3969/j.issn.1003-6970.2015.07.023

0 引言

可逆数据隐藏是指在正确提取数据后还能无损地恢复原始图像,通常要满足隐蔽性好和容量高两个特性,被广泛应用于医学、军事、司法、政务等领域。当前比较受关注的算法是2006年Ni等人提出的基于直方图平移的方法。该算法是基于图像的直方图来展开。近年来对于该算法的改进,大多追求容量的最大化。其改进思路主要有三类:一是通过各类预测算法建立图像预测误差直方图,产生高峰值。二是通过改变直方图位移水平,增加载荷。三是在图像中进行多层隐藏,得到多峰值。四是通过一种自适应的算法让载密信息根据图像特征来动态嵌入。在实际应用中,对于一些敏感的图像,如医学图像、军事图像等,减少图像失真远比增加负载更重要。

本文的研究就是从提高嵌入容量和降低图像失真的角度对Ni算法进行改进,通过对图像的二次划分,第一次划分将图像划分成若干个大的区域,在这些区域中分别计算其峰值,从而得到较多的峰值点,第二次划分,在第一次划分的若干个大区域中,再一次将区域像素分成很多小像素块,若小像素块中存在当前区域像素的峰值点,就进行直方图平移,嵌人数据,若不存在,就不改变该像素块,以此来降低图像失真。另外,为了尽量提升嵌入容量,采用双向直方图平移方法,最终可以实现低失真高负载的要求。

1 直方图平移可逆数据隐藏

由Ni提出直方图平移可逆数据隐藏算法描述如下:

在图1中,左侧为原始图像,右侧为该图像的灰度直方图。此灰度直方图,中存在峰值最高的像素点,依赖此像素点进行数据嵌入。具体方法是寻找峰值点A右侧最近的零点灰度的像素值B,在峰值点A和零点B之间的所有像素向右平移一位,这样峰值点右侧的第一个像素点即A+l为0。遍历图像的像素点,当遇到像素灰度直方图中的峰值点A时,如果嵌入的比特流是0,则保持不变,如果嵌入的比特流是1,则将峰值点A像素+1,则灰度直方图中的峰值点右侧第一个像素的数量即(A+1)增加1;一直到所有峰值点嵌入完成。提取数据时,遍历所有像素点,当遇到像素点A时,提取“0”比特,当遇到(A+1)时候,提取“1”比特,然后将A+1像素值减1,还原成A像素。当数据提取完成之后,将A点和B点之间的像素值减1,即可还原原始图像,可以看出Ni算法的负载量是取决于原始图像峰值点的个数的。

2 二次分块嵌入算法描述和实现

2.1 算法描述

判断嵌入算法的好坏在于嵌入容量和图像的峰值信噪比。本文提出一种基于灰度直方图平移的信息隐藏可逆算法能较大提升嵌入容量和提高嵌入之后的峰值信噪比。

基于直方图平移的信息隐藏嵌入容量的关键在于峰值点的个数,以512*512*8的灰度图像为例,在图1所示的lena图。通过Ni算法的描述,经过实验数据得到像素峰值点的个数为2714.

首先,提升嵌入容量。为了得到更多的峰值点,将512*512*8图像分为64个区域,在64个区域中分别都有各自的灰度直方图,统计每个区域的峰值点和零点,当嵌入图像时,判断当前所在区域,根据当前区域的峰值点来进行直方图平移嵌入,实验数据得到图1中的lena图,经过第一次划分的64个区域之后,峰值点的总和达到10596个峰值点,大大提升了峰值点的个数,极有利于提升嵌入容量。

其次,降低图像的失真率。通过提升峰值信噪比来降低图像的失真率。峰值信噪比的计算公式如下。

其中numS是平移点的个数,numB为隐藏比特流中1的个数。numS和numB越小,PSNR就越大,图像质量越好。

在第一次将图片进行划分之后峰值点增多,则会造成直方图平移的数量增多,那么会造成图像的失真率较高。为保证图像的质量,将第一次划分的每一个区域中,再次将像素进行划分,第二次划分则将像素分块的范围变小,比如分成4*4的16个像素为一个块。在该分块中,判断是否存在分块所在的区域的灰度直方图的峰值点,若存在,则将该分块像素进行直方图平移,嵌人数据,若不存在,则不嵌入数据。这样能造成不必要的像素点平移,从而提高嵌入数据后的峰值信噪比,保证图像质量。实验数据证明,这种二次划分的方法,既能提高嵌入容量,也能提高峰值信噪比。

2.2 嵌入算法实现过程

以512×512×8的图片为例。嵌入过程如下所述:

1)将图片分成64个区域,对应为64×64×8的图块,则一共有64个这样的图块。

2)保存每个图块的峰值点Ai,用来嵌人数据。

3)在每个64×64×8的图块中,再次将该图块划分成64个4x4x8的小块。

4)在第一次划分的64个图块,每个图块中,以4x4的方块为单位进行遍历,判断4x4的方块是否存在该像素值等于Ai的像素点。 嵌入算法如下:

i)若该4x4的方块存在1个Ai的像素点,则仅仅平移该区域直方图,不进行数据嵌入。

ii)若该4x4的方块不存在等于Ai的像素点,则不平移该区域直方图。

iii)若该4x4的方块存在n个等于Ai的像素点(n>1),则将直方图进行平移,若在前n.1个等于Ai的像素点中有嵌入0的峰值点,则最后等于Ai的像素可以嵌入0或1;若前n-l个等于Ai的像素中没有嵌入0的峰值点,则保留最后一个等于Ai的像素不嵌入。若嵌入了1,则嵌入后分块中会存在Ai+l的像素点;若分块中都嵌入0,则嵌入后分块中像素值等于Ai的像素的个数大于1.

5)遍历第一次划分的64个图块,每个图块依次按照4)中的嵌入方法进行嵌入。

2.3 提取算法实现过程

提取算法是嵌入算法的逆过程。

1)将图片分成64个区域,对应为64×64×8的图块,则一共有64个这样的图块。

2)根据嵌入时的保存下来的峰值点(Ai)集合,来遍历这64个图块。

3)在每个64×64×8的图块中,再次将该图块划分成64个4x4x8的小块。

在第一次划分的64个图块,每个图块中,以4x4的分块为单位进行遍历,判断4x4的方块是否存在等于Ai的像素点。描述如下:

i)若该4x4的分块存在1个等于Ai的像素点,则反向平移该区域直方图,修改该区域的像素。

ii)若该4x4的分块不存在等于Ai的像素,则说明当前的分块在嵌入的时候并没有进行像素修改,不需要平移像素。

iii)若该4x4分块中存在2个以上的等于Ai的像素点,或者该分块中存在1个等于Ai的像素点且在这个像素点之后的遍历存在Ai+l的像素点,则遍历分块,在等于Ai的像素点上提取0,等于Ai+l的像素点提取1,然后反向平移直方图,恢复原始像素;若该分块中只存在一个Ai像素点,且是遍历该点之前存在Ai+l的像素点,遍历该点之后不存在Ai+l的像素点,则将分块中峰值点右侧的像素点提取1,平移其他像素。

5)对每一个64×64×8的分块执行4)中的步骤,完成所有数据的提取。

3 实验结果

实验采用visual studi0 2010进行实验仿真,从USC-SIPI图像库中选择了若干图片进行测试。嵌人数据采用双向直方图嵌入,且对比数据都是采用双向直方图嵌入。原始图像如图2所示。嵌入了隐藏数据之后的图像如图3所示。

表1中表示了与Ni算法和文献9的实验数据的嵌入容量对比。

表2中表明了与Ni算法和文献9的实验数据详细的峰值信噪比对比。

以上对比数据均采用双向直方图平移算法进行测试。从表1中可以看出,因为峰值点数量的增加,嵌入容量有明显的提高。

从表2中可以看出,嵌人数据之后,峰值信噪比也有明显的提高,即图片的质量会更好。

4 结论

本文对Ni的直方图平移嵌入数据的算法进行了改进,提出了一种基于像素直方图平移的可逆信息隐藏算法。算法通过第一次区域划分,提升了像素峰值点,从而提高嵌入容量;其次对每个区域进行了第二次像素分块,尽可能的减少了像素直方图平移的数量从而增加图片质量。综述,该方案是在嵌入容量和图像质量方面都是有所提高的。

上一篇:问题引领教学,培养实践能力 下一篇:公安院校大学生学习动机对专业认同的影响研究