版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数字水印源码,希望对大家学习有帮助.% 由高斯正态分布序列 g1 产生 364 的水印信%号 w0,w0 由(0,1)组成。clearrandn(state,1106);g1=randn(36,4);for i=1:36 for j=1:4 if g1(i,j)=0 w0(i,j)=1; else w0(i,j)=0; end; end;end;figure;imshow(w0);title(水印);% 对水印信号 w0 进行(7,4)汉明编码,得到一%367 的分组码 x0。x0=w0;for i=1:36 s=8*x0(i,1)+4*x0(i,2)+2*x0(i,3)+x0(i,4); s
2、witch s case 0 x0(i,5)=0;x0(i,6)=0;x0(i,7)=0; case 1 x0(i,5)=0;x0(i,6)=1;x0(i,7)=1; case 2 x0(i,5)=1;x0(i,6)=1;x0(i,7)=0; case 3 x0(i,5)=1;x0(i,6)=0;x0(i,7)=1; case 4 x0(i,5)=1;x0(i,6)=1;x0(i,7)=1; case 5 x0(i,5)=1;x0(i,6)=0;x0(i,7)=0; case 6 x0(i,5)=0;x0(i,6)=0;x0(i,7)=1; case 7 x0(i,5)=0;x0(i,6)=1
3、;x0(i,7)=0; case 8 x0(i,5)=1;x0(i,6)=0;x0(i,7)=1; case 9 x0(i,5)=1;x0(i,6)=1;x0(i,7)=0; case 10 x0(i,5)=0;x0(i,6)=1;x0(i,7)=1; case 11 x0(i,5)=0;x0(i,6)=0;x0(i,7)=0; case 12 x0(i,5)=0;x0(i,6)=1;x0(i,7)=0; case 13 x0(i,5)=0;x0(i,6)=0;x0(i,7)=1; case 14 x0(i,5)=1;x0(i,6)=0;x0(i,7)=0; case 15 x0(i,5)=1
4、;x0(i,6)=1;x0(i,7)=1; end;end;% 对 x0 进行行向位扩展,得到一个由(-1,1)组成%的扩展序列 y。cr 为扩展因子。cr=256;for i=1:252 if x0(i)=1 y(i,1:cr)=1; else y(i,1:cr)=-1; end;end;y(253:256,:)=0;% 以下产生伪随机序列 p。为此先设定密钥(1114)%并产生高斯正态分布序列g2,再由g2产生由(-1,1)%组成的伪随机序列 p。randn(state,1114);g2=randn(256,256);5.17 用MATLAB数字图像水印一、引言随着Internet的普及,
5、信息的安全保护问题日益突出。如何有效地防止数据的非法复制和鉴别数字媒体的知识产权,成为亟需解决的问题。1993年Caronni提出了数字水印的概念,并应用于数字图像,此后,研究人员将数字水印的概念扩展到电视图像和声音等领域,数字水印技术作为版权保护的重要手段而得到了广泛的研究和应用。数字水印技术涉及到大量图像处理算法、数学计算工具等,用普通编程工具实现上述算法将要花费大量的时间。MATLAB语言是MathWorks公司推出的一种简单、高效、功能极强的高级语言,具有高性能数值计算能力和可视化计算环境。许多复杂的计算问题只需短短的几行代码就可在MATLAB中实现。本文基于典型的DCT(离散余弦变换
6、)数字水印算法过程,详细介绍用MATLAB实现数字水印的嵌入、提取和攻击测试的方法。二、数字水印技术从信号处理的角度看,在载体图像中嵌入数字水印可以视为在强背景(即原始图像)下叠加一个视觉上看不到的弱信号(水印),由于人的视觉系统(Human Visual System,HVS)分辨率受到一定的限制,只要叠加信号的幅度低于HVS的对比度门限,HVS就无法感觉到信号的存在,因此,通过对载体对象作一定的调整,就有可能在不引起人感知的情况下嵌入一些信息。.数字水印的嵌入水印嵌入就是把水印信号W() 嵌入到原始图像X0=0()中。水印嵌入过程如图1所示。水印嵌入准则分为:加法准则:W() =0()+(
7、) 乘法准则:W() =0()(1+()为强度因子,为了保证在水印不可见的前提下,尽可能提高嵌入水印的强度。的选择必须考虑图像的性质和视觉系统的特性。2.水印的提取与检测在某些水印系统中,水印可以被精确地提取出来,这一过程被称作水印提取。例如在完整性确认的应用中,必须能够精确地提取出嵌入的水印,并且通过水印的完整性来确认多媒体数据的完整性。如果提取出的水印发生了部分的变化,最好还能够通过变化的水印的位置来确定原始数据被篡改的位置。水印在提取检测时可以需要原始图像的参与,也可以不需要原始图像的参与。但将水印技术用于图像的网络发布和传播时,如果检测时需要使用原始图像则是个缺陷,因此,当前大多数的水
8、印检测算法不需要原始图像的参与。图2、图3分别是水印提取和检测的框图,虚线部分表示在提取或判断水印信号时原始图像不是必需的。三、DCT 域数字图像水印算法从技术上讲,目前的数字水印算法可以分成两类:空域水印算法和频域(变换域)水印算法。空域水印算法是指将水印信号直接嵌入在原始数据中。频域水印算法首先将原始的数据进行DCT 或小波变换,在频域上嵌入水印信息,然后经反变换输出。在检测水印时,也要首先对信号作相应的数学变换,然后通过相关运算检测水印。选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将原始图像进行8 8 的分块,将数字水印的灰度值直接植入到原始灰度图像的DCT
9、 变换域中,实现水印的嵌入。具体方法如下:.水印嵌入设X是M*N 大小的原始图像, W是水印图像,大小为P*Q,M 和N 分别是P 和Q 的偶数倍。把水印W 加载到图像X中,算法分以下几步进行:将X分解为(M8)*(N8)个8*8大小的方块BX(m,n),同时,将W也分解为(M8)*(N8)个(8PM)*(8QN)大小的方块BW(m,n),1mM8 ,1nN8。对每一个BX(m,n)进行DCT变换:DBX(m ,n)= DCT(BX(m ,n)。对每一个DBX(m ,n)和BW(m ,n),Si为从DBX(m ,n)的中频选出的加载的位置,1i(8P/M)*(8Q/N),ti为水印BW(m,n
10、)的位置坐标1i(8P/M)*(8Q/N)。DBX(m, n)(si)=*BW(m,n)(ti),其中是加权系数,用DBX(m,n)(si)来代替DBX(m,n)(si)得到加载水印后的图像。对以上得到的每一个DBCI(m,n)进行逆DCT 变换:IDBX(m,n) = IDCT(DBX(m , n)。并将各方块IDBX(m,n)合并为一个整图X,即加载了水印的新图像。.水印提取设图像X为已经加载了水印的载体图像。现要将所加载的水印从X中提取出来。其过程为上述加载水印算法的逆运算:将X分为(M/8)*(N/8)个88大小的方块BX(m,n),1m M/8,1nN/8。对每一个BX(m,n)进行
11、二维DCT反变换:BX(m,n)=iDCT(BX(m,n)。对每一个BX(m,n),按照式BW(m,n)(ti)= 1/*BX(m,n)(si)得到BW(m, n)。将上面得到的所有BW(m,n)合并成一个整图W 。四、数字水印的嵌入与提取MATLAB中对一维和二维信号分别提供了各种变换和逆变换函数。例如dct()、dct2()分别实现一维信号和二维信号的DCT(离散余弦变换),idct()、idct2()分别实现一维信号和二维信号的IDCT(逆向离散余弦变换),它们是实现频域水印算法必不可少的工具。下面以一个在频域嵌入和提取黑白图像水印程序为例,给出使用MATLAB实现数字水印的过程。嵌入水
12、印的算法描述:读取原始图像和黑白水印图像到二维数组I与J;将原始图像I分割为互不覆盖的图像块blockL(x,y),1 x, y 8,L =1,2.M *M /64,对blockL(x,y) 进行DCT变换,得到dct _ blockL(u,v);取黑白水印图像中的一个元素J(p,q),嵌入原始图像块的DCT的低频系数中;对嵌入水印信息后的图像块dct_blockL(u,v) 进行反DCT变换;得到blockL( x,y);合并图像块,得到嵌入黑白水印后的图像。下面是嵌入与提取水印的程序实例,运行结果如图4所示。%嵌入水印的程序代码M=256; %原图像长度N=32; %水印图像长度K=8;I
13、=zeros(M,M);J=zeros(N,N);BLOCK = zeros(K,K);%显示原图像subplot(3,2,1);I=imread(mona.bmp,bmp);imshow(I);title(原始公开图像);%显示水印图像subplot(3,2,2);J=imread(flag.bmp,bmp);imshow(J);title(水印图像);%水印嵌入for p=1:N for q=1:N x=(p-1)*K+1; y=(q-1)*K+1; BLOCK=I(x:x+K-1,y:y+K-1); BLOCK=dct2(BLOCK); if J(p,q)=0 a=-1; else a=
14、1; end BLOCK=BLOCK*(1+a*0.03); BLOCK=idct2(BLOCK); I(x:x+K-1,y:y+K-1)=BLOCK; endend%显示嵌入水印后的图像subplot(3,2,3);imshow(I);title(嵌入水印后的图像);imwrite(I,watermarked.bmp,bmp);%从嵌入水印的图像中提取水印I=imread(mona,bmp);J=imread(watermarked.bmp,bmp);for p=1:Nfor q=1:Nx=(p-1)*K+1;y=(q-1)*K+1;BLOCK1=I(x:x+K-1,y:y+K-1);BLO
15、CK2=J(x:x+K-1,y:y+K-1);BLOCK1=idct2(BLOCK1);BLOCK2=idct2(BLOCK2);a=BLOCK2(1,1)/BLOCK1(1,1)-1;if a0W(p,q)=0;elseW(p,q)=1;endendend%显示提取的水印subplot(3,2,4);imshow(W);title(从含水印图像中提取的水印);图4基于DCT变换的水印嵌入与提取五、水印攻击测试由于数字水印在实际应用中可能会遭到各种各样的攻击,因此对算法进行攻击测试是衡量一个水印算法优劣的重要手段。下面是一个水印攻击与水印提取的程序实例,首先对嵌入水印后的图像进行JPEG压缩(
16、一种水印攻击),而后从压缩的图像中提取出水印,如图5所示。从图5中可以看到DCT域的水印算法抵抗JPEG压缩攻击的效果是比较好的。图5图像压缩后提取的水印%水印攻击测试M=256; N=32; K=8;I=zeros(M,M); J=zeros(M,M); w=zeros(N,N);BLOCK1=zeros(K,K); BLOCK2=zeros(K,K);%对嵌入水印后的图像进行JPEG压缩L=imread(watermarked.bmp,bmp);imwrite(L,attack.jpg,jpeg,Quality,45);J=imread(attack.jpg,jpeg);subplot(3,2,5);imshow(J);title(压缩后的图像);I=imread(mona,bmp);%从压缩的图像中提取水印for p=1:Nfor q=1:Nx=(p-1)*K+1; y=(q-1)*K+1;BLOCK1=I(x:x+K-1,y:y+K-1);BLOCK2=J(x:x+K-1,y:y+K-1);BLOCK1=idct2(BLOCK1);BLOCK2=idct2(BLOCK2);a=BLOCK2(1,1)/BLOCK1(1,1)-1;if a0W(p,q)=0;elseW(p,q)=1;endendend%显示提取的水印subpl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中同步学习导与练 地理 八年级下册 配粤教人民版 第六单元能力拓展训练营
- 玻璃采光顶施工方案模板
- 护理:疼痛管理的新思路
- 2026年天基算力网服务空天陆海智能体应用
- 2026年地区特定默认值申请条件与证明材料准备
- 2026年“数据要素价值释放年”背景下数商生态培育的战略机遇
- 2026北师大版数学八年级下册第4章因式分解1 因式分解教案
- 2026年托幼一体化从试点扩面向提质增效转型战略前瞻
- 电力控制设备相关行业投资方案
- 安全文化建设:提升整体护理水平
- 《高速铁路客运组织(第3版)》课件 项目二 任务2 检票及站台乘降组织
- 购买羊合同协议
- 2025年江苏省南京市联合体中考语文模拟试卷(一)
- SJG 46 – 2023《建设工程安全文明施工标准》
- 船舶危险源 甲板风险源清单
- 人工智能在绩效评价中的应用-全面剖析
- 部编版小学语文六年级下册必读书阅读训练试题及答案(全册)
- 《机电设备维修与维护(第2版)》高职全套教学课件
- 化工企业职业健康培训课件
- 初中数学新课程标准(2024年版)
- 中药灌肠疗法课件
评论
0/150
提交评论