基于DCT的数字水印算法

基于MATLAB的离散余弦的数字水印系统

一、课题介绍

数字水印技术近年来得到了较大的发展,基于变换域的水印技术是目前研究的热点。数字水印是利用数字作品中普遍存在的冗余数据和随机性,把标识版权的水印信息嵌入到数字作品中,从而可以起到保护数字作品的版权或其完整性的一种技术。

一个有效的数字水印系统至少具备以下三个最基本的特性:1.安全性:数据信息隐藏于数据图像中,不是文件头中,文件格式的变换不应导致水印信息的丢失。2.隐蔽性:在数字图像作品中嵌入数字水印不会引起图像明显的降质,即含水印的图像与原始图像对人的感觉器官的刺激应该是无差别或差别很小,主观感觉变化很小。3.鲁棒性:是指在经历有意或无意的信号处理过程后,水印信息仍能保持完整性或仍能被准确鉴别。另外还有通用性、惟一性等特性。数字水印的基本应用领域是版权保护、隐藏标识、认证和安全不可见通信等。

本文提出了一种基于dct域的Matlab水印算法,实验结果表 明这种算法具有较好的性能,实现的水印具有不可见性,而且具有较好的鲁棒性。


二、数字水印的历史及国内外发展现状

一般认为,数字水印起源于古老的水印技术。这里提到的“水印”技术是指传统水印,即印在传统载体上的水印,如纸币上的水印、邮票股票上的水印等,将它们对着光照我们可以看到其中隐藏的图像。这些传统的“水印”用来证明其内容的合法性。大约700年前,纸水印便在意大利的Fabriano镇出现,这些纸水印是通过在纸模中加细线模板制造出来的。纸在存在细线的区域会略微薄一些,这样也会更透明一些。到了18世纪,在欧洲和美国制造的产品中,纸水印已经变得相当的实用了。水印被用作商标,记录纸张的生产日期,显示原始纸片的尺寸。大约也是这个时期,水印开始用于钱和其它文件的防伪措施。纸水印的存在既不影响美感,也不影响纸张的使用。中国是世界上最早发明造纸术的国家,也是最早使用纸币的国家。宋真宗在位时(公元998-1021年),四川民间发明了“交子”。交子正面都有票人的印记,有密码画押,票面金额在使用时填写,可以兑换,也可以流通。可以说交子上的印文既包含水印技术也包含消隐技术。

事实上,正是由于纸张水印和消隐技术的特性才真正地启发了在数字环境下水印的首次使用。数字水印的产生最早可追溯到1954年,它的产生源于对数字产品的保护。在1954年,Muzak公司的埃米利.希姆布鲁克(Emil Hembrooke)为带有水印的音乐作品申请了一项专利。在这项专利中,通过间歇性地应用中心频率为1kHz的窄带陷波器,认证码就被插入到音乐中。该频率上能量的缺失表征使用了陷波滤波器,而缺失的持续时间通常被编码为点或长划,此认证码使用了莫尔斯电码。此系统被Muzak公司用到了1984年前后。

从那时起,人们开始发展大量的水印技术并由此展开了各种各样的应用,人们对于嵌入信号的兴趣就这样持续了35年,此期间水印被应用于广告认证和设备控制上。例如,在1979年,Szepanski描述了一种机械探测模式,它可以用在文件上起到防伪效果。九年后Holt等人阐述了一种在音频信号中嵌入认证码的方法。但这时的数字水印只是作为一种版权认证的工具,并没有成为一门科学。直到20世纪90年代初期,数字水印才作为一个研究课题受到了足够的重视。1993年A. Z. Tirkel等所撰写的“Electronic water mark”一文中首次使用了“water mark”这一术语。这一命名标志着数字水印技术作为一门正式研究学科的诞生。后来二词合二为一就成为“watermark”,而现在一般都使用“digital watermarking”一词来表示“数字水印”。现在我们所说的“水印”一般指的都是数字水印。

三、数字水印的定义和基本特点

