水印嵌入算法的具体实现:对于每一个8x8块,选择(4,1)和(3,2)一对系数,比较它们大小,确保满足式(3),若不满足,交换两个系数的值。ωi为第i块嵌入信息位的值。
为了提高鲁棒性,对算法做进一步改进。引入控制量α扩大两个DCT系数差值。引入α虽然会使图像退化。但能够降低检测的误差。
当ωi=1,系数(4,1)大于系数(3,2),且两者差值小于α时,按式(4)调整:
当ωi=0,系数(3,2)大于系数(4,1)且两者差值小于α时,按照式(5)调整:
(6)对于嵌入水印信息后的第i块系数,进行IDCT变换。
(7)按步骤(5)、(6)对其他块进行水印的嵌入。
(8)进行IDWT变换,得到嵌入水印后的图像。
3 水印的提取算法
本算法是盲水印算法,提取时无需水印图像的原宿主图像。提取水印是嵌人的逆过程,图4为水印的提取过程。
其步骤可描述如下:
(1)对嵌入水印的图像进行DWT变换。
(2)选取HL子带,并将其分为8x8的块,进行DCT变换。
(3)按式(6)提取水印。
(4)按提取出的水印位重建水印图像,得到加密的水印。
(5)水印图像使用混沌密钥进行混沌解密,得到解密的水印。
(6)计算恢复出的水印信号和原水印信号的相似程度。
4 试验结果
试验采用大小为512×512的宿主图像。经DWT一级变换后HL子带的大小为256×256。将选择的HL子带分成8×8的块,得到1 024个块。使用这些块能嵌入1 024位水印位到宿主图像。则以32×32的二值图像作为水印嵌入到宿主图像。
4.1 在无攻击的情况下
图5是实验中应用的宿主图像和水印图像。图6a和图6b分别描述该算法嵌入水印后的图像和提取出的水印。为了检验该算法的性能,将该算法和直接应用DCT相印嵌入的结果进行比较。图7为直接应用DCT进行水印嵌入后图像和提取的水印,可看出,水印能够被正确从水印图像中提取,但直接应用DCT算法嵌入水印后的图像不可见性较低。