(山东科技大学 计算机科学与工程学院,山东 青岛 266590)
随着安全意识和知识产权意识的提高,人们对自身信息的安全度也越来越重视,数字水印技术的使用也越来越多。图像数字水印技术根据嵌入的水印图像能否无损恢复分为可逆和不可逆水印技术。为了保护图像的完整性,可逆水印已成为水印技术的主流。可逆水印又称无损水印,属于脆弱性数字水印,能明显反映出信号是否被篡改,并且可以在提取出水印之后无损地恢复原始图像,适合图像完整性的认证。 因此,可逆图像水印技术被广泛用于医学、军事和法学方面等特殊领域的图片保留存储工作,用来保证重要图像信息不丢失。
现有可逆水印算法主要包括频域算法和空域算法,二者各有优劣,频域算法嵌入容量相对空域较少,但是嵌入效果比空域隐秘。空域算法常用的有差值扩展、直方图平移和预测值扩展等方法。差值扩展(difference expansion, DE)的方法由 Tian[1]在2003年提出,主要思路是通过扩展相邻像素的差值,对像素进行稍微改动,利用两个像素之间的冗余性来实现水印嵌入,水印提取之后,图像并无失真。 Ni等[2]提出了基于直方图平移(histogram shifting, HS)的水印嵌入方法,算法实现容易,但是用于像素值均衡的图像时,嵌入的容量主要取决于峰值点,导致算法的效果并不好。为了得到效果更好的直方图,Lee等[3]使用差值直方图替代灰度直方图,实现嵌入容量的增加。预测值扩展由 Thodi等[4]首先提出,通过相邻像素计算产生预测值和原值的差值进行水印的嵌入。Ni等[2]利用图像像素的直方图平移进行水印的嵌入;熊祥光[5]对水印嵌入进行一遍多比特嵌入和多遍单比特嵌入的比较,最终得出多遍嵌入的效果更好的结论。王俊祥等[6]根据直方图信息准确估计多层嵌入后水印容量及相应的水印图像质量,使直方图平移算法在多层嵌入方向进行容量估计。Kelkar等[7]对直方图平移的方法做出改进,增大了水印的嵌入容量,提高了安全性,但只是针对医学图像进行的研究。为了更好地利用直方图嵌入水印,黄志强等[8]进行邻域预测值扩展,利用八邻域与中间像素得到预测值,通过阈值判断对水印进行嵌入。郑淑丽等[9]使用相邻两像素的差分,选取水平相邻像素,然后对相邻像素做差值。通常的差值直方图都是通过平滑区域进行差值计算得到,为了同时使纹理区域也得到应用,Thomas等[10]提出在纹理区域和平滑区域都进行差值计算来生成差值直方图的方法。Mathpati等[11]提出了使用基于中止滤波器的动态预测误差直方图嵌入水印信息,能够更加灵活的选取嵌入位。针对溢出问题,Lee等[12]提出了误差预测补偿的方法,通过相邻像素来生成差值直方图。
由于可逆水印算法比较复杂,为了在保持图像视觉效果的前提下进一步简化算法复杂程度,精简水印嵌入和提取步骤,并且在差值直方图算法中增加水印的嵌入容量,本研究提出了基于分块预测的差值直方图平移的可逆水印算法,既可以增加嵌入容量也能保证邻域预测的精确度。实验结果表明,本算法的峰值信噪比(peak signal noise ratio,PSNR)值比文献[9]高,视觉效果好。
本研究提出一种基于分块预测的差值直方图平移的可逆水印算法,对比传统的选取3×3的分块,使用周围8个像素对中心像素进行预测,提高可嵌入的像素点的个数,从而增加一些嵌入容量;相对于直接采用直方图平移的方式,可以提高水印直方图的陡峭性,突出峰值点像素的个数,避免像因素值分布均匀而导致直方图平移嵌入水印容量少的问题;采用差值直方图解决直方图平移的上限溢出问题并能提高PSNR值,使含水印图像的视觉效果提高。算法的基本原理是根据图像的平滑度做出分块预测,将载体图像进行4×4分块,然后分块为4个像素一组,最后在分块内实施预测差值直方图平移实现水印嵌入。
设原图像为M×N的灰度图像,本节从图像分块、水印嵌入、水印提取和图像恢复及溢出处理等四个方面说明本研究算法的具体过程。
1) 将原图像划分成4×4的图像块,记为Bk,k=1,2,3…[M/4]×[N/4],如图1(a)所示;对图像进行4×4分块后可能导致最后的行(列)剩余一些像素值,当剩余3行(列)时采用图1(b)分块方式的前3行(列)进行处理;剩余两行(列)时用图2方式的前两行(列)进行处理;当剩余一行(列)时舍弃最后一行(列)像素值。
图1 分块方式Fig.1 Blocking mode
(1)
(2)
6) 根据计算可以得到一幅差值直方图,之所以选取差值直方图,是因为差值直方图在对其进行平移的时候,不用像普通的图像直方图一样,考虑直方图中像素值的溢出问题,嵌入的水印中不用添加附加信息,以减小算法复杂度。根据计算,大部分峰值点是0,为了减少算法复杂度,直接选取0值点作为嵌入点,使用直方图平移,把像素值大于0的点向大于0的方向平移一个单位,选取Lena图像显示直方图平移,为了效果明显,将像素值大于150的像素点右移5位,如图2、3所示。
7) 根据差值直方图判断嵌入容量,选取大小适合的水印图片,进入水印嵌入过程。
设图像大小为M×N,其灰度值为I(i,j) (0≤I(i,j)≤255),把水印图像转换为水印序列W,选取64×64的二值水印图片,将图像转化为1×4 096的水印序列,嵌入水印后的图像像素值用IW(i,j)表示,详细步骤如图4所示。
图2 Lena图像的直方图平移图Fig.2 Histogram shifting of Lena
图3 Lena图像右移5位直方图平移图Fig.3 The right by a five-bit histogram shifting of Lena
图4 水印嵌入流程图 Fig.4 Watermark embedding flow chart
水印嵌入具体过程如下:
1) 对原图像按照图1(a)、1(b)的方式进行分块处理,分块后就可以知道原图像的嵌入点;
2) 然后根据公式(1)、公式(2)对分块后的像素块进行计算求出差值,生成差值直方图;
3) 对于差值直方图中像素值大于0的部分整体向右平移一个单位,这样在差值直方图像素值为1的位置上就会留出空白;
4) 从第一个分块开始嵌入水印,判断嵌入点的差值是否为零,差值为零的嵌入水印,不为零的继续对分块内的第二个嵌入点进行判断,对4×4分块内的4个点依次判断,完成后,继续对下一个分块进行上述过程,直至所有分块处理完毕。公式如下所示:
(3)
5) 对水印图像进行处理,把二值水印图像做成水印序列用于嵌入,根据水印图像的大小设置一个水印嵌入的终止值,此终止值就是水印图片的大小,例如64×64的水印图片,终止值就是4 096,当可嵌入水印的像素点即差值为0的点达到4 096时,停止嵌入。
水印从图像中被提取后,再经过下面步骤就能恢复出原图像。
1) 对嵌入水印后的图像进行分块,分块方式仍是按照图1(a)、1(b)的方式进行;
3) 利用差值生成一个差值直方图,因为是在差值为0的时候水印嵌入,故差值为1说明嵌入的水印值为1;然后同嵌入水印的顺序一样,从第一个分块开始进行水印提取,对每个嵌入点进行判断,若差值为1,说明嵌入的水印值为1,提取1;若差值为0,说明嵌入的水印值为0,提取0。然后继续对分块内的第二个嵌入点进行判断,对4×4分块内的4个点依次判断完成后,继续对下一个分块进行上述过程,直至所有分块处理完毕。水印提取流程如图5所示。
图5 水印提取流程图 Fig.5 Watermark extraction flow chart
4) 因为水印嵌入时对差值直方图大于0的像素向右平移了一个单位,使得在嵌入水印前,像素值为1 的像素点数为0,所以提取水印时对得到的差值进行判断,如果得到的差值点为0,说明嵌入的水印值为0,差值为1说明嵌入的水印值为1。公式如下所示:
(4)
5) 提取水印后,对图像进行恢复,把差值直方图中差值大于1的像素点向左平移一位,得到原图像。
普通的直方图右移要考虑像素值为255的像素值怎么处理,但是差值直方图不需考虑移位时的溢出。利用差值直方图在原本像素上嵌入水印时,若像素值是255,则该像素不嵌入水印,因为嵌入的水印值为1的话就会产生溢出;下限0不存在溢出现象,故可嵌入的像素值范围为[0,255],水印嵌入的判断公式为:
(5)
同理在提取水印时,对像素值是255的像素不处理,得到水印提取的判断公式:
(6)
图6 水印图像Fig.6 Watermark image
为了验证本方案的性能,选取了 Lena、Boat、Peppers、Lake、Couple和Plane 6幅较为典型的大小为512×512的8-bit灰度图像进行实验。水印信息选用64×64的水印。图 6 给出了一幅大小为64×64的二值图像作为水印,相当于大小 4 096 bits 的二进制序列。
选取的6幅原图像见图7。
图7 6幅原图像Fig.7 Six original images
对上述6幅图像进行分块处理后,利用公式(1)、(2)得到每一副图像的差值直方图,如图8所示。
图8 6幅图像分块后的差值直方图Fig.8 Difference histogram of six images after block
根据得到的差值直方图,使用直方图平移,把像素值大于0的点向大于0的方向平移一个单位,然后在0值点嵌入水印,得到嵌入水印后的差值直方图如图9所示。
图9 嵌入水印后的6幅图像差值直方图Fig.9 Six image difference histograms after embedding watermark
根据公式(8)对图像进行水印的嵌入,嵌入后的6幅图像如图10所示:
图10 6幅嵌入水印后的图像Fig.10 Six watermarked images
对嵌入水印图像进行水印提取和图像恢复后的图像如图11所示。
图11 水印提取后的6幅图像Fig.11 Six images after watermark extraction
从PSNR和最大嵌入容量两方面来评估算法的性能。PSNR 值越高说明图像的稳健性越好,失真越少,越能够反映图像的可视效果,计算公式为:
(7)
其中均方误差
(8)
表1显示了Lena、Boat、Lake、Peppers、Couple和Plane 6幅图像在嵌入大小为64×64的水印图像时的PSNR结果图和最大嵌入容量。
表1 6幅图像的嵌入容量及嵌入图7水印的PSNR对比结果Tab.1 embedding capacity and PSNR of six images’ comparison results of watermark embedded in Fig.7
通常PSNR值的普遍基准在30 dB,30 dB以下的图像劣化较为明显,在50 dB以上则表明效果良好,而表1中本文算法的PSNR的值均达56 dB以上,说明可视效果很好。一般的空域算法的嵌入量主要与图像的平滑度有关,图像越平滑嵌入的容量越大,故整体趋于平滑的图像,可以嵌入更多的水印。
图12 本文算法中6幅图像的PSNR值对比Fig.12 Comparison of PSNR values of six images in the algorithm
图13 Lena在不同算法下嵌入率和PSNR对比Fig.13 Comparison of Lena images in different algorithms
作用于6幅图像的PSNR值如图12,由图可见6幅图像随着嵌入水印大小的增加,图像的PSNR值逐渐减少,但是减少的幅度不大。从表1和图12可以看出,在嵌入图7水印后,使用本算法嵌入水印后的图像PSNR总体大于56 dB,达到很好的视觉效果,保证了水印的不可见性和图像的效果。
使用Lena图像将本方法与Ni[2]和Zheng[9]的算法进行对比(如图13),可见在嵌入率偏低的情况下,本算法的PSNR值在56 dB以上,而其他两个算法的PSNR值都在55 dB以下,提出的可逆水印算法的图像可视效果高于其他两种算法。
基于直方图平移和差分直方图,提出了一种基于分块预测的差值直方图平移的可逆水印算法,对于灰度图像而言,实现比较简单,比以八邻域作为预测的标准嵌入水印算法的容量高,但总体上水印的嵌入容量比较少,水印的嵌入和提取简单易懂,且PSNR值都在56 dB以上。通过对最大像素值255的不嵌入来解决像素的溢出问题;本算法在嵌入水印信息时,选择差值直方图0值点进行嵌入,减少了一定的嵌入量。本方法属于完全脆弱水印,不具有抗攻击性。水印的抗攻击性和嵌入容量的提升是下一步研究的主要方向。