基于小波变换的一种盲检测数字水印算法

更新时间:2024-01-05 16:30:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

用MATLAB实现一种新的基于 小波变换的盲检测数字水印算法

摘 要:目的:用MATLAB实现一种新的基于小波变换的盲检测数字水印算法。方法:结果:将一副水印图像嵌入了载体图像。结论: 关键字:数字水印 小波变换 DWT 信息隐藏 Abstract: 1、引言

随着Internet和多媒体技术的迅猛发展和广泛应用,传统的加密算法对数字作品的保护有一定的局限性,一种新的信息安全技术应运而生——数字水印技术,1994年Van Schyndet在论文“A Digital Watermark”[1]中正式提出数字水印的概念,并且受到学术界和工业界极大的关注,1996年第一届国际信息隐藏研讨会在英国剑桥召开,在几年时间之内就有很多算法被提出来,如DWT、DCT、DFT、LSB、Patchwork等算法[2],并有大量论文发表。

数字水印是利用数字作品中普遍存在的冗余数据把数字、序列号、文字、图像标志等版权信息嵌入到数字作品中,从而起到版权保护、秘密通信、数据文件的真伪鉴别和产品标志等作用的一种技术。简单地说,数字水印技术就是在数字作品中嵌入一段信息,嵌入的信息就是数字水印。数字水印人们无法从表面感知,只有用专用仪器或计算机软件才可以检测出来,数字作品可以是图像、图形、视频、音频、文本、数字地图、数据库、电子文档等,还可以是印刷品。 数字水印的作用可以分为以下几类[3]:

(1)版权保护:在数字作品中嵌入数字产品的版权信息,如果出现所有权纠纷,可以从产品中提取出水印,该水印中包含的版权信息可以作为证据,在法庭上证明谁拥有产品所有权,以达到保护数字作品版权的作用。

(2)盗版跟踪:数字产品在这种应用中嵌入的是产品购买者的有关信息,如身份标识、购买日期等。用户可以从这些盗版中提取出有关购买者的身份信息,从而追查到盗版的来源。

(3)拷贝保护:水印与数字设备的结合使用可以实现拷贝保护的功能,数字设备读取数字作品中的数字水印,如果该作品已经超过拷贝次数或者是盗版,就禁止拷贝。 (4)发行监控:数字产品的网络发行或者电视播放,结合 UV 对产品的 WS 识别以及电视机对播放节目的识别与监控,可以实现对数字产品的发行统计,播放监控。 (5)数据完整性保护:脆弱性数字水印能够完成对数字作品的完整性认证,可以判断作品是否被篡改。在照相机、摄像机中具有添加水印的功能模块,能够嵌入脆弱的水印,如果有人试图对图像、视频进行编辑处理,就会破坏掉这些水印,从而判断作品是否被篡改。

(6)隐秘信道:水印技术可以实现隐秘通信。 数字水印技术有多种分类。

按照作用可将数字水印划分为鲁棒水印和脆弱水印。前者主要应用于数字作品中版权保护,需要嵌入的水印能够抵抗常见的编辑处理和有损压缩;后者主要用于完整性保护,判断信号是否被篡改。

按照水印的载体,数字水印可分为图像水印、视频水印、音频水印、文本水印和印刷水印等。

如果按照检测方法,数字水印可分为明水印和盲水印。在检测过程中需要原数据的技术称为明水印,其鲁棒性较强;在检测过程中不需要原数据的技术称为盲水印。

数字水印按内容可分为内容水印和标志水印。内容水印是指水印经过攻击受损后人们仍能通过感觉判断内容;标志水印是指通过检测判断来确定信号中是否有水印标志。

当按用途来分类时,数字水印可分为版权保护水印、篡改提示水印、票据防伪水印、隐蔽标识水印、印刷数字水印等。

根据数字水印嵌入的方式可以把数字水印技术分为以下两类:

(1)基于时空域算法的水印:直接将水印信息嵌入数字作品的时间域或空间域中。 (2)基于变换域算法的水印:先将数字作品做某种数学变换(如离散傅里叶变换(DFT)、离散余弦变换(DCT)、离散小波变换(DWT)),然后通过改变变换域的系数来嵌入水印。

