用MATLAB数字图像水印

摘要:介绍了数字水印的原理和应用方法,研究了基于离散余弦变换(DCT)的数字图像水印算法,并借助MATLAB编S-Y-具,实现数字水印的嵌入、提取和攻击测试。实验结果表明,对于通常的压缩编码,该算法具有足够的鲁棒性。

关键词:数字图像,数字水印,DCT,MATLAB

、引言

随着Intemet的普及,信息的安全保护问题日益突出。如何有效地防止数据的非法复制和鉴别数字媒体的知识产权,成为亟需解决的问题。1993年Caronni提出了数字水印的概念,并应用于数字图像,此后,研究人员将数字水印的概念扩展到电视图像和声音等领域,数字水印技术作为版权保护的重要手段而得到了广泛的研究和应用。数字水印技术涉及到大量图像处理算法、数学计算工具等,用普通编程工具实现上述算法将要花费大量的时间,MATLAB语言是MathWorks公司推出的一种简单、高效、功能极强的高级语言,具有高性能数值计算能力和可视化计算环境。许多复杂的计算问题只需短短的几行代码就可在MATI.AB中实现。本文基于典型的DCT (离散余弦变换)数亨水印算法过程,详细介绍用MATLAB实现数字水印的嵌入、提取和攻击测试的方法。

数字水印技术

从信号处理的角度看,在载体图像中嵌入数字水印可以视为在强背景(即原始图像)下叠加一个视觉上看不到的弱信号

(水印),由于人的视觉系统(Human Visual System,HVS)分辨率受到一定的限制,只要叠加信号的幅度低于HVS的对比度门限,HVS就无法感觉到信号的存在,因此,通过对载体对象作一定的调整,就有可能在不引起人感知的情况下嵌入一

些信息。

1.数字水印的嵌入

水印嵌入就是把水印信号W:{∞(.c)J嵌入到原始图像Xo={xo(K)}中。水印嵌入过程如图1所示

水印嵌入准则分为:

)】H法准贝U:x (K)=xn(K)+OtOJ(K)乘法准贝U:x (K)=Xo(K)(1+ (o(K))为强度因子,为保证在水印不可见的前提下,尽可能

提高嵌入水印的强度。的选择必须考虑图像的性质和视觉系统的特性。

2,水印的提取与检测

在某水印系统中,水印可以被精确地提取出来,这一过程被称作水印提取。例如在完整性确认的应用中,必须能够精确地提取出嵌入的水印,并且通过水印的完整性来确认多媒体数据的完整性..如果提取出的水印发生了部分的变化,最好还

能够通过变化的水印的位置来确定原始数据被篡改的位置。水印在提取检测时可以需要原始图像的参与,也可以不需要原始

图像的参与。但将水印技术用于图像的网络发布和传播时,如果检测时需要使用原始图像则是个缺陷,因此,当前大多数的水印检测算法不需要原始图像的参与。图2、图3分别是水印提取和检测的框图,虚线部分表示在提取或判断水印信号时原始图像不是必需的。

三、DOT域数字图像水印算法

从技术~k讲.目前的数字水印算法可以分成两类:空域水GRAPHiCS PROG咖印算法和频域(变换域)水印算法。空域水印算法是指将水印信号直接嵌入在原始数据巾。频域水印算法首先将原始的数据进行DCT或小波变换, 频域}嵌入水印信息,然后经反变换输m。征检测水印时,也受首先对信号作相应的数学变换,然后通过相关运算枪测水印选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不M的嵌入系数,并将原始图像进行8×8的分块,将数字水印的灰度值直接植入到原始灰度图像的DCT变换域中,实现水印的嵌入具体方法如下:

1.水印嵌入

设x是M N大小的原始图像,w是水印图像,大小为P Q,M和N分别足P和Q的偶数倍。把水印w 加载到图像x L1|,算法分以下几步进行:将X分解为fM/8) 【N/8)个8{8大小的方块BX (m,1t) , 同时,将w 也分解为(M/8j (N/8)个(8·P/M)(8·Q/Nj大小的方块BW (Ill,I1),1≤m≤M/8,1≤n≤N/8,对每一个BX (m n)进行DCT变换:DBX (Ill,n)=DCT(BX【m .n1)

对每一个DBX fm,T1)和Bw (m,n),Si为从DBX (m,I1)的中频选出的加载的位置,l≤i≤(8·P/M1 (8·Q/N),ti为水印B (m,n1的位置坐标l≤i≤ 8·P/M)$(8·Q/N)DBX”fm,I1)【si)=d{BWfm,I1)fti), 其中d是加权系数,用DBX (nt.11j【si)来代替DBX (m,n)(si)得到加载水印后的图像。刈以J 得到的每.个DBCI”(m,n)进行逆DCT变换:IDBX(m ): IDCT(DBX (m,it))。并将各方块IDBX(m,n)合并为一个整x ,即加裁了水印的新图像。

2.水印提取

设图像x 为已经加栽了水印的载体图像。现要将所加载的水印从x 中提取出来。其过程为上述加载水印算法的逆运算:将X 分为(M/8) (N/8)个8×8大小的方块BX (m,n),1≤m≤ M/8.1≤rl≤N/8。对每一个BX (vii,r1)进行二维DCT

