数字水印算法设计.docx
《数字水印算法设计.docx》由会员分享,可在线阅读,更多相关《数字水印算法设计.docx(35页珍藏版)》请在冰豆网上搜索。
数字水印算法设计
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
信息工程学院
题目:
数字水印算法设计
初始条件:
MATLAB软件平台、版权图像、水印图像
要求完成的主要任务:
1.设计任务
学习掌握一种数字水印算法,选择两幅图像分别作为版权图像和水印图像,采用水印嵌入算法成生含水印图像。
采用水印提取算法,提取出嵌入水印。
并对水印算法的鲁棒性进行测试。
2.设计要求
①掌握一种数字水印的嵌入与提取算法原理。
②编写出水印嵌入算法的matlab程序,并给出水印嵌入前后的版权图像,并对嵌入效果进行分析说明。
③编写出水印提取算法matlab程序,并给出水印原图和提取出的水印图像,并对水印的提取效果进行分析说明。
④进行水印的抗攻击实验,噪声攻击,剪切攻击,缩放攻击,压缩攻击等。
测定提取前后水印的峰值信噪比(PSNR)和相关性(NC)
时间安排:
第18-19周。
指导教师签名:
年月日
系主任签名:
年月日
摘要
数字水印技术近年来得到了较大的发展,基于变换域的水印技术是目前研究的热点。
数字水印是利用数字作品中普遍存在的冗余数据和随机性,把标识版权的水印信息嵌入到数字作品中,从而可以起到保护数字作品的版权或其完整性的一种技术。
一个有效的数字水印系统至少具备以下三个最基本的特性:
1.安全性:
数据信息隐藏于数据图像中,不是文件头中,文件格式的变换不应导致水印信息的丢失。
2.隐蔽性:
在数字图像作品中嵌入数字水印不会引起图像明显的降质,即含水印的图像与原始图像对人的感觉器官的刺激应该是无差别或差别很小,主观感觉变化很小。
3.鲁棒性:
是指在经历有意或无意的信号处理过程后,水印信息仍能保持完整性或仍能被准确鉴别。
本次设计基于DCT域的MATLAB水印算法,实验结果表明这种算法具有较好的性能,实现的水印具有不可见性,而且具有较好的鲁棒性。
关键词:
数字水印、DCT变换、MATLAB
Abstract
Digitalwatermarkingtechnologyinrecentyearshasbeengreatprogressinthetransformdomain-basedwatermarkingtechnologyisahottopicofcurrentresearch.Digitalwatermarkingistheuseofredundantdataandrandomnessofthecommondigitalworkstoidentifythecopyrightwatermarkinformationembeddedindigitalworks,copyrightprotectionofdigitalworksortheintegrityofatechnologywhichcanplay.
Aneffectivedigitalwatermarkingsystemwithatleastthefollowingthreebasiccharacteristics:
(1)Security:
datahiddeninthedataimage,notafileheader,fileformattransformationshouldnotleadtothelossofthewatermarkinformation.Concealment:
digitalwatermarkembeddedinthedigitalimageworkswillnotcausetheimagedegradedwatermarkedimagewiththeoriginalimageonthestimulationofthesensoryorgansofthepeopleisnodifferenceorlittledifferencebetweenthesubjectivefeelingofchangeissmaller.Robustness:
referstotheexperienceintentionalorunintentionalsignalprocessing,thewatermarkinformationtomaintaintheintegrityorabletoaccuratelyidentify.
ThedesignisbasedonMATLABwatermarkingalgorithminDCTdomain,theexperimentalresultsshowthatthisalgorithmhasbetterperformance,thewatermarkisinvisible,butalsohasbetterrobustness.
Keywords:
digitalwatermark,DCTtransform,MATLAB
数字水印算法设计
1数字水印概念
数字水印(DigitalWatermarking)技术是将一些标识信息(即水印)直接嵌入数字载体当中(包括多媒体、文档、软件等)或是间接表示(修改特定区域的结构),且不影响原载体的使用价值,也不容易被探知和再次修改,但可以被生产方识别和辨认。
通过这些隐藏在载体中的信息,可以达到确认内容创建者、购买者、传送隐秘信息或者判断载体是否被篡改等目的。
数字水印是实现版权保护的有效办法,是信息隐藏技术研究领域的重要分支。
1.1数字水印分类
(1)按水印的特性可以将数字水印分为鲁棒数字水印和易损数字水印两类。
鲁棒数字水印主要用于在数字作品中标识著作权信息,利用这种水印技术在多媒体内容的数据中嵌入标示信息。
在发生版权纠纷时,标示信息用于保护数据的版权所有者。
用于版权保护的数字水印要求有很强的鲁棒性和安全性。
易损水印,与鲁棒水印的要求相反,易损数字水印主要用于完整性保护,这种水印同样是在内容数据中嵌入不可见的信息。
当内容发生改变时,这些水印信息会发生相应的改变,从而可以鉴定原始数据是否被篡改。
易损水印必须对信号的改动很敏感,人们根据易损水印的状态就可以判断数据是否被篡改过。
(2)按水印所附载的媒体划分可分为文本水印、图像水印、音频水印、视频水印及软件水印等。
图像水印将水印信息嵌入到图像中,发生所有权争议时,通过提取、检测嵌入信息来证实所有权。
图像水印利用人类视觉系统的特点,应用最为广泛。
根据水印嵌入方式不同,图像水印算法主要分为时(空)域方法和变换域方法两类。
1.2数字水印特点
数字水印技术基本上具有下面几个特点:
安全性:
数字水印的信息应是安全的,难以篡改或伪造,同时,应当有较低的误检测率,当原内容发生变化时,数字水印应当发生变化,从而可以检测原始数据的变更;当然数字水印同样对重复添加有很强的抵抗性。
隐蔽性:
数字水印应是不可知觉的,而且应不影响被保护数据的正常使用。
鲁棒性:
指在经历多种无意或有意的信号处理过程后,数字水印仍能保持部分完整性并能被准确鉴别。
可能的信号处理过程包括信道噪声、滤波、数/模与模/数转换、重采样、剪切、位移及有损压缩编码等。
水印容量:
是指载体在不发生形变的前提下可嵌入的水印信息量。
嵌入的水印信息必须足以表示多媒体内容的创建者或所有者的标志信息,或购买者的序列号,这样便于解决版权纠纷,保护数字产权合法拥有者的利益。
2数字水印算法
2.1数字水印基本模型
数字水印的嵌入过程一般模型如图2-1-1所示:
图2-1-1数字水印嵌入一般模型
频域法加入数字水印的原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有DWT、DCT、DFT、WP和分形。
然后,对加入了水印信息的信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息的信号。
数字水印的提取过程一般模型如图2-1-2所示:
原始信号
待检信号
抽检过程
提取水印
可读水印
不可读水印
原始水印
相关性判断
图2-1-2数字水印提取一般模型
频域法检测水印的原理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算,得出水印信息。
如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印的检测有两个结果。
2.2常见数字水印算法
2.2.1空间域算法
数字水印直接加载在原始数据上,还可以细分为如下几种方法:
(1)最低有效位方法(LSB)
这是一种典型的空间域数据隐藏算法,L.F.Tumer与R.G.VanSchyadel等先后利用此方法将特定的标记隐藏于数字音频和数字图像内。
该方法是利用原始数据的最低几位来隐藏信息(具体取多少位,以人的听觉或视觉系统无法察觉为原则)。
LSB方法的优点是有较大的信息隐藏量,但采用此方法实现的数字水印是很脆弱的,无法经受一些无损和有损的信息处理,而且如果确切地知道水印隐藏在几位LSB中,数字水印很容易被擦除或绕过。
(2)Patchwork方法及纹理块映射编码方法
这两种方法都是Bender等提出的。
Patchwork是一种基于统计的数字水印,其嵌入方法是任意选择N对图像点,在增加一点亮度的同时,降低另一点的亮度值。
该算法的隐藏性较好,并且对有损的JPEG和滤波!
压缩和扭转等操作具有抵抗能力,但仅适用于具有大量任意纹理区域的图像,而且不能完全自动完成。
空间域水印算法的最大优点就是具有较好的抗几何攻击能力,最大弱点就在于抗信号处理的能力较差。
2.2.2变换域算法
基于变换域的技术可以嵌入大量比特数据而不会导致可察觉的缺陷,往往采用类似扩频图像的技术来隐藏数字水印信息。
这类技术一般基于常用的图像变换,基于局部或是全部的变换,这些变换包括离散余弦变换(DCT)、小波变换(WT)、傅氏变换(FT或FFT)以及哈达马变换(Hadamardtransform)等等。
其中基于分块的DCT是最常用的变换之一,现在所采用的静止图像压缩标准JPEG也是基于分块DCT的。
最早的基于分块DCT的一种数字水印技术方案是由一个密钥随机地选择图像的一些分块,在频域的中频上稍稍改变一个三元组以隐藏二进制序列信息。
选择在中频分量编码是因为在高频编码易于被各种信号处理方法所破坏,而在低频编码则由于人的视觉对低频分量很敏感,对低频分量的改变易于被察觉。
该数字水印算法对有损压缩和低通滤波是稳健的。
另一种DCT数字水印算法是首先把图像分成8×8的不重叠像素块,在经过分块DCT变换后,即得到由DCT系数组成的频率块,然后随机选取一些频率块,将水印信号嵌入到由密钥控制选择的一些DCT系数中。
该算法是通过对选定的DCT系数进行微小变换以满足特定的关系,以此来表示一个比特的信息。
在水印信息提取时,则选取相同的DCT系数,并根据系数之间的关系抽取比特信息。
除了上述有代表性的变换域算法外,还有一些变换域数字水印方法,它们当中有相当一部分都是上述算法的改进及发展,这其中有代表性的算法是I.Podichuk和ZengWenjun提出的算法。
他们的方法是基于静止图像的DCT变换或小波变换,研究视觉模型模块返回数字水印应加载在何处及每处可承受的JND(JustNoticeableDifference,恰好可察觉差别)的量值(加载数字水印的强度上限),这种水印算法是自适应的。
2.2.3其他算法
近年来利用混沌映射模型实现数字水印、保密通信等成为混沌应用研究的热点。
特别是自从Cox等借用通信技术中的扩频原理将水印信号嵌入到一些DCT变换系数或者多层分解的小波变换系数以来,人们已经提出了一些混沌数字水印方法。
水印的嵌入与检测是基于人类视觉系统(HVS)的亮度掩蔽特性和纹理掩蔽特性,折衷水印的不可见性和鲁棒性之间的矛盾.结果表明:
该方法嵌入的水印具有不可见性和鲁棒性,并且这种基于密钥的混沌水印方法更好的抗破译性能。
目前比较流行的还有一种基于盲水印检测的DWT算法,该算法首先对原始图像进行小波变换,根据人类具有的视觉掩蔽特性对低频分量进行一定的量化,同时可不影响视觉效果,并对作为水印的图像进行压缩和二值化处理,形成一维的二值序列,根据二值序列的值对上述量化后的原始信号的低频分量进行视觉阈值范围内允许的修改,从而实现水印的嵌入。
水印提取过程是对含有水印的图像进行小波变换,对低频分量同样进行量化处理,为了增大算法的安全性,可以对水印形成的二值0、1序列在嵌入前进一步进行伪随机序列调制,相应的在水印提取过程需要增加用伪随机序列解调的步骤。
这样不知道伪随机序列的攻击者即使推测出水印的嵌入规律,也无法提取水印,大大增加了水印系统的透明性和鲁棒性。
2.3离散余弦变换(DCT)算法
2.3.1DCT变换公式
因为DCT变换公式是这一算法的核心,有必要先了解一下DCT正反变换公式。
DCT正反变换公式的核心是余弦变换,计算速度比较快,因图像处理所用的是二维变换,这里只给出二维的DCT正反变换公式,二维DCT正变换公式为:
;
其中:
二维DCT反变换公式为:
其中x,y为空间采样值,u,v为频域采样值。
因为数字图像多用像素方阵来标识,即M=N,此时,二维DCT正反变换可以简化为:
2.3.2二维DCT的性质
离散余弦变换是图像处理技术中几种最基本的酉变换之一。
酉变化是线性变化的一种特殊形式,其基本线性运算式是严格可逆的,并且满足一定的正交条件。
图像的酉变换可以被理解为分解图像数据为广义的二维频谱,变换域中每一分量对应于原图频谱函数的能量。
设IM´N为M´N的图像矩阵则该图像的二维DCT变换可由下式表示:
FDCT=
其中:
其中
经过二维DCT变换得到的DCT系数矩阵GDCT指示了一系列频率中每一个频率所对应的变化程度,即频率的高低。
其中低频分量将集中在矩阵的左上角,高频分量则集中在右下角。
图像的低频分量反映图像慢变化,即图像整体部分;图像的高频分量代表图像跳变的地方,即图像细节部分,如轮廓、边缘。
根据人类视觉系统,图像整体比细节部分更为重要,若一幅图像经过处理后而视觉改变不大,则其低频分量必定改变程度不大。
此算法采用了将数字水印的灰度值植入DCT域的低频分量中的方法。
二维离散余弦变换是一种严格可逆的酉变换。
它的两个矩阵AM´MBN´N满足以下的正交条件:
由此,易得到离散余弦逆变换(IDCT):
正因为DCT是一种严格可逆的正交变换,才可能对基于DCT的植入算法实现准确的数字水印滤波。
2.4离散余弦变换的水印嵌入
数字图像水印算法选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将载体图像进行8×8的分块,将数字水印的灰度值直接植入到载体灰度图像的DCT变换域中,实现水印的嵌入。
具体方法如下:
设I是M×N大小的原始图像,J是水印图像大小为P×Q,M和N分别是P和Q的偶数倍,把水印J加载到图像I中,算法分以下几步进行:
1.将I分解为(M/8)×(N/8)个8×8大小的方块B;同时,J也分解为(M/8)×(N/8)个(8P/M)×(8Q/N)大小的方块V;
2.对每一个B进行DFT变换:
DB=DFT(B);
3.加载水印对每一个DB和V,s(i)为从DB的中频选出的加载的位置,1≤i≤(8P/M)×(8Q/N),t(i)为水印V的位置坐标,1≤i≤(8P/M)×(8Q/N),DB’(s)=A×V,其中A是加权系数,用DB’(s)来代替DB,得到加载水印后的图像DBC;
4.对以上得到的每一个DBC进行逆DCT变换:
IDBC=IDCT(DBC)并将各方块IDBC合并为一个整图I’,即加载了水印的新图像。
原始图像I
水印图像J
8×8分块处理
8×8分块处理
含水印的图像
IDCT变换
水印的嵌入
改变水印的嵌入深度
选择加载位置
改变水印信息形式
DCT变换
图2-4-1DCT变换的水印嵌入流程图
2.5离散余弦变换的水印提取
设图像D为已经加载了水印的载体图像,现要将所加载的水印从D中提取出来,其过程为上述加载水印算法的逆运算:
1.将D分解为(M/8)×(N/8)个8×8大小的方块BD;
2.对每一个BD进行二维DFT变换:
DBD=DCT(BD);
3.提取数据对每一个DBD,按照式V’=1/A×DBD得到V’;
4.将上面得到的所有V’合并成一个水印整图。
含水印的图像
合并分块的水印得到完整的水印
提取每块的水印信息
DCT变换
8×8分块处理
图2-5-1DCT变换的水印嵌入流程图
3数字水印算法的MATLAB编程
3.1数字水印的嵌入
根据DCT数字水印算法,编写的数字水印嵌入MATLAB程序如下:
clearall;
clc;
start_time=cputime;
%%%%%%%%%%%%读取水印图像%%%%%%%%
I=imread('mark.bmp');
I=rgb2gray(I);
I=double(I)/255;
I=ceil(I);
%%%%%%%%%%显示水印图像%%%%%%%%%%%%%
figure
(2);
imshow(I),title('水印图像')
dimI=size(I);
rm=dimI
(1);cm=dimI
(2);
%%%%%%以下生成水印信息%%%%%%%%%%
mark=I;
alpha=15,
k1=randn(1,8);
k2=randn(1,8);
a0=imread('lena.bmp');
psnr_cover=double(a0);
figure(3);
imshow(a0,[]),title('原始图像');
[r,c]=size(a0);
cda0=blkproc(a0,[8,8],'dct2');%分块处理图片
%%%%%%%%%%%%%%嵌入%%%%%%%%%%%%%%%
cda1=cda0;%cda1=256_256
fori=1:
rm%i=1:
32
forj=1:
cm%j=1:
32
x=(i-1)*8;y=(j-1)*8;
ifmark(i,j)==1
k=k1;
else
k=k2;
end
cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k
(1);
cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k
(2);
cda1(x+3,y+6)=cda0(x+3,y+6)+alpha*k(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5);
cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6);
cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7);
cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8);
end
end
%%%%%嵌入水印后图像%%%%%%%%%%%%%%
a1=blkproc(cda1,[8,8],'idct2');%分块处理图片
a_1=uint8(a1);
imwrite(a_1,'withmark.bmp','bmp');
figure(4);
imshow(a1,[]),title('嵌入水印后的图像');
disp('嵌入水印处理时间');
程序运行后结果如下。
图3-1-1原始图像和水印图像
图3-1-2含水印的图像
由运行结果可知,嵌入水印后的图像和原始图像看上去基本一样,可见数字水印的嵌入不影响原图像的感观,数字水印具有不可见性。
3.2数字水印的提取
根据DCT数字水印算法,编写的数字水印提取MATLAB程序如下:
%%%%%%%%%%%%提取水印%%%%%
M1=imread('withmark.bmp');%读取含水印的图像
psnr_watermarked=M1;
dca1=blkproc(M1,[8,8],'dct2');%分块处理
p=zeros(1,8);
fori=1:
dimI
(1)
forj=1:
dimI
(2)%j=1:
32
x=(i-1)*8;y=(j-1)*8;
p
(1)=dca1(x+1,y+8);
p
(2)=dca1(x+2,y+7);
p(3)=dca1(x+3,y+6);
p(4)=dca1(x+4,y+5);
p(5)=dca1(x+5,y+4);
p(6)=dca1(x+6,y+3);
p(7)=dca1(x+7,y+2);
p(8)=dca1(x+8,y+1);
%sd1=sum(sum(p.*k1))/sqrt(sum(sum(p.^2)));
%sd2=sum(sum(p.*k2))/sqrt(sum(sum(p.^2)));
%ifsd1>sd2
ifcorr2(p,k1)>corr2(p,k2),warningoffMATLAB:
divideByZero;
mark1(i,j)=1;
else
mark1(i,j)=0;
end
end
end
figure(3);
subplot(1,3,2);
imwrite(mark1,'getmark.bmp','bmp');
imshow(mark1,[]),title('提取的水印图像');
I=imread('mark.bmp');%读取原始水印图像%
I=rgb2gray(I);
I=double(I)/255;
I=ceil(I);
subplot(1,3,3);
imshow(I),title('原始水印图像');
程序运行后结果如下。
图3-2-1水印的提取
从程序运行结果中可知,从含水印的图像中提取得到的水印图像和原始图像基本相同,水印信息被成功地提取了出来。
4数字水印的抗攻击实验
对数字水印的攻击一般是针对水印的鲁棒性提出的要求,在前面已介绍过数字水印的鲁棒性是指水印信号在经历多种无意或有意的信号处理后,仍能被准确检测或提取的特征。
攻击是指那些带有损害性、毁坏性的,或者试图移去水印信号的处理过程。
鲁棒性好的水印应该能够抵抗各种水印攻击行为。
在这里我们只考虑那些并不严重导致载体数据失真的攻击方法。
所谓水印攻击分析,就是对现有的数字水印系统进行攻击,以检验其鲁棒性,通过分析其弱点所在及其易受攻击的原因,以便在以后数字水印系统的设计中加以改进。
水印必须对攻击具有鲁棒性,常见的操作主要有:
剪切、亮度和对比度的修改、放大、缩小和旋转、有损压缩、在图像中加噪声等。
为了验证算法的鲁棒性,对嵌入了水印的视频分别进行了剪切、滤波、压缩
等攻击操作,之后再提取水印。
评价数字水印被影响程度,除了利用感知系统(人眼或人耳)定性评价以外,还可以采用定量的评价标准。
通常对含水印的数字作品进