数字水印具有以下主要特性:

透明性:透明性即不可感知性,数字作品加入水印后并不改变其感知效果,水印在通常的感知条件下不被感觉,这是数字水印最基本的特点,即数字作品在嵌入水印后,数字作品发生的变动和失真应低于可感知的门限。

鲁棒性:指数字作品中的水印信息能够抵抗应用过程中的各种破坏,如噪声、滤波和有损压缩等。

安全性:数字水印系统使用一个或多个密钥来确保安全,防止修改和擦除水印。信息被隐藏在多媒体内容中,并不因文件格式转换而丢失,且未经授权者不能检测出水印。

自相似性:数字水印在原图像经过较大的破坏后,仍能从原数据中恢复出隐藏的水印,而且在恢复过程中不需要原图像,这需要水印算法本身具有自相似性。也可以认为是水印信息分布在载体数据的很多样本中,利用其中的小部分数据就可以恢复出水印。

本篇论文的算法是用MATLAB实现的,所以先介绍一下MATLAB。 2、MATLAB简介

MATLAB是英文Matrix Laboratory (矩阵实验室)的缩写。MATLAB是一种影响大、流行广泛的科学计算语言,在1984年由美国MathWorks公司推向市场以来,得到了广泛的应用和发展。MATLAB主要用于数值计算、图像处理、工程设计及系统仿真等,它功能强大,支持矩阵运算,许多复杂的问题只用几行代码就实现了。MATLAT中带有针对不同应用学科的工具箱,如矩阵代数、微积分、应用数学、信号处理、自动控制、数字图像处理、神经网络、模糊逻辑、小波分析等。特别是其中的图像处理工具箱、数字信号处理工具箱、小波分析工具箱,为研究数字水印技术提供了很大的方便。MATLAB含有丰富的库函数,其中有实现数字水印算法中常用到的FFT、DCT、DWT、DCT2、DWT2等函数,大大加快了算法的实现。

3、数字水运算法常用的和本文算法中用到的MATLAB函数 3、1图像读取和显示函数

imread:用于将jpg、bmp、tif、pcx等格式的图像读入工作空间; imwrite:用于将jpg、bmp、tif、pcx等格式的图像写入磁盘; image:提供最原始的图像显示函数; imshow:显示各种图像的函数。 3、2图像变换函数

fft2:2维fourier变换 ifft2:2维fourier反变换 dct2:2维离散余弦变换

idct2:2维离散余弦反变换 dwt2:2维离散小波变换 idwt2:2维离散小波反变换 wavedec2:2维多层小波分解 waverec2:2维多层小波重构图像 3、3图像攻击函数

imnoise:可对图像加入各种噪声,如椒盐噪声,高斯噪声等; filter2:可对二维图像进行2维线性滤波; imcrop:可对二维图像进行精确剪裁; rotate:可对二维图像进行任意旋转;

imresize:可用插值法对图像进行放大和缩小,其中还有平滑滤波. 4、一种新的基于小波变换域的数字水印算法 4、1小波变换水印介绍

DWT数字水印方法是利用小波变换将图像进行多分辨率分解,选择适当的小波系数嵌入水印,在本算法中使用haar基进行对图像进行了小波变换。载体图像经小波变换后分解成4个原图像四分之一大小的子图,即水平方向、垂直方向和对角线方向的中高频细节子图及低频逼近子图,每个子图通过间隔抽样滤波得到。对低频逼近子图可以再使用小波变换,将其再分解成4个原载体图像八分之一的子图,依次类推,可以进行更多级的分解。然后选择合适的变换域系数嵌入水印。 例如,用MATLAB对图像lena做一层小波变换,如下: [A1,H1,V1,D1] = dwt2(f,'haar'); 其中f保存256×256分辨率的256级lena灰度图像,A1、H1、V1、D1都是f四分之一大小的矩阵,分别是lena图像的低频逼近子图、水平方向细节子图、垂直方向细节子图、对角线方向的高频细节子图。图1是原始图像,图2是用MATLAB对该图像进行一级小波分解后的示意图。

