直方图移位安全可逆图像水印算法的研究*
2020-09-17赵文鹏李子臣游福成李祯祯
赵文鹏,李子臣,游福成,李祯祯
(北京印刷学院 信息工程学院,北京 102600)
0 引言
随着网络和多媒体的快速发展及普及,数字内容规模呈指数级增长,使得数字内容的安全性越发重要[1]。数字水印技术(Digital Watermarking)应运而生。数字水印技术是信息隐藏的一个重要分支。
传统的水印是以显性嵌入在作品中的形式存在的,会极大地影响原作品的展示、传播、学习和欣赏。显性水印指的是嵌入水印之后,人类肉眼可以看见嵌入的水印信息。
现在越来越多的水印是隐性水印,隐性的水印嵌入技术是指载体图像嵌入水印之后,人类肉眼无法看见嵌入的水印信息。版权方面[2],现在的数字水印技术是将水印信息,如用户信息、版权信息等嵌入到数字载体中,由此来确定版权拥有者、跟踪侵权行为、所有权认证、认证数字内容来源的真实性等。一旦攻击者获知了水印算法,利用提取水印算法很容易获取水印信息,出现信息泄露或伪造水印的现象,因此,使用水印加密技术,即使水印被攻击也只能得到无用的数据。在其他领域,如军事方面,数字水印用于秘密通信,让军事机密消息的传递不暴露在传统的信息通道中,同时也需要保护水印信息。
在已有研究中,文献[3]提出了基于直方图移位的方法,具有良好的PSNR值,但嵌入容量和水印图像的鲁棒性需要进一步提高。文献[4]中提出了对直方图进行修改并对提取方式进行了改进,增强水印的鲁棒性,但算法并没有提高水印嵌入容量。文献[5]中提出了一种基于直方图修改的图像水印算法,能抵抗一般的传统攻击,增强了算法的鲁棒性,但算法并没有提高水印嵌入容量。文献[6]提出了基于二维直方图平移的方法,解决图像在嵌入容量较大的情况下,水印隐蔽性和认证图像质量不高的问题,利用篡改检测方法定位出图像被篡改的区域,图像完整性的认证进一步增强,但是没有考虑像素溢出和水印信息安全的问题。
在上述研究的基础上,针对如何保护水印信息的机密性,解决嵌入水印信息时像素溢出的问题,实现无损地恢复原始图像,本文提出了直方图移位安全可逆图像水印算法。首先,对载体图像进行图像预处理,防止出现像素上溢和下溢的问题。把图像划分为棋盘结构,计算每个半平面像素的四邻域、八邻域的预测差值,构建二维直方图,使用ZUC算法对水印信息进行加密,保证水印信息的机密性。利用直方图移位安全可逆图像水印算法,嵌入和提取加密水印,并恢复原始载体图像。实验结果表明,被加密的水印信息抗攻击能力强,图像预处理解决了像素溢出的问题,并且水印图像具有很好的峰值信噪比,该算法能够无损地恢复原始图像,实现算法的可逆。
本文算法流程图如图1所示。
图1 算法流程图
1 直方图移位安全可逆图像水印算法
1.1 图像预处理
假设原始图像的每个像素xi,j的取值范围为[0,255]。 x(i,j)表 示 位 于(i,j)的 载 体 图 像 像 素 值 。
在每个半平面的嵌入过程中,像素值可能增加1或减少1。为了防止溢出的问题(即像素值变为256或-1),采用预处理的方法,在对每个半平面嵌入水印之前,预先将等于255或0的像素值分别改为254和1,而具有其他值的像素保持不变。换句话说,254或255的像素具有相同的结果值254,而像素值0或1的像素具有相同的结果1。对进行修改的像素使用标志位来标识像素。提取水印的过程中,在执行每个半平面的提取之后,根据标志位将值为1或254的像素改变为其原始值。
1.2 计算四邻域、八邻域预测差值
把灰度图像分为两个半平面:黑色半平面和白色半平面,类似于棋盘,如图2所示。
第一种预测差值方法:对于载体图像的每个像素用该点的像素值与其周围的上、下、左、右4个相邻像素的均值向下取整后做差,得到该像素点的第一个预测差值。如式(1)所示:
图2 黑白棋盘结构
当像素点位于顶点或者边界存在特殊情况时,周围不存在4个像素点,则按实际相邻像素点数进行计算。
如图3所示,像素位于顶点,则第一个预测差值计算公式为:
如图4所示,像素位于边界,则第一个预测差值计算公式为:
图3 像素位于顶点的情况
图4 像素位于边界的情况
第二种预测差值方法:对于原始图像的每个像素用该点的像素值与其周围的8个相邻像素的均值向下取整后做差,得到该像素点的第二个预测差值。当像素点位于顶点或者边界存在特殊情况,周围不存在8个像素点时,采用有几个点算几个点的方法,与第一种预测差值的方法类似。
1.3 水印加密
传统的保护水印方法,仅仅是对水印信息采用一些简单的置乱处理,没有对水印信息进行有效的保护。序列密码具有加解密处理速度快、实现简单、便于硬件实施等特点,因此本文采用序列密码中的ZUC密码算法进行加密。本文的水印信息为图片的形式。
ZUC算法称为祖冲之算法[7-8],属于序列密码。ZUC算法是3GPP机密性算法EEA3和完整性算法EIA3的核心,加密是将ZUC产生的密码流和输入的明文按位异或;解密过程是将密文与加密过程相同的密码流按位异或,实现解密。
对于一个未经压缩的灰度图像,一个图像像素xi,j的 取 值 范 围 为 [0,255],(i,j)表 示 像 素 在 块 中 的位置,xi,j可用 8 bit来表示,设各像素的比特位为bi,j,1,bi,j,2, … ,bi,j,k, 则 :
其中⎿·」表示向下取整。内容所有者利用ZUC算法产生一个伪随机比特流 ri,j,k,与图像像素各比特位bi,j,k逐位进行异或运算。
所得到的 Bi,j,k即图像像素 xi,j加密的结果 。
水印信息为灰度图像,图像采用ZUC进行加密,实验结果如图5、图 6所示。
图5 水印信息
图6 加密后的水印信息
1.4 水印嵌入与提取过程
与其他数据隐藏方案一样,该算法支持多层嵌入。对于每一层,嵌入过程包括两轮:第一轮,通过执行步骤(1)~(5)将消息嵌入到黑半平面;第二轮,通过再次执行步骤(1)~(5),将消息嵌入到白色半平面。具体步骤如下:
(1)将原始载体图像分为两个半平面,类似黑白棋盘格结构。首先对黑色半平面中的每个像素计算它的四邻域差值和八邻域差值,分别用d1,d2表示。
(2)利用差值对(d1,d2)出现的频次构建黑色半平面中的二维直方图 H(d1,d2)。
(3)由 c=d1-d2将二维直方图 H(d1,d2)划分为多个不同的一维直方图 Hc=(d1,d2),并选择可嵌入信道(Embeddable Channel,EC)。
c的绝对值越小代表信道的位置越接近直线d1=d2,而c的绝对值越大代表信道的位置距离直线d1=d2就越远。信道所在的位置越接近直线d1=d2,就有越好的嵌入效果。参数cb用来选择EC,例如cb=2,那么信道-2、-1、0、1、2 均为可嵌入信道。
(4)对于每个 EC,找出相应直方图的“左峰”和“右峰”。通道c的左峰和右峰是通道中具有最大直方图值的两个位置(pl,pl-c)和(pr,pr-c),pl<pr。 如果通道中的某些位置具有相同的直方图值,则选择最左边的位置作为左峰,最右边的位置作为右峰。
对EC进行平移,将d2=d1-c且d1>pr的直方图Hc=(d1,d2)右 上 移 动 1 个 单 位 。 将 d2=d1-c 且 d1<pl的直方图Hc=(d1,d2)左下移动 1个单位。具体平移过程如下所示:
(5)在峰值点嵌入加密水印消息,水印信息为二进制序列,b表示一位水印信息,它的值为0或1,为了避免引起混淆,含水印图像的像素用 y(i,j)表示。具体嵌入过程如下:
(6)最终得到嵌入加密水印的黑色半平面,再次重复步骤(1)~(5)对白色半平面嵌入水印,最终得到含加密水印的图像。
嵌入过程中的参数CB、标志位、峰值信息和加密水印的密钥,可以通过隐蔽通道进行传输,在提取阶段使用。
提取过程是水印嵌入的逆过程。具体步骤如下所述:
步骤(1)~(3)与嵌入过程的步骤(1)~(3)相同。
(4)扫描黑色半平面。如果扫描的像素值y(i,j)属 于 EC,(pl,pl-c)和(pr,pr-c)是 左 峰 和 右 峰 , 则 执行以下处理,处理有五种情况:
(5)最终得到提取加密水印之后的黑色半平面,再对白色半平面重复同样的步骤,最终得到恢复的图像。
1.5 加密水印的解密
提取的加密水印通过ZUC密码算法,利用密钥实现对水印图像解密,计算收到的信息和 ri,j,k的异或得到解密图像,如式(14)所示:
实验结果如图 7、图8所示。
图7 提取后的加密水印
图8 解密后的水印
2 实验结果分析
本方案在 MATLABR2014a,Windows10操作系统下验证性能,选取了PEPPER、COUPLE、LENA这三幅大小为256×256的经典灰度图像进行实验,水印信息选用64×64的数字图像,如图5所示。从不可见性、可逆性和水印信息的加密几方面验证算法的性能。
2.1 图像质量分析
峰值信噪比(Peak Signal-to-Noise Ration,PSNR)衡量图像的质量,PSNR值越大,即图像质量越好,视觉效果越好。表1说明针对256×256大小的灰度图像,在嵌入信道为 cb=3、cb=5时,本文算法的 PSNR值。计算PSNR的公式如下:
式中,MSE代表原宿主图像和含水印图像之间的均方差。
表 1 256×256大小的图像嵌入加密水印的PSNR值(dB)
通常PSNR的普遍基准在30 dB,30 dB以下的图像劣化较为明显,在50 dB以上则表明效果良好,而表1中本文算法的PSNR值均达到50 dB以上,说明可视效果好。
实验分别对三幅原始图像嵌入水印,得到含水印图像,通过图9对比可以看出,水印嵌入之后,水印的不可见性和水印图像的质量都很好。
通过原始图像与提取水印信息后恢复的图像之间的归一化系数NC来说明算法的可逆性:
图9 原始图像和含加密水印的图像
式中,w1、w2分别表示原始图像和提取水印恢复后的图像,l1、l2表示原始图像的宽度和高度。
从表 2看出,本次以三幅大小为 256×256的灰度图像作为原始图像的实验,得到的NC值为1,这说明恢复的图像并无损失,提取加密水印信息过程和图像恢复阶段是完全无失真的,从而说明水印算法的可逆性。
2.2 水印信息的加密
传统水印信息的加密方法,仅仅是对水印信息采用一些简单的置乱处理,没有对水印信息进行有效的保护。而ZUC算法具有实现简单、便于硬件实施、加解密处理速度快等特点。利用ZUC密码算法对水印信息进行加密,水印信息能够抵抗目前各种常见的攻击。
3 结论
在版权方面和多媒体信息安全方面,水印信息具有很重要的意义,需要对水印信息进行保护。本文的方案,采用国密ZUC对水印进行加密,加密的水印能够有效地抵抗各种常见的攻击,水印信息能得到有效的保护。对原始图像进行预处理的方法,解决了像素溢出的问题,提取水印信息后图像能够百分之百地恢复,从而实现算法的可逆性。本文算法保证了含水印图像具有良好的PSNR值。