反变换:BX(m,n):iDCT~BX (m,n J)。对每一个BX(m,n),按照式BW(m,n)(ti): 1/0c$BX(m,n)(si)得到BW(m,n)。

将上西得到的所有BW(m.-t)合并成一个整圈w 。

四、数字水印的嵌入与提取

MATLAB rf1对一维和二维信号分别提供了各种变换和逆变换函数。例如dct()、dot2(J分别实现一维信号和二维信号的DCT(离散余炫变换),idct()、idct2()分别实现一维信号和=维信号的IDCT(逆向离散余弦变换),它们是实现频域水

印算法必不叮少的工具。下以一个在频域嵌人和提取黑白图像水印程序为例,给出使用MATLAB实现数字水印的过程嵌入水印的算法描述:读取原始图像和黑自水印图像列二维数组I与J;将原始图像1分割为互不覆盖的图像块block1 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=zeros(M,M ) J=zeros(N,N):8LOCK =zeros(K,K):% 显示原图像subplot(3,2.1): imread( mona.bmp , bmp }:imshow(I):title( 原始公开图像):% 显示水印图像subplotf3,2,2) J=imreadf flag.bmp , bmp imshow(J);title( 水印图像

%水印嵌入

forP=1:N

forq:1:N

x=fP一1)%K+1:Y=fq一1) K+1;

BLOCK=}f×: x+K一1 y- Y+K一1) BLOCK=dct2

(BL0CK):

jfJfP,q)= =0

a= 一1:

else

a:1:

end

BL0CK=BL0CK$(1+a$0 03):BL0CK=idct2(BL0CK)

I(×:X+K一1 y:Y+K一1):BLOCK;

end

end

% 显示嵌入水印后的图像

subplot(3,2,3) imshow(1):title《嵌入水印后的图像):

imwrite(I, watermarked.bmp , bmp ):

%从嵌八水印的图像中提取水印

I:imread( mona , bmp

J:imread( watermarked bmp , bmp )

forP=1:N

forq=1:N

X=(P一1)女K+1:

Y=(q一1)}K+1:

BLOCK1=l(×:X 4-K一1,v:Y+K一1):

BLOCK2=J(×:X+K一1,y:Y+K一1):

BL0CK1=idct2(BL0CK1):

BL0CK2=idct2(BL0CK2):

a:BLOCK2(1,1)/BL0CK1(1,1)一1:

ifa<0

W {P,q):O:

else

W (P,q)=1

end

end

end

% 显示提取的水印

subplot(3,2,4)

imshow(W ):

title( 从含水印图像中提取的水印):

五、水印攻击测试

由于数字水印在实际应用中可能会遭到各种各样的攻击,因此对算法进行攻击测试是衡量一个水印算法优劣的重要手段。下面是一个水印攻击与水印提取的程序实例,首先对嵌入水印后的图像进行JPEG压缩(一种水印攻击),而后从压缩的图像中提取出水印,如图5所示从图中可以看到DCT域的水印算法抵抗JPEG压缩攻击的效果是比较好的:%水印攻击测试

M =256;N =32;K=8:

I=zeros(M,M ):J=zeros(M,M):W =zeros(N,N):

BL0CK1=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( 压缩后的图像):

l=imread( mona , bmp ):%从压缩的图像中提取水印

forP=1:N

forq=1:N

X=(P一1) K+1:Y=(q一1){K+1:

BLOCK1=I(x:X+K一1,v:Y+K一1);

BLOCK2=Jlx:X+K一1,v:Y+K一1):

BL0CK1=idct2(BL0CK1)

BL0CK2=idct2(BL0CK2):

a:BL0CK2(1,1)/BL0CK1(1,1)一1

ifa<0

W (P,q):O:

else

W (P,q)=1:

end

end

end%显示提取的水印

subplot(3,2,6) imshow(W) title( 从经过压缩的图像中提取的水印):

六、结语

从罔4巾呵叫看出:嵌入水印信息后,原图与嵌入水印信息晤的图像在视觉效果上没有明显分别,用f^j眼几乎分辨不出,这说明这种算法充分利用r人限的视觉HVS特性, 利用DCT域嵌入水印后,水印的不口『I见性相当好,图像在嵌入水印前后视觉效果改变不大, 影响罔像的正常使用..从图5可明显看出:嵌入水印后的【矧像经过参数“Quality”为“45”的JPEG 缩后,还能从中提取出较清晰的水印信息, 可见,这种嵌入算法的抗攻击性较好,而且检测和提取易于实现压缩后的图像从经过压缩的图像中提取的承印

参考文献