图1 原始图像

图2

(a)低频逼近子图 (b)水平方向细节子图 (c)垂直方向细节子图

(d)对角线方向的高频细节子图 4、2嵌入算法 首先将256×256分辨率的256级载体灰度图像进行一层小波变换,如下: [A1,H1,V1,D1] = dwt2(f,'haar') 得到A1,H1,V1,D1这样四个128×128大小的矩阵。其中f是256×256大小的矩阵,保存着分辨率为256×256、灰度级别为256的载体灰度图像,A1、H1、V1、D1分别是lena图像的低频逼近子图、水平方向细节子图、垂直方向细节子图、对角线方向的高频细节子图。

接着,读入水印图像,将水印图像转换为二值图像,要求水印图像的大小为载体图像的八分之一。将水印图像的信息存入一个二维数组中。

最后,嵌入水印。如果将水印嵌入低频系数A1中,水印的鲁棒性好,但水印的隐蔽性差;如果将水印嵌入高频系数D1中,水印的隐蔽性好,但水印的鲁棒性差。同时考虑到水印的鲁棒性和隐蔽性,将这两种方案折中一下,本算法将水印嵌入到小波变换的水平方向细节的中频系数H1中。H1是一个二维数组,将H1的数据分为像素对,比较每对像素值的大小,前者大于后者表示1,前者小于后者表示0,若二者相等,则将其中一个的值做微小调整,使得每一像素对的大小关系和水印二值图像的每一位相对应。对不能对应的像素对,将像素对前后的位置互换。 4、2水印提取算法

首先读入带有水印的载体图像,将该图像进行一层小波分解: [A1,H1,V1,D1]=dwt2(f,'haar') 其中f是256×256大小的矩阵,保存着分辨率为256×256、灰度级别为256的嵌入了水印图像的载体灰度图像。

接着,从H1中提取水印,提取水印是嵌入水印的逆过程,将H1分为像素对,比较每对像素值的大小,如果前者大于后者,提取1,如果前者小于后者,提取0。

5、用MATLAB对该数字水印算法的实现 5、1嵌入算法

% 读入载体图像文件 file_name='lena.bmp';

f=double(imread(file_name)); % 读入载体文件的大小 Mc=size(f,1); %高度 Nc=size(f,2); %宽度

% 读入数字水印图像文件 file_name='_cs.bmp';

m=double(imread(file_name)); Mm=size(m,1); %水印图像的高度 Nm=size(m,2); %水印图像的宽度 %将水印图像转换为二值图像 m=double(m); m1=m;

m=fix(m./12); m=uint8(m);

%一层harr小波变换

[A1,H1,V1,D1] = dwt2(f,'haar'); [r1,c1]=size(A1); r2=r1/2; c2=c1/2; % 嵌入水印 for i= 1:r1 for j= 1:c1

w(i,j)=m(mod(i,Mm)+1,mod(j,Nm)+1); end end

for i=1:r1 for j=1:c2 if w(i,j)==1

if H1(i,(2*j-1))

if H1(i,(2*j-1))==H1(i,2*j)

H1(i,(2*j))=H1(i,(2*j))-0.0001; end end

if w(i,j)==0

if H1(i,(2*j-1))>H1(i,2*j) temp=H1(i,2*j-1);

H1(i,(2*j-1))=H1(i,2*j); H1(i,2*j)=temp; end

if H1(i,(2*j-1))==H1(i,2*j) H1(i,(2*j))=H1(i,(2*j))+0.0001; end end end end

% 实现小波的反变换

f=idwt2(A1,H1,V1,D1,'haar',[Mc,Nc]); 5、2提取算法

% 读入嵌入水印的图像 file_name='dwt_wed.bmp';

f=double(imread(file_name))/255; % 读取该图像的高度和宽度 Mw=size(f,1); %高度 Nw=size(f,2); %宽度 %一层harr小波变换

