基于DCT系数关系的图像水印算法

1、DCT域的图像水印嵌入与提取

在信号的频域(变换域)中隐藏信息要比在时域中嵌入信息具有更好的鲁棒性。一副图像经过时域到频域的变换后,可将待隐藏信息藏入图像的的显著区域,这种方法比LSB以及其他一些时域水印算法更具抗攻击能力,而且还保持了对人类感官的不可察觉性。常用的变换域方法有离散余弦变换(DCT)、离散小波变换(DWT)和离散傅立叶变换(DFT)等 。介绍一种提取秘密信息的时候不需要原始图像的盲水印法,算法的思想是利用载体中两个特定DCT系数的相对大小来表示隐藏的信息。

2、原理分析

载体图像分为8×8分块,进行二维DCT变换,分别选择其中的两个位置,比如用(u1,v1)和(u2,v2)代表所选定的两个系数的坐标。如果Bi (u 1, v1)<Bi (u 2 , v2) ,代表隐藏1,如果相反,则交换两系数。如果Bi (u 1, v1)>Bi (u 2 , v2) ,代表隐藏0,如果相反,则交换两系数。提取的时候接收者对包含水印的图像文件进行二维DCT变换,比较每一块中约定位置的DCT系数值,根据其相对大小,得到隐藏信息的比特串,从而恢复出秘密信息。

3、注意事项

但是在使用上述算法的过程中,注意到如果有一对系数大小相差非常少,往往难以保证携带图像在保存和传输的过程中以及提取秘密信息的过程中不发生变化。因此在实际的设计过程中,一般都是引入一个Alpha变量对系数的差值进行控制,将两个系数的差别放大,可以保证提取秘密信息的正确性。

4、嵌入水印信息

源代码 dcthiding.m如下:
基于DCT系数关系的图像水印算法

5、信息提取

源代码 dctextract.m 如下:
基于DCT系数关系的图像水印算法

6、结果分析

将一串数字当作秘密信息进行DCT 域的图像水印嵌入与提取,并按照步骤给出实验中间过程的结果和最终的结果。
基于DCT系数关系的图像水印算法
需要用到三个函数str2bit、bit2str、tostr,需要建立三个函数文件,要保证这三个函数文件和上面两个脚本文件在一个文件夹里面。执行dcthiding.m这个脚本文件,会生成一个watermarkedlena.bmp,这个文件就是加密后的文件,执行完的结果如下图:
基于DCT系数关系的图像水印算法
执行程序,生成隐藏文件watermarkedlady.bmp,与原文件比较可以发现其中一些地方发生了变化:
基于DCT系数关系的图像水印算法

上一篇:windows下python+Django+eclipse开发环境的配置


下一篇:【图像隐藏】基于 DCT的图像隐写matlab源码