基于小波变换的零水印图像算法及Matlab实现.docx
- 文档编号:23088173
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:32
- 大小:3.49MB
基于小波变换的零水印图像算法及Matlab实现.docx
《基于小波变换的零水印图像算法及Matlab实现.docx》由会员分享,可在线阅读,更多相关《基于小波变换的零水印图像算法及Matlab实现.docx(32页珍藏版)》请在冰豆网上搜索。
基于小波变换的零水印图像算法及Matlab实现
数据安全技术作业
学生学院_____计算机学院_______
专业班级12级计算机科学与技术
学号**********
学生姓名李恒新
2013年01月15日
基于小波变换的零水印图像算法及Matlab实现
摘要
数字水印用于各种版权保护,不同的版权保护会用到不同的数字水印技术,由此可知目前没有一种万能的数字水印,每种数字水印都有其利弊之处。
本文提出一种另类的数字水印技术,这种技术并没有把水印植入到原图像中,而是基于小波变换构造出一种称为零水印的数字图像。
该技术通过使用密钥,并选择图像低频小波系数来构造零水印,并还原了水印检测的逆过程。
这种技术应对各种攻击都具有很高的鲁棒性和显著性。
整个技术都是用Matlab软件来实现的。
关键词:
小波变换数字水印零水印Matlab图像处理
AZeroWatermarkingAlgorithmBasedonWaveletandachievedbyMatlab
Abstract
Digitalwatermarkingforallkindsofcopyrightprotection,differentcopyrightprotectionusedifferentdigitalwatermarkingtechnology,thusitcanbeseenthereisnoauniversaldigitalwatermarking,eachdigitalwatermarkinghasitsadvantagesanddisadvantages.Thispaperpresentsakindofdigitalwatermarkingtechnology,thistechnologyisnotthewatermarkimplanttotheoriginalimage,butbasedonwavelettransformisakindofstructureiscalledthezerowatermarkingdigitalimage.Thetechnologyuseakey,andchoosethelowfrequencyimagewaveletcoefficientstoconstructnon-watermark,andreducingthewatermarkdetectioninverseprocess.Thistechniquedealwithallkindsofattackwithhighrobustnessandsignificant.MatlabsoftwarewasusedbyThetechnology.
Keywords:
wavelettransformationdigitalwatermarkingzero-watermarkingMatlabimageprocessing
1.引言
随着计算机网络技术和多媒体技术的迅速发展,数字媒体得到了广泛应用,各种形式的多媒体数字作品,包括图像、音乐、电影等等,都能在网上找到相关资源,这就使盗版更加猖狂了!
当版权无法得到确认时,就会给原作家造成了损失,版权保护成了一个亟待解决的现实问题,而数字水印技术就是为解决这一难题而诞生的!
数字水印技术是一种将特定的标记,利用数字内嵌方法隐藏在数字图像、声音、视频等数字内容中,在保证不影响原内容的感知质量和完整性的同时提供一种确认数字内容来源真实性、确保版权拥有者权益、跟踪版权行为、认证用户使用权、隐藏附加其他信息于数字内容中的技术手段。
[1]
本文提出的零水印算法称不上严格意义下的数字水印,不过这种数字水印有其它水印都具有的三个特征——鲁棒性、显著性和安全性,并且体现出了很高的鲁棒性和显著性。
是一种值得深入研究的数字水印技术!
2.数字水印
数字水印是信息隐藏技术的一个重要研究方向。
数字水印是实现版权保护的有效办法,是信息隐藏技术研究领域的重要分支。
具有以下三个基本特征:
1)显著性
显著性衡量水印的(不可)感知性或(不易)觉察性,岁图像水印,也就是不可见性。
这里包括两个含义:
一是水印不易被接收者或使用者觉察,二是水印的加入不影响原产品的视觉质量。
从人的感知角度来说,图像水印的嵌入应以不使原始图像有可察觉的失真为前提。
2)鲁棒性
鲁棒性指图像水印抵御外界干扰,在图像产生失真的条件下仍能保证其自身完整性和对其检测准确性的能力。
换句话说,图像水印应还能帮助以极低差错率识别作品的所有权,所以鲁棒性也称稳健性或可靠性。
3)安全性
主要指水印不易被复制、篡改和伪造的能力,以及不易被非法检测和解码消除的能力。
[1]
数字水印系统基本结构如下:
图1数字水印系统基本结构
近年来,数字水印技术研究取得了很大的进步,下面简要介绍一些典型的算法及其主要思想:
1)空域算法
该类算法中典型的水印算法是将信息嵌入到随机选择的图像点中最不重要的像素位(LSB:
leastsignificantbits)上,这可保证嵌入的水印是不可见的。
但是由于使用了图像不重要的像素位,算法的鲁棒性差,水印信息很容易为滤波、图像量化、几何变形的操作破坏。
另外一个常用方法是利用像素的统计特征将信息嵌入像素的亮度值中。
典型算法有最低有效算法,Patchwork算法等。
[2]
2)变换域算法
这种算法中,主要利用各种变换将宿主图像变换到其它域,在其它域内构造各种算法,将水印信息加到变换域的系数上,在反变换得到含有水印的图像.典型的变换域算法有,离散余弦变换算法(DCT)、傅立叶变换(DFT)算法、离散小波变换(DWT)算法等.该类算法的隐藏和提取信息操作复杂,隐藏信息量不能很大,但抗攻击能力强,很适合于数字作品版权保护的数字水印技术中。
该类算法中,大部分水印算法采用了扩展频谱通信(spreadspectrumcommunication)技术。
算法实现过程为:
先计算图像的离散余弦变换(DCT),然后将水印叠加到DCT域中幅值最大的前k系数上(不包括直流分量),通常为图像的低频分量。
[2]
3)压缩域算法
基于JPEG、MPEG标准的压缩域数字水印系统不仅节省了大量的完全解码和重新编码过程,而且在数字电视广播及VOD(VideoonDemand)中有很大的实用价值。
相应地,水印检测与提取也可直接在压缩域数据中进行。
在该算法中有一个问题值得考虑,即水印信号的引入是一种引起降质的误差信号,而基于运动补偿的编码方案会将一个误差扩散和累积起来,为解决此问题,该算法一般采用漂移补偿的方案来抵消因水印信号的引入所引起的视觉变形。
[2]
4)NEC算法
该算法由NEC实验室的Cox等人提出,该算法在数字水印算法中占有重要地位,其实现方法是,首先以密钥为种子来产生伪随机序列,该序列具有高斯N(0,1)分布,密钥一般由作者的标识码和图像的哈希值组成,其次对图像做DCT变换,最后用伪随机高斯序列来调制(叠加)该图像除直流(DC)分量外的1000个最大的DCT系数。
该算法具有较强的鲁棒性、安全性、透明性等。
由于采用特殊的密钥,因此可防止IBM攻击,而且该算法还提出了增强水印鲁棒性和抗攻击算法的重要原则,即水印信号应该嵌入源数据中对人感觉最重要的部分,这种水印信号由独立同分布随机实数序列构成,且该实数序列应该具有高斯分布N(0,1)的特征。
[2]
5)生理模型算法
人的生理模型包括人类视HVS(HumanVisualSystem)和人类听觉系统HAS。
该模型不仅被多媒体数据压缩系统利用,同样可以供数字水印系统利用。
利用视觉模型的基本思想均是利用从视觉模型导出的JND描述来确定在图像的各个部分所能容忍的数字水印信号的最大强度,从而能避免破坏视觉质量。
也就是说,利用视觉模型来确定与图像相关的调制掩模,然后再利用其来插入水印。
这一方法同时具有好的透明性和强健性。
[2]
3.小波变换
3.1.小波变换理论
小波变换的基本思想是用一组小波或基函数表示一个函数或信号。
若
将任意的连续函数
在小波基下进行展开,称这种展开为函数
的连续小波变换(ContinueWaveletTransform,简记为CWT),其表达式为:
(3-1)
(1)其相应的逆变换为:
(3-2)
(2)若对式
(1)中的a,b进行采样,取
,可得到离散小波变换(DWT):
(3-3)
在对图像进行分析、处理的应用中,我们主要采用离散小波变换(DWT),一般选取
此时称DWT为多分辨率分析。
S.Mallat首先将多分辨率分析用于图像数据的压缩,并给出了信号分解与合成的塔式快速小波变换算法,该算法的出现使小波分析方法在信号处理领域真正得以实用化。
[3][4]
3.2.小波变换基本原理
1989年,Mallat提出了小波变换多分辨率分析的概念,并给出了用于信号分析和重构的Mallat塔式算法[25]。
所谓Mallat塔式算法,就是将一幅图像经过小波变换分解为一系列不同尺度、方向、空间域上局部变化的子带图像。
[5]原始图像经过一级小波分解后可以分成4个频率带,分别是低频LL1、水平HL1、垂直LH1及对角线HH1。
以此类推,第二小波分解对低频频带LL1进一步分解成以上4个频率带。
本文进行二级小波变换就足够了。
经过小波分解后,最底层低频子带集中了图像大部分能量,包含了图像的基本信息,是视觉上重要的部分,具有较大的感觉容量,故是鲁棒水印嵌入的合适位置。
图2二级小波分解示意图
LL2
HL2
HLI
LH2
HH2
LHl
HHl
a)两层小波分解示意图b)lena图分解结果
图3小波分解图
图3的a)分图中,小波两层分解示意图LL2代表低频信息,即包含了图像的大部分能量,所以这个区域非常容易用来处理形成零水印。
提取LL2所用的算法为:
[LL1,HL1,LH1,HH1]=dwt2(X,'sym8');
[LL2,HL2,LH2,HH2]=dwt2(a1,'sym8');
其中,X为原图像的灰度图。
LL2就是两层小波变换后低频系数的行向量。
这部分代表图像的绝大部分信息,所以水印算法就在此区域进行。
4.零水印概念
零水印是由数字作品自身的特点来构造出的,但它本身并不嵌入到作品中,所以对作品的任何数据都不会造成损害,有没有水印都一样,所以显著性不明显,具有很好的隐藏性。
当对对象进行各种攻击,还能检测出水印,具有很高的鲁棒性,这在后文会有介绍。
零水印基本思想就是把图像的特征提取出来,该特征量必须有数字水印的特点,即显著性、鲁棒性和安全性。
再将该特征量与作者的信息用某种方式结合,形成注册内容,将这注册内容注册到可信的水印注册机构。
当版权要判定时,只须提取要检测的图像,提取到的特征量与注册的内容相比较,如果相似度高于一个值,就认定两幅图像是相同的,版权就得到了保护。
对于这种构造水印技术,人人都可以提取零水印用来注册,不过注册有先后,先注册的,必有个注册时间,比较的时候,提早注册的便可以认为是原作品,这就是时戳机制了。
以下是零水印的构造流程:
图3零水印正变换图
图4零水印反变换图
5.基于小波变换零水印算法及Matlab代码实现
5.1.零水印构造算法
图5基于小波的零水印嵌入图示
原始图像X是N1×N2的灰度图像,可用下面的式子表示:
(5-1)
W是根据图像特征随机产生的序列,只取{0,1}的二值序列,长度为M,可以用下面的公式表示W:
(5-2)
构造零水印生成算法如下:
第一步对原始图像灰度化成X并进行两级小波变换,得到系数向量X0;
第二步计算系数矩阵X0的均值aver;
第三步随机挑选出系数向量X0中M个元素,这M个元素构成序列D,并记下数据在系数矩阵中的位置,作为密钥KG1在提取算法中使用;
第四步生成长度为M的随机序列S,取值范围为[1,M],S成为密匙KG2在提取算法中使用;
第五步以S序列的值作为索引挑选D序列中的值,形成同等长度的D'
第六步序列D'根据下面的公式形成01二值序列T
(5-3)
第七步01二值序列T转换为矩阵,形成二值黑白水印图T。
通过这七步,基于小波域的零水印系统产生了WM。
用Matlab代码实现如下:
clc;clearall;closeall;
I=imread('dog.jpg');%读入原始图像
ifndims(I)==3
X=rgb2gray(I);%判断是否为彩色图像,是的话转换为灰度图
end
[a1,h1,v1,d1]=dwt2(X,'sym8');
[a2,h2,v2,d2]=dwt2(a1,'sym8');%二级小波变换
X0=double(a2);
n=length(X0);
ifn>625
KG1=randsample(n,625);%产生矩阵的位置,也就是生成密匙KG1
KG1=KG1';
D=X0(KG1(1,(1:
625)));%从X0中按位置提取625个数据
KG2=randperm(625);%生成密匙KG2
D1=D(KG2(1,(1:
625)));%从D中按位置提取625个数据
end
aver=(sum(D1(1:
end)))/625;%求均值
fori=1:
625%二值化
ifD1(i)>aver
D1(i)=1;
else
D1(i)=0;
end
end
T=D1;
WM=reshape(T,25,25);%转换回矩阵
imshow(WM,[]);%显示生成的水印
a)原始图像b)生成的水印
图6原始图像和生成的水印
5.2.零水印的提取算法
是否
图7零水印提取图示
水印的提取过程就是嵌入过程的逆过程。
第一步对所需鉴定的作品V计算其二级小波变换后的系数矩阵F;
第二步输入G中使用的密钥KG1,寻找F中嵌入过程所利用的M个元素的位置,将处在这些位置的数据按顺序从1到M排成一维向量E,公式如下:
;(5-4)
第三步输入G中使用的密钥KG2,恢复嵌入过程使用的随机数序列S;
第五步使用和构造过程相同的方法,根据S得到一维向量E',
;(5-5)
第六步根据E',使用下面的公式得到提取水印信号TW
(5-6)
通过上述的计算步骤,最后得到提取水印信号TW。
用Matlab代码实现如下:
II=imread('dog_tra.jpg');%读入原始图像
ifndims(II)==3
V=rgb2gray(II);%判断是否为彩色图像,是的话转换为灰度图
end
[a1,h1,v1,d1]=dwt2(V,'sym8');
[a2,h2,v2,d2]=dwt2(a1,'sym8');%二级小波变换
V0=double(a2);
E=V0(KG1(1,(1:
625)));%从V0中按位置提取625个数据
E1=E(KG2(1,(1:
625)));%从E中按位置提取625个数据
aver=(sum(E(1:
end)))/625;%求均值
fori=1:
625%二值化
ifE1(i)>aver
E1(i)=1;
else
E1(i)=0;
end
end
TW=reshape(E1,25,25);%转换回矩阵
imshow(TW,[]);%显示生成的水印
5.3.零水印的相似度鉴定算法
第一步:
按公式计算WM和TW的相似度P;本文用的是corr2函数;
第二步:
设定一个相似度阈值P0;
第三步:
根据下式计算鉴定结果FR
(5-7)
Corr2函数的计算公式[6]如下:
(5-8)
若FR为1,则说明鉴定作品中包含有水印,反之,则说明鉴定作品不包含有水印。
Matlab代码如下:
P=corr2(WM,TW);%A指的是原始图像生成的水印,B是指认证图像生成的水印
P0=0.6
ifP FR=0; else FR=1;%否则就是原作品 end 5.4.峰值信噪比PNSR的算法 本文所用的求峰值信噪比PNSR的算法如下: I=double(I); V=double(V); PSNR=0.0;%PSNR赋初值 forj=1: m fori=1: n PSNR=PSNR+double((I(j,i)-V(j,i))*(I(j,i)-V(j,i))); end end PSNR=PSNR/m/n; PSNR=10*log10(255*255/PSNR) 其中,I为原图像,V为污染后的待认证的图像,m与n为原图像的规格。 (5-9) 6.攻击实验 6.1.对图像进行腐蚀攻击结果: a)腐蚀攻击b)提取的水印 图8 实现代码: se1=strel('disk',8);%腐蚀攻击 I=imerode(I,se1); figure; imshow(uint8(I)); title('腐蚀攻击'); 6.2.对图像进行剪切攻击结果: a)剪切攻击b)提取的水印 图9 实现代码: fori=1: 800%剪切攻击 forj=1: 800 I(i,j)=0; end end figure;imshow(uint8(I)); title('剪切攻击'); 6.3.对图像进行椒盐攻击结果: a)椒盐攻击b)提取的水印 图10 代码实现: I=imnoise(uint8(I),'salt&pepper',0.009);%椒盐噪声 figure;imshow(I); title('噪声攻击'); I=double(I); 6.4.对图像进行斑点噪声攻击结果: a)斑点噪声攻击b)提取的水印 图11 代码实现: I=imnoise(uint8(I),'speckle',0.09);%斑点噪声 figure;imshow(I); title('噪声攻击'); 6.5.对图像进行泊松攻击结果: a)泊松攻击b)提取的水印 图12 代码实现: I=imnoise(uint8(I),'poisson'); figure;imshow(I); title('噪声攻击'); 6.6.对图像进行放大两倍的操作后的结果: a)放大两倍攻击b)提取的水印 图13 代码实现: xx1=imresize(I,2,'bicubic'); xx2=imresize(xx1,1/2,'bicubic'); I=double(xx2); figure;imshow(uint8(I));title('放大两倍'); 6.7.对图像进行缩小四倍的操作后的结果: a)缩小四倍攻击b)生成水印 图14 代码实现: xx1=imresize(I,3/4,'bicubic'); xx2=imresize(xx1,4/3,'bicubic'); I=double(xx2); figure;imshow(uint8(I)); title('缩小四倍'); 6.8.对图像进行膨胀攻击结果: a)膨胀攻击b)生成水印 图15 实现代码: se2=strel('line',11,90);%膨胀攻击 I=imdilate(I,se2); figure; imshow(uint8(I)); title('膨胀攻击'); 6.9.对图像进行4邻域平均滤波结果: a)4邻域平均滤波攻击b)生成水印 图16 代码实现: B=[010;101;010]*(1/4); xx2=filter2(B,I); I=double(xx2); figure;imshow(uint8(I)); title('4邻域平均'); 6.10.对图像进行8邻域平均滤波结果: a)8邻域平均滤波攻击b)生成水印 图17 代码实现: B=[111;101;111]*(1/8); xx2=filter2(B,I); I=double(xx2); figure;imshow(uint8(I)); title('8邻域平均1'); 6.11.对图像进行中间剪切攻击的结果: a)中间剪切攻击b)生成水印 图18 代码实现: fori=1028-440: 1028+450 forj=1028-450: 1028+440 I(i,j)=0; end end I=double(I); figure;imshow(uint8(I));title('中间剪切1'); 6.12.对图像进行JPEG压缩攻击结果如下: a)JPEG压缩攻击前b)JPEG压缩攻击后 图19 图20生成水印 代码实现: I=double(I); T=dctmtx(8);%返回一个n*n的DCT变换矩阵,输出矩阵D为double型 B=blkproc(I,[88],'P1*x*P2',T,T'); %对图像进行分块处理blkproc(A,[mn],fun,parameter1,parameter2,...) %对图像A进行处理,fun应用此函数对分别对每个m*n分块的像素进行处理;parameter1,parameter2: 要传给fun函数的参数 %其中的x代表的是I,P1为T,P2为T'. %只留下了左上角的数据 Mask=[11110000 11100000 11000000 10000000 00000000 00000000 00000000 00000000]; B2=blkproc(B,[88],'P1.*x',Mask); I2=blkproc(B2,[88],'P1*x*P2',T',T); figure; subplot(1,2,1),imshow(I,[]);title('H'); subplot(1,2,2),imshow(I2,[]);title('压缩后的H'); I=I2; 6.13.总汇: 具体的各项攻击后的算法性能如下表: 表1攻击性能结果表 攻击方式 PSNR 相似度P 攻击方式 PSNR 相似度P 腐蚀攻击 28.9999 0.9806 剪切攻击 3.2062 0.8106 椒盐
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 变换 水印 图像 算法 Matlab 实现