目前虽有许多文献讨论有关数字水印技术的问题,但数字水印始终没有一个明确统一的定义。Cox等把水印定义为“不可感知地在作品中嵌入信息的操作行为”;杨义先等认为“数字水印是永久镶嵌在其它数据(宿主数据)中具有鉴别性的数字信号或模式,而且并不影响宿主数据的可用性”。我个人认为后一种说法更为确切一些,因为可见水印是可以感知到的,但它的存在并不影响宿主数据的可用性,嵌入的水印同样可以起到鉴别的目的。

不同的应用对数字水印的要求不尽相同,一般认为数字水印应具有如下特点:

(1) 不可见性。在宿主数字媒体中嵌入一定数量的附加信息后,不能引起明显的将质现象,隐藏的数据不易觉察,即无法人为的看见或听见。

(2) 稳健性。数字水印必须对施加于宿主媒体的变化或操作具有一定的免疫力,不能因为某种变换操作导致水印信息的丢失,即水印被迫坏,从而失去商用价值。常用的变换操作有:信道噪声、滤波、有损压缩、重采样等。

(3) 安全性。数字水印应该能够抵抗各种蓄意的攻击,同时应很难被他人复制和伪造。

(4) 有效性。水印提取算法应高效,提取出的水印应能唯一标识版权所有者。

(5)抗窜改性。 与抗毁坏的鲁棒性不同,抗窜改性是指水印一旦嵌入到载体中,攻击者就很难改变或伪造。鲁棒性要求高的应用,通常也需要很强的抗窜改性,在版权保护中,要达到好的抗窜改性是比较困难的。

四、数字水印的一般模型

数字水印的一般模型如图1-3-1所示:





图1-3-1 数字水印嵌入过程

频域法加入数字水印的原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有DWT、DCT、DFT、WP和分形。然后,对加入了水印信息的信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息的信号。



图1-3-2 数字水印检测/抽取过程

如上图1.3.2所示,频域法检测水印的原理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算,得出水印信息。如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印的检测有两个结束点。

五、各种数字水印算法

近几年来数字水印技术研究取得了很大的进步,见诸于文献的水印算法很多,这里对一些典型的算法进行了分析。

1. 空间域算法

数字水印直接加载在原始数据上,还可以细分为如下几种方法:

(1) 最低有效位方法(LSB)

这是一种典型的空间域数据隐藏算法,L.F.Tumer与R.G.VanSchyadel等先后利用此方法将特定的标记隐藏于数字音频和数字图像内。该方法是利用原始数据的最低几位来隐藏信息(具体取多少位,以人的听觉或视觉系统无法察觉为原则)。LSB方法的优点是有较大的信息隐藏量,但采用此方法实现的数字水印是很脆弱的,无法经受一些无损和有损的信息处理,而且如果确切地知道水印隐藏在几位LSB中,数字水印很容易被擦除或绕过。

(2) Patchwork方法及纹理块映射编码方法

这两种方法都是Bender等提出的。Patchwork是一种基于统计的数字水印,其嵌入方法是任意选择N对图像点,在增加一点亮度的同时,降低另一点的亮度值。该算法的隐藏性较好,并且对有损的JPEG和滤波!压缩和扭转等操作具有抵抗能力,但仅适用于具有大量任意纹理区域的图像,而且不能完全自动完成。

2.变换域算法

基于变换域的技术可以嵌入大量比特数据而不会导致可察觉的缺陷,往往采用类似扩频图像的技术来隐藏数字水印信息。这类技术一般基于常用的图像变换,基于局部或是全部的变换,这些变换包括离散余弦变换(DCT)、小波变换(WT)、傅氏变换(FT或FFT)以及哈达马变换(Hadamardtransform)等等。其中基于分块的DCT是最常用的变换之一,现在所采用的静止图像压缩标准JPEG也是基于分块DCT的。最早的基于分块DCT的一种数字水印技术方案是由一个密钥随机地选择图像的一些分块,在频域的中频上稍稍改变一个三元组以隐藏二进制序列信息。选择在中频分量编码是因为在高频编码易于被各种信号处理方法所破坏,而在低频编码则由于人的视觉对低频分量很敏感,对低频分量的改变易于被察觉。该数字水印算法对有损压缩和低通滤波是稳健的。另一种DCT数字水印算法是首先把图像分成8×8的不重叠像素块,在经过分块DCT变换后,即得到由DCT系数组成的频率块,然后随机选取一些频率块,将水印信号嵌入到由密钥控制选择的一些DCT系数中。该算法是通过对选定的DCT系数进行微小变换以满足特定的关系,以此来表示一个比特的信息。在水印信息提取时,则选取相同的DCT系数,并根据系数之间的关系抽取比特信息。除了上述有代表性的变换域算法外,还有一些变换域数字水印方法,它们当中有相当一部分都是上述算法的改进及发展,这其中有代表性的算法是I.Podichuk和ZengWenjun提出的算法。他们的方法是基于静止图像的DCT变换或小波变换,研究视觉模型模块返回数字水印应加载在何处及每处可承受的JND(JustNoticeableDifference,恰好可察觉差别)的量值(加载数字水印的强度上限),这种水印算法是自适应的。

