掩蔽特性,将水印嵌入到图像的纹理和边缘不易被察觉。相应于图象的小波变换域,图像的纹理、边缘等信息主要表现在HH、HL和LH细节子图中一些有较大值的小波系数上。这样可以通过修改这些细节子图上的某些小波系数来嵌入水印信息。 Deepa Kundur等提出了一种基于小波变换的私有水印和公开水印算法。前者将图像和要嵌入的水印信息分别做小波分解,根据视觉特性进行数据融合,此方法在提取水印时需要载体图像;后者对小波系数做特殊的量化后嵌入信息,此方法提取水印不需要载体图像。
牛夏牧、陆哲明、孙圣和提出一种基于多分辨率分解的数字水印技术。利用多分辨率分解技术,相同分辨率层次的灰度级数字水印嵌入到对应的相同分辨率层次的原始静态图像之中,使水印对载体图像具有自适应性。由于水印的嵌入过程是基于载体图像的不同分辨率层次之间的关系,所以水印的提取过程不需要载体图像。该方法具有很强的鲁棒性。
刘九芬等人研究了水印算法中小波基的选择和正交小波基的性质与鲁棒性的关系,研究结果表明正交小波基的正则性、消失矩阶数、支撑长度以及小波图像能量在低频带的集中程度对水印鲁棒性的影响极小,同时得到一个有意义的结论:Haar小波比较适合于图像水印,这对于在DWT域嵌入水印对小波基的选择有重要意义,因为选择不同的小波基对嵌入水印的性能有很大影响。
离散小波变换不仅可以较好的匹配HVS(Human Visual System)的特性,而且与即将出现的JPEG2000、MPEG4压缩标准兼容,利用小波变换产生的水印具有良好的视觉效果和抵抗多种攻击的能力,因此基于DWT域的数字水印技术是目前主要的研究方向,正逐渐代替DCT成为变换域数字水印算法的主要工具
[12]
。
3.5.2.2 DCT变换域方法
基于分块的DCT是常用的变换之一。Cox等人提出了基于图像全局变换的数字水印算法,他们的重要贡献是明确提出加载在图像的视觉敏感部分的数字水印才能有较强的稳健性。他们的水印方案是先对整个图像I进行DCT,然后将水印加载到DCT域中幅值最大的前k个系数上(除去直流分量),通常为图像的低
16
频分量。若DCT系数的前k个最大分量表示为D??di?,i?1,?,k,水印是服从高斯分布的随机实数序列W??wi?,i?1,?,k,那么水印的嵌入算法为
di?di??wi,其中常数?为尺度因子,用来控制水印添加的强度。然后用新的
系数做反变换得到水印图像IW。水印检测函数则是分别计算原始载体图像I和水
?,再做相关检测,以确定?的离散余弦变换,并提取嵌入的水印W印载体图像Iw水印的存在与否。该算法不仅在视觉上具有数字水印的不可察觉性,而且鲁棒性非常好,可经受有损JPEG压缩、滤波、D/A和A/D转换及量化等信号处理,也可经受一般的几何变换如剪切、缩放、等操作[13]。
3.5.2.3 DFT变换域方法
DFT方法是利用图像的DFT的相位或幅值嵌入信息的方法。
在相位或幅值中嵌入水印有不同的优点。根据通信理论中调相信号的抗干扰能力比调幅信号抗干扰的能力强,同样在图像中利用相位信息嵌入的水印也比用幅值信息嵌入的水印鲁棒性更好。而根据幅值对RST(旋转(rotation)、比例缩放(scale)、平移(translation))操作的不变性,在幅值中嵌入的水印能抵抗图像的RST操作。可根据不同的应用进行选择或结合两种嵌入位置方法。
DFT方法的优点在于可以把信号分解为相位信息和幅值信息,具有更丰富的细节信息。但是DFT方法在水印算法中的抗压缩的能力还比较弱。目前基于DFT的水印算法也相对较少。
实际上,变换域水印算法就是利用相应的变换方法(DCT、DWT、DFT等)将数字图像的空间域数据转化为相应的变换域系数;其次,根据待隐藏的信息类型,对其进行适当编码或变形;再次,确定某种规则或算法,用待隐藏的信息的相应数据去修改前面选定的变换域系数序列;最后,将数字图像的变换域系数经相应的反变换转化为空间域数据。该类算法的隐藏和提取信息操作复杂,隐藏信息量不能很大,但抗攻击能力强,很适合于数字作品版权保护的数字水印技术中。
另外,还有利用分形、混沌、数学形态学、奇异值分解等方法来嵌入水印,以及在压缩域嵌入水印的方法。目前有很多人在寻找新的更合适的变换域,来进行水印的嵌入与检测[14]。
17
18
4 简单的数字水印实现
介绍了那么多数字水印的知识,但是数字水印到底是怎么实现的呢?下面将举一个简单的实例来说明。如图4.1所示,这是一个简单的数字水印的模型图。
图4.1 水印模型
使用LSB编码来实现一个简单的数字水印。LSB编码是一种对于使用JPEG或其他压缩格式的图像不稳定的水印方法。它非常简单,已经被用于各种用途。在LSB编码中,每一部分的最低有效位(或者是最不重要的蓝色像素)被水印信息的字节所替代[15],如图4.2所示。
图 4.2 LSB最低有效位示意图
这种方法有相当大的信息容量,但是可以被嵌入图像中的信息量还是有限的。下面将用一个小程序来演示一下。此程序用C编写,界面虽然不是很好看,但却可以让人很直观的看到数字水印是怎么工作的。程序需要一张24位的BMP图片作为源图像载体,水印内容可以是任何不超过一定大小的文件,这里选用一个TXT文档。由于是一个小的示例程序用户密钥在编程中已经定死,不能随意修改,虽然造成了一定局限性,但却减少了很多工作量,以下是演示图。
19
首先,打开程序,可以看到程序简单的界面,左上角的菜单栏以及很大一块图像显示区域,如图4.3所示。
图4.3 程序主界面一览
然后,点击加密/解密,可以看到有一个打开24位位图的菜单如图4.4所示。
图4.4 载入图像效果图
20