一、引言
随着Internet的普及,信息的安全保护问题日益突出。如何有效地防止数据的非法复制和鉴别数字媒体的知识产权,成为亟需解决的问题。1993年Caronni提出了数字水印的概念,并应用于数字图像,此后,研究人员将数字水印的概念扩展到电视图像和声音等领域,数字水印技术作为版权保护的重要手段而得到了广泛的研究和应用。
数字水印技术涉及到大量图像处理算法、数学计算工具等,用普通编程工具实现上述算法将要花费大量的时间。MATLAB语言是MathWorks公司推出的一种简单、高效、功能极强的高级语言,具有高性能数值计算能力和可视化计算环境。许多复杂的计算问题只需短短的几行代码就可在MATLAB中实现。本文基于典型的DCT(离散余弦变换)数字水印算法过程,详细介绍用MATLAB实现数字水印的嵌入、提取和攻击测试的方法。
二、数字水印技术
从信号处理的角度看,在载体图像中嵌入数字水印可以视为在强背景(即原始图像)下叠加一个视觉上看不到的弱信号(水印),由于人的视觉系统(Human Visual System,HVS)分辨率受到一定的限制,只要叠加信号的幅度低于HVS的对比度门限,HVS就无法感觉到信号的存在,因此,通过对载体对象作一定的调整,就有可能在不引起人感知的情况下嵌入一些信息。
1.数字水印的嵌入
水印嵌入就是把水印信号W={ω(κ)} 嵌入到原始图像X0={χ0(κ)}中。水印嵌入过程如图1所示。

水印嵌入准则分为:
加法准则:χW(κ) =χ0(κ)+αω(κ)
乘法准则:χW(κ) =χ0(κ)(1+αω(κ))
α为强度因子,为了保证在水印不可见的前提下,尽可能提高嵌入水印的强度。α的选择必须考虑图像的性质和视觉系统的特性。
2.水印的提取与检测
在某些水印系统中,水印可以被精确地提取出来,这一过程被称作水印提取。例如在完整性确认的应用中,必须能够精确地提取出嵌入的水印,并且通过水印的完整性来确认多媒体数据的完整性。如果提取出的水印发生了部分的变化,最好还能够通过变化的水印的位置来确定原始数据被篡改的位置。水印在提取检测时可以需要原始图像的参与,也可以不需要原始图像的参与。但将水印技术用于图像的网络发布和传播时,如果检测时需要使用原始图像则是个缺陷,因此,当前大多数的水印检测算法不需要原始图像的参与。图2、图3分别是水印提取和检测的框图,虚线部分表示在提取或判断水印信号时原始图像不是必需的。