3.NEC算法

该算法由NEC实验室的Cox[等人提出,该算法在数字水印算法中占有重要地位,其实现方法是:首先以密钥为种子来产生伪随机序列,该序列具有高斯N(0,1)分布,密钥一般由作者的标识码和图像的哈希值组成,其次对图像做DCT变换,最后用伪随机高斯序列来调制(叠加)该图像除直流分量外的1000个最大的DCT系数。该算法具有较强的鲁棒性、安全性、透明性等。由于采用特殊的密钥,故可防止IBM攻击,而且该算法还提出了增强水印鲁棒性和抗攻击算法的重要原则,即水印信号应该嵌入源数据中对人感觉最重要的部分,这种水印信号由独立同分布随机实数序列构成,且该实数序列应具有高斯分布N(0,1)的特征。随后Podilchuk等利用人类视觉模型又对该算法进行了改进,从而提高了该算法的鲁棒性!透明性等。

4.其他一些水印算法

近年来利用混沌映射模型实现数字水印、保密通信等成为混沌应用研究的热点。特别是自从Cox等借用通信技术中的扩频原理将水印信号嵌入到一些DCT变换系数或者多层分解的小波变换系数以来,人们已经提出了一些混沌数字水印方法。水印的嵌入与检测是基于人类视觉系统(HVS)的亮度掩蔽特性和纹理掩蔽特性,折衷水印的不可见性和鲁棒性之间的矛盾.结果表明:该方法嵌入的水印具有不可见性和鲁棒性,并且这种基于密钥的混沌水印方法更好的抗破译性能。

目前比较流行的还有一种基于盲水印检测的DWT算法,该算法首先对原始图像进行小波变换,根据人类具有的视觉掩蔽特性对低频分量进行一定的量化,同时可不影响视觉效果,并对作为水印的图像进行压缩和二值化处理,形成一维的二值序列,根据二值序列的值对上述量化后的原始信号的低频分量进行视觉阈值范围内允许的修改,从而实现水印的嵌入。水印提取过程是对含有水印的图像进行小波变换,对低频分量同样进行量化处理,为了增大算法的安全性,可以对水印形成的二值0,1序列在嵌入前进一步进行伪随机序列调制,相应的在水印提取过程需要增加用伪随机序列解调的步骤。这样不知道伪随机序列的攻击者即使推测出水印的嵌入规律,也无法提取水印,大大增加了水印系统的透明性和鲁棒性。


六、MATLAB参考程序

1  size=512; N=32;K=8; D=zeros(size);E=0.01;
2  I=imread('f:\lena.bmp');
3  subplot(2,2,1);
4  imshow(I);
5  title('原始图像');
6  I=double(I)/512;
%读入水银
7  J=imread('f:\1234.bmp');
8  subplot(2,2,2);
9  imshow(J);
10 title('水印图像');
11 %对水印缩放
12 J=double(imresize(J,[64,64]));
13 subplot(2,2,3);
41 imshow(J);
15 title('缩放水印图像');
16 %嵌入水印
17 for p=1:size/K
18     for q=1:size/K
19         x=(p-1)*K+1; y=(q-1)*K+1;
20         I_dct=I(x:x+K-1,y:y+K-1);
 21       I_dct1=dct2(I_dct);
 22       if J(p,q)==0
 23           alfa=-1;
 24       else
 25          alfa=1;
 26       end
 27      I_dct2=I_dct1+alfa*E;
 28       I_dct=idct2(I_dct2);
 29       D(x:x+K-1,y:y+K-1)=I_dct;
 30   end
31 end
 32 subplot(1,3,3);
 33 imshow(D,[]);
 34 Title('含水印的图象');
 35 %%%%%%对加入水印的图像进行各种攻击
 36 %%%低通滤波攻击
 37 %hh=fspecial('gaussian',3,0.2);
 38 %hh=fspecial('gaussian',3,0.35);
 39 %hh=fspecial('gaussian',3,0.4);
 40 QQ=filter2(hh,D);
 41%%%旋转攻击
 42 R=imrotate(D,10,'bilinear','crop');
 43 %R=imrotate(D,20,'bilinear','crop');
 44 %R=imrotate(D,45,'bilinear','crop');
 45 %%%%%剪切攻击
  46 %D(1:32,1:32)=0;   Q2=D;
  47 %D(1:64,1:64)=0;   Q2=D;
  48 %D(1:128,1:128)=0;  Q2=D;
  49 % 提取水印
  50 for  p=1:size/K
  51 for  q=1:size/K
  52       x=(p-1)*K+1;
  53       y=(q-1)*K+1;
  54       I1=I(x:x+K-1,y:y+K-1);
  55       I2=QQ(x:x+K-1,y:y+K-1);
  56       I_dct1=dct2(I1);
  57       I_dct2=dct2(I2);
  58       if  I_dct2>I_dct1
  59         W(p,q)=1;
  60       else
  61          W(p,q)=0;
  62       end     
  63  end
  64 end
  65 figure,subplot(1,2,1);imshow(R,[]);title('低通滤波攻击');
  66 subplot(1,2,2);imshow(W,[]);title('图像中提取的水印');
  67  %%%%%%前后水印相似比较
  68 J=double(J);W=double(W);
  69 sumJ=0;sumW=0;
  70 for  j=1:N
   71 for  i=1:N
   72     sumJ=sumJ+J(j,i)*W(j,i);
   73     sumW=sumW+W(j,i)*W(j,i);
   74  end
   75 end
   76 CH=(sumW-sumJ)/sumJ

七、运行结果比较

1.1---34行程序运行结果如下:



基于DCT的数字水印算法_第1张图片


2.不同程度的低通滤波攻击图像及提出的水印信息:

(1)hh=fspecial('gaussian',3,0.2)攻击与提取



基于DCT的数字水印算法_第2张图片




(2)hh=fspecial('gaussian',3,0.35) 攻击与提取



基于DCT的数字水印算法_第3张图片



(3)hh=fspecial('gaussian',3,0.4)攻击与提取


基于DCT的数字水印算法_第4张图片




3.不同程度的旋转攻击图像及提出的水印信息:


(1)R1=imrotate(D,10,'bilinear','crop')的攻击与提取:



基于DCT的数字水印算法_第5张图片





(2) R2=imrotate(D,20,'bilinear','crop') 的攻击与提取:




基于DCT的数字水印算法_第6张图片



(3) R3=imrotate(D,45,'bilinear','crop') 的攻击与提取:



基于DCT的数字水印算法_第7张图片



4. 不同程度的剪切攻击图像及提出的水印信息:

(1)D(1:32,1:32)=0


基于DCT的数字水印算法_第8张图片


(2)D(1:64,1:64)=0


基于DCT的数字水印算法_第9张图片


(3)D(1:128,1:128)=0


基于DCT的数字水印算法_第10张图片


5. 不同嵌入深度的图像的比较:

E=0.01 E=0.1 E=1


基于DCT的数字水印算法_第11张图片

基于DCT的数字水印算法_第12张图片

基于DCT的数字水印算法_第13张图片


八、提取水印与原始水印的相似程度比较

各种攻击 相似程度
旋转攻击 旋转10度 0.9955
低通滤波攻击hh=fspecial('gaussian',3,0.2) 0.9955
剪切攻击 D(1:32,1:32)=0 0.9955

你可能感兴趣的:(算法,机器学习,人工智能,计算机视觉,深度学习)