[A1,H1,V1,D1] = dwt2(f,'haar'); [r1,c1] = size(A1); r2=r1/2; c2=c1/2; %提取水印 for i=1:r1 for j=1:c2

if H1(i,2*j-1)>=H1(i,2*j) w(i,j)=1; else

w(i,j)=0; end end end

6、实验结果和分析

本实验取灰度级为256级、分辨率为256×256的灰度图像lena.bmp作为载体图像,图像如图1所示。用分辨率为64×64的二值图像作为水印图像,如图4所示。嵌入水印后的载体图像如图3所示,从嵌入水印后的载体图像中提取的水印图像如图5所示:

图3 嵌入水印后的载体图像

图4 要嵌入的数字水印图像

图5 提取的水印图像

6、1透明性

透明性即隐蔽性,载体信息隐藏水印后,载体信息的值一定会变化,载体信息的变化越小,透明性越好,透明性的度量指标是相关系数,相关系数的定义如下: Correlation(A,B)=

其中A、B分别是图像矩阵。

测得原始载体图像和嵌入水印后载体图像之间的相关系数是0.99584。 6、2 数据恢复完整性

水印在嵌入和提取的过程中,由于算法本身的原因,以及在计算过程中四舍五入引起的误差,使得提取的水印和原来要嵌入的水印之间有误差,数据回复完整性的度量也可以用两副图像之间的相关系数来度量。

测得原始水印和提取出的水印之间的相关系数是:0.73909。 6、3攻击实验

对嵌入水印的载体图像分别做如下处理: % 高斯低通滤波

% h=fspecial('gaussian',1,1); f=filter2(h,f); % 图像变亮

f=imadjust(f,[],[0.4,1]); % 图像变暗

f=imadjust(f,[],[0,0.85]); % 直方图均衡化 f=histeq(f);

% 增加图像对比度 f=imadjust(f, [0.1,1],[]); % 降低图像对比度

f=imadjust(f,[],[0.2,0.8]); % 添加高斯噪声

f=imnoise(f,'gaussian',0,0.01); % 添加椒盐噪声

f=imnoise(f,'salt & pepper',0.06); % 添加乘积性噪声 f=imnoise(f,'speckle',0.08); % JPEG 压缩

imwrite(f,'f.jpg','jpg','quality',90); f=imread('f.jpg'); f=double(f)/255;

其中f表示嵌入水印的载体图像。

对嵌入水印的载体图像进行以上各种处理后提取的水印和从没有受攻击的载体图像提取的水印之间的相关系数如下: 高斯低通滤波:1 图像变亮:0.96841 图像变暗:0.96571 直方图均衡化:0.71929 增加图像对比度:0.8663 降低图像对比度:0.96838 添加高斯噪声:1 增加椒盐噪声:1 添加乘积性噪声:1 JPEG 压缩:0.93677

攻击后提取出来的水印如图6所示。

图6 攻击后提出的水印

(a)高斯低通滤波攻击(b)图像变亮攻击 (c) 图像变暗攻击(d)直方图均衡化攻击 (e) 增加图像对比度(f)降低图像对比度 (g)添加高斯噪声攻击(h)添加椒盐噪声 (i)添加乘积性噪声攻击(j)JPEG压缩攻击

从以上实验结果可以看出,本算法对高斯低通滤波、图像变亮、图像变暗、直方图均衡化、增加图像对比度、降低图像对比度、添加高斯噪声、增加黑白像素点、添

加乘积性噪声、JPEG 压缩等攻击均具有抵抗能力。 7、总结

本文提出了一种空间域和小波变换域结合起来的新的数字水印算法,该算法将载体图像进行多层小波分解,然后选择适当的变换域系数,按照顺序将该系数分为数据对,按照每对数据对的大小关系来嵌入二值水印图像。本文的算法原理简单,编程容易,并且结合MATLAB强大的功能,实现了该算法。最后对该算法进行了隐蔽性检验和攻击实验,证明该算法隐蔽性好,鲁棒性强。 8、参考文献 [1] [2] [3] [4]

本文来源:https://www.bwwdw.com/article/jdrx.html

Top