l乇炳锡.陈琦,邓峰森.数字水印技术[M1.西安:西安电子科技大出版社.2013.

2余成波.数字像处理及M_~TLAB实现【M1.重庆:重庆大学出版社.2013.

3胡彦.陈昭炯.MATLAB在数字水印中的应用[J】.计算机工程.2013.Vo1.29(7):l84一l86.

MATLAB数字图像水印相关推荐

  1. 一种基于加密域的数字图像水印算法的设计与实现(附Matlab源码)

    一种基于加密域的数字图像水印算法的设计与实现 项目介绍 毕设项目 题目:一种基于加密域的数字图像水印算法的设计与实现 随着数字媒体技术的发展,数字媒体版权的保护得到了越来越多人的重视,数字水印技术作为 ...

  2. 基于MATLAB的小波变换数字图像水印系统GUI设计与实现

    摘 要 通过对数字水印的原理和算法的分析,了解信息隐藏的实现手段与效果.在信息加载和提取过程中,突破传统的加密技术,用更具专业性的检测手段来保护专属的信息产权.本文利用了水印良好的鲁棒性和不可感知性, ...

  3. 【图像隐藏】基于混合 DWT-HD-SVD 的数字图像水印方法技术附matlab代码

    1 内容介绍 文章提出一种基于离散小波变换(DWT),Hessenberg分解(HD)和奇异值分解(SVD)的图像水印方法.在嵌入过程中,对原始载体图像进行多级DWT分解,并将得出的子带系数作为HD的 ...

  4. 基于Matlab 的数字图像水印技术

    基于Matlab 的数字图像水印技术 摘要:数字水印技术涉及到许多图像处理算法以及数学计算工具等,如果用普通编程工具实现上述算法,需要要花费大量的时间,MathWorks公司推出的一种简单.高效.功能 ...

  5. 基于MATLAB的数字图像水印系统

    基于MATLAB的数字图像水印系统 摘要:介绍了数字水印的原理和应用方法,研究了基于离散余弦变换(DCT)的数字图像水印算法,并借助MATLAB编S-Y-具,实现数字水印的嵌入.提取和攻击测试.实验结 ...

  6. 奇异值分解 水印 matlab,基于奇异值分解的数字图像水印算法研究毕业论文

    内容介绍 原文档由会员 何倩倩 发布 基于奇异值分解的数字图像水印算法研究毕业论文 本文共计54页,25261字: 摘 要 数字水印是将身份确认信息或保密信息镶嵌于图像中的一种技术,可靠的水印可为信息 ...

  7. 基于matlab的数字图像边缘检测算法研究,基于MATLAB数字图像边缘检测算法的研究与对比分析...

    ·161· 居 舍 研究探讨 2017年10月(中) 1 绪论 图像边缘中通常包含着重要的边界信息,这些边界信息便于分析和研究图像.另外,边缘检测可以大大降低图像处 理的工作量,将提高图像分析的效率. ...

  8. 小波变换:基于matlab的数字图像水印嵌入及提取(灰度图)

    1.水印嵌入 水印嵌入使用的算法 a)分解级数:根据人类视觉系统的照明和纹理掩蔽特性,将水印嵌入到图像的纹理和边缘不易被察觉,但对于图像滤波和有损压缩容易丢失细节信息.小波变换低频部分集中了图像大部分 ...

  9. matlab图像水印技术研究,动态图像数字水印matlab的实现开题报告.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 动态图像数字水印matlab的实现开题报告.doc ...

最新文章

  1. iOS视频流采集概述(AVCaptureSession)
  2. 【译】Android中的安全数据— Android中的加密(第1部分)
  3. numpy——axis
  4. 修复被破坏的 vs 工程设置
  5. C#结合Jquery LigerUI Tree插件构造树
  6. 如何为项目和产品提供资源——优化工作时间、激励团队和预算
  7. C#多线程编程实例 线程与窗体交互
  8. python 翻译库本地库_利用python爬取并翻译GEO数据库
  9. -Xlint:deprecation
  10. sql里 where和order by一起使用是怎样的顺序
  11. nginx + tomcat + redis 部署项目,解决session共享问题。
  12. Java Maps的9个常见问题
  13. 核磁谱图分析步骤_微谱技术:想要涂料开发,少不了仪器分析……
  14. MD5加密、Base64加密解密
  15. ORACLE RAC 12C(12.1.0.2)数据库软件安装步骤
  16. Oracle P6培训系列:07设置项目详情
  17. VMware Workstation 12.0.0 Pro 正式版/注册码/注册机
  18. POI excel添加数据有效性验证以及解决DataValidation超长的问题
  19. cad断点快捷键_CAD中打断于点的快捷键
  20. 耶斯莫拉~一起来学集合啊~

热门文章

  1. css层叠样式表、基本选择器
  2. 《Python数据结构与算法分析》第一章课后习题
  3. QQ卡丁车:腾讯自主研发的联网对战赛车游戏
  4. 微信小程序 图片等比例缩-放(图片自适应屏幕)
  5. 深入理解MyBatis(七)—MyBatis事务
  6. 用华为手机,别忘记打开这个“开发者选项”,能瞬间提升手机性能
  7. c# WPF 动态设置button的IsEnabled属性
  8. 【科创人南京行】西祠胡同创始人“响马”刘琥:一生寻找精神绿林,减区块链也许是正确方向...
  9. 提交 Merge Request 申请进行code review
  10. 固高jog运动和点位运动