MATLAB制作数字水印

上传人:桔**** 文档编号:574374650 上传时间:2024-08-16 格式:PDF 页数:33 大小:1.86MB
返回 下载 相关 举报
MATLAB制作数字水印_第1页
第1页 / 共33页
MATLAB制作数字水印_第2页
第2页 / 共33页
MATLAB制作数字水印_第3页
第3页 / 共33页
MATLAB制作数字水印_第4页
第4页 / 共33页
MATLAB制作数字水印_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《MATLAB制作数字水印》由会员分享,可在线阅读,更多相关《MATLAB制作数字水印(33页珍藏版)》请在金锄头文库上搜索。

1、 MATLAB 制作数字水印 1. 数字水印 1.1 背景 二十一世纪是数字时代,通信技术的迅速发展和计算机网络的普遍运用,使人们可以通过互联网收发信息,可以随时上传自己创作的数字图象、音乐、视频等作品,可以进行学术交流。 然而,也正是由于网络的这种便捷性、传播迅速的优点使其很容易被非法拷贝,导致数字产品的版权、完整性、有效性得不到保证,严重损害了创作者的利益。而一些具有特殊意义的数字信息,如涉及司法诉讼、政府机要等信息,更是遭到了不法分子地恶意攻击和随意篡改等,这一系列问题给当今科学家带来了巨大挑战。 基于以上类似问题,数字水印技术可以说是信息时代的特有产物,是一种可以在开放网络环境下保护版

2、权和认证来源及保障信息完整性的新型技术,在音频、图像、视频制品中迅速得到广泛的研究和发展。 1.2 基本特点 数字水印是加在数字图象、音频或视频中的微弱信号,这个信号是人们能够建立产品所有权、辨认购买者或提供数字产品的一些额外信息。具体说来,它们都具有以下共同的特征: 1. 不可感知性 对于数字水印的嵌入,应该对观察者没有视觉障碍,理想情况应该是水印图像与原始图像没有丝毫差别。 2. 鲁棒性 鲁棒性是指一个数字水印能够承受攻击的能力,一般来说数字水印方法是针对特定的攻击进行设计。 3. 安全性 水印技术的安全性是其最重要的特性,由于它的商业性,其算法必须公开,算法的安全性完全取决于密钥,而不对

3、算法进行保密。 4. 计算复杂度 不同应用中,对于水印的嵌入算法和提取算法的计算复杂度要求是不同的,复杂度直接与水印系统的实时性相关。 5. 水印容量 水印容量是指载体数据字中可嵌入水印信息位的多少,可以从几兆到几个比特不等。 11.3 数字水印的应用 数字水印是以不可感知的方式嵌入到数字信息中的,总体来说它有以下应用: 数字产品产权保护 这是数字水印最广泛的应用,将秘密的数字信号嵌入到有价值的数字文件中,这些数字信号是产权的标识,在不破坏数字文件的情况下不能被盗版者出去,起到了保护产权的作用。 1. 数据库标识 有时一些文件中提示数据的标识信息往往比文件本身更重要或者一些音像文件需要将说明注

4、释(如字幕等)与音像本身结合起来,这就可以通过数字水印技术加以解决。 2. 文件内容鉴定 水印技术在鉴定数据建立者和鉴别数据内容有着特殊的运用,目的是检测数据是否被修改过或是否经过特殊的处理。 3. 系统升级 日常生活中常常涉及到旧装系统升级情况,这可以通过将“增强层”嵌入到所发送的数据中来给传统的信号发射系统升级。 4. 商务交易中的票据防伪 随着高质量图像输入输出设备的发展,使得货币、支票以及其他票据的伪造变得更加容易。目前,美国、日本以及荷兰都已开始研究用于票据防伪的数字水印技术。 5. 媒体侦破 这一运用的目的是提取对原始信号进行处理过的信息。例如,鉴定方法可以发现一幅图像被篡改过,但

5、无法发现是怎样篡改的。媒体侦破技术就可以指出图像的哪部分被篡改了,指出被插入到原图像中的新对象等等。 1.4 数字水印技术的研究动态 随着多媒体技术和因特网技术的迅猛发展,一系列有关产权保护和信息安全的问题等亟待人们解决。数字水印技术便是二十世纪九十年代初出现的为解决这些问题的一门崭新的技术,也是近几十年来国内外专家和学者研究的一大热点。 1. 数字水印技术的研究现状 1) 空间域数字水印研究 最初提出的数字水印嵌入方法是在空间域上实现的。 1995 年,Btuyndoncky 等提出了一个基于空域分块的方法,通过改变均值来嵌入水印。1996 年,Patchwork 等人提出了一种算法(Pat

6、chwork 算法),该算法随机选取图像的 N 对像素点,通过增加其中一个点的亮度值而相应降低另一个点的亮度来隐藏信息。1998 年,Darmstaedter 等人提出了一种新的空域水印算法,该算法是基于图像的 88 块的空间域分解进行的。 不过上述的一些空域法普遍存在着可嵌入水印能量不好控制、鲁棒性差等缺点,现在已经很少有人使用,人们逐渐将水印的嵌入和检测转到频域上进行。 2) 频域数字水印研究 频域法大体有三类:DFT 域、DCT 域和 DWT 域。 Ruanaidh 和 Pun 利用傅立叶域对全局性的旋转,平移和缩放变换具有不变性的特点,将水印嵌入到傅立叶域来达到对这些攻击的鲁棒性。 1

7、999 年,Hsu 和 Wu 等人提出了基于可视化模型的算法,该算法具有很强的鲁棒性。2000 年,黄继武、易开样等人还提出了一种 DCT 域数字水印算法:首先把图像分成 88 的不重叠像素块,经过分块 DCT 变换后,得到有 DCT 系数组成的频率块,然后随机选取一些频率块,水印信号嵌入到由密钥控制选择的一些 DCT 系数中。2004 年,王向阳等提出了一种 DCT 域自适应彩色图像二维数字水印算法,将灰度图像嵌入到原始彩色图像中。其实 ,很多国内外研究人员提出的其他 DCT 域数字水印算法,采用的多是基于 DCT 的 88 图像块。 总的来说,基于图像特征的方法是探索性的,很难用目前现有的

8、模型进行理论分析,限制了这种方法在需要有严格性能规定的实际商业中的应用。 2. 数字水印技术的前景与意义 从国际、国内对数字水印研究现状和重视程度,可见数字水印对社会的应用是多么重要,所以它的研究前景是十分广阔的。数字水印技术是近十年来横跨信号处理、数字通信、密码学、计算机网络技术等多学科的新兴技术,具有潜在的应用市场和良好的应用前景。 从研究意义来看,对它的研究具有重要的学术、经济和军事价值。一方面,它将促进多媒体技术、网络技术、通信技术、信号处理技术等多门新兴技术的有机结合,促进多媒体网络的进一步繁荣;另一方面,它将有助于多媒体信息版权保护及其冲突问题的解决。同时,它将促进隐蔽通信技术、信

9、息安全技术的提 高。 2. 数字水印技术概况 数字水印技术是利用数字产品普遍存在的冗余数据与随机性,将水印信息嵌入在数字产品本身中,从而起到保护数字产品版权或者完整性的一种技术。 2.1 数字水印的分类 数字水印技术根据不同的根据有不同的分类方法,一般有如下分类: 依据其特性来分可以将数字水印分为鲁棒数字水印和脆弱水印两种。前一种要求嵌入的水印对常用的编辑处理或恶意攻击有一定的抵抗性;而后一种则要求对信息的改动有很强的敏感性。 按水印的用途分类可将其分为版权水印、图像认证水印、隐藏标识水印、防止复印水印等。 按检测的过程来划分数字水印有非盲水印系统和盲水印系统。一般而言,非盲水印的鲁棒性较强,

10、而其应用受到存储成本的限制。不过,目前学术界研究的数字水印大多数是盲水印。 根据内容划分水印又可以分为有意义水印和无意义水印。二者区别在于前者本身也是个图像或者音频片段的编码;而后者却是一个序列号。 按数字水印的隐藏的位置划分,数字水印又有空(时)域数字水印、频域数字水印、时/频域数字水印和时间/尺度域数字水印。 42.2 数字水印系统的模型 现在学术界对数字水印算法的理解都是将一些不易察觉的具有随机特性的数据嵌入到图像频域或空域的系数上。从信号处理的角度看,嵌入水印可以看成是在强背景下迭加一个弱信号,由于人类视觉系统的分辨率受到一定的限制,只要迭加的信号幅度不超过 HVS 的对比门限,人眼就

11、无法感觉到信号的存在,所以可以通过对原始图像进行一定调整,在不影响视觉效果的情况下嵌入一些水印信息。 数字水印系统的一般模型如图 1 所示: 图 1 数字水印系统基本模型 水印嵌入器的输入量有三个:水印信号 M,宿主信号 S 和密钥 K。 水印信号 M 是指原始水印(图像或一个数字序列)通过一定的方法经过调制将嵌入到宿主信号中的数字信号。 宿主信号 S 是指被嵌入水印的信号(原始信号)。 密钥 K 则指用于提高水印系统安全性的密码信息,它独立于宿主信号。密钥有私有密钥和公共密钥之分,前者指攻击者在明确了水印嵌入方法但又不知道密钥的情况下,水印不会被破坏或盗取;后者是指攻击者对宿主信号(如内容标

12、识、语言字幕等)不感兴趣的情况下,密钥也就不存在保密性,可以作为公共密钥。 2.3 数字水印算法 1. 水印嵌入算法 数字水印技术涉及到了多门学科:信号处理、数字通信、密码学、模式识别等,研究人员从各个角度对水印嵌入算法进行了研究。以下简要介绍几种典型的算法。 1)空域水印嵌入算法 空域水印嵌入算法包括最低有效位算法 LSB、Patchwork 方法、纹理映射编码方法等。其中最低有效位算法 LSB 是指首先把一个密钥输入一个 m-序列发生器来产生水印信号,然后将其重新排列成 2 维水印信号,并按象素点逐一插入到原始图像象素值的最低位。由于水印信号被安排在了最底位上,是不可见的,基于同样的原因,

13、可以轻易的被移去,所以它的鲁棒性很差。而 Patchwork 方法是一种基于统计的数字水印嵌入方法,是通过增加一个象素点的亮度值,再相应的减少另一个 象素点的亮度值来隐藏信息。纹理映射编码方法则是将数字信息隐藏于数字图象的任意纹理部分,该算法对于滤波、压缩和旋转等操作具有抵抗能力。 52)变换域水印嵌入算法 变换域中能量分布集中,有利于保证水印的不可见性,提高了水印的鲁棒 性,所以这一算法得到了广泛的应用。图 2 是变换域水印算法的过程 图 2 变换域水印嵌入过程图 变换域算法中有一种典型的算法 DCT 域数字水印算法,该算法是通过对选定的DCT 系数进行微小变换以满足特定的关系,来表示一个比

14、特的信息。在水印信号提取时,则选取相同的 DCT 系数,并根据系数之间的关系抽取比特信息。其特点是数据改变幅度较小,且透明性好,但是其抵抗几何变换等攻击的能力较弱。另外基于DFT 和 DWT 算法与上述算法具有相似的原理。 目前 DWT 域的算法还不多见,但小波域具有良好的空频分解特性,而且嵌入式零树小波编码将在新一代的压缩标准中被采用,迎合着国际压缩标准,小波域的水印算法具有良好的发展前景。 2. 水印检测算法 水印检测是上述嵌入过程的逆过程,以下详细介绍一下水印相关检测技术。 *待测试图像与原始图像的差为: f(x,y) K,1 (2-1) e(x,y),f*(x,y),f(x,y),e(

15、x,y),x,0,y,8,kk,0 对进行域变 e(x,y)换,再利用下式提取水印序列: k x,(F(u,v)/F(u,v)/alfa (2-2) ikk 得到了可提取的待测试序列: N,1w* (2-3) W,x,0,i,N,W,iWkk,0 W 待测序列中假设有 n 个数据值与原始水印序列中对应位上的值不相同,则定义误码率: n, (2-4) NW 则有相关系数: *WiWi()(),N, (2-5) NC2*2WiWi()(), 从而可以得到相关系数和误码率的关系: Nn,2w (2-6) N,1,2,NCNw 根据误码率的值可判断图像中是否含有水印信号,从而达到版权保护的目 W 的。

16、判定准则为:事先设定阈值。若,可以判定被测图像中含有水印;T,T W 否则,没有水印。阈值的选择要同时考虑虚警概率和漏警概率。虚警概率是T 指待测图像中不包含水印而检测器输出结果却表明含有水印的概率;漏警概率是指待测图像中包含水印而检测器输出结果却表明不含有水印的概率。增大,则 T *2漏警概率降低而虚警概率提高;反之亦然。若与不相关,的概率 WW,T 等于具有 Gaussian 分布的随机变量超过其均值 T 倍方差的概率。 7图 3 是典型的水印检测/提取系统 图 3 水印检测提取系统 3. MATLAB 软件的介绍 MATLAB 语言是一种非常强大的工程语言,被广泛应用于包括信号与图象处理

17、、控制系统设计、通信、系统仿真等诸多领域。 83.1 MATLAB 研究数字水印的优点 MATLAB 语言有不同于其他高级语言特点,它在研究数字水印有如下特点: 1. 编程效率高 MATLAB 语言是用数学形式的语言编写程序,用 MATLAB 编写程序犹如在演算纸上排列公式与求解问题。由于它编写简单,所以编程效率高,易学易懂。 2.用户使用方便 与其他语言相比,MATLAB 能在同一画面上进行灵活操作,快速排除输入程序中的书写错误、语法错误甚至语意错误,从而加快了用户编写、修改和调试程序的速度,便于操作。 3. 扩充能力强,交互性好 MATLAB 语言库函数丰富,用户还可以根据自己的需要方便地

18、建立和扩充新的库函数,提高 MATLAB 使用效率和扩充功能。良好的交互性使程序员可以使用以前编写过的程序,减少重复性工作。 4. 移植性好,开放性好 言编写的,而 C 语言的可移植性很好。于是 MATLAB 可 MATLAB 是用 C 语 以很方便地移植到能运行 C 语言的操作平台上。 5. 语言简单,内涵丰富 MATLAB 语言中最基本最重要的成分是函数,同一函数名,不同数目的输入变量及不同数目的输出变量,代表着不同的含义。这不仅使MATLAB 的库函数功能更丰富,而且大大减少了需要的磁盘空间,使得 MATLAB 编写的 M 文件简单、短小而高效。 6. 方便的绘图功能 MATLAB 软件

19、中有一系列绘图函数,在运用 MATLAB 软件时只需要调用不同的绘图函数,即可在图上标出图题、XY 轴标注。 7. 功能强大的工具箱是 MATLAB 的另一特色。 MATLAB 工具箱中的信号处理、控制系统、神经网络、图象处理、鲁棒控制、非线性系统控制设计、系统辨识、最优化、模糊逻辑、小波、通信、统计(statistics 等工具箱),这些工具箱给各个领域的研究和工程应用提供了有力的工具。 8. MATLAB 的缺点 它和其他高级程序相比,程序的执行速度较慢。由于 MATLAB 的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。 93.2 MATLAB 函数介绍 在研究

20、水印技术时,我们处理的图像数据是二维信号,而声音是一维信号,所以在这里,我门只简单介绍与水印有关的函数。 1. 数据输入输出函数 imread()和 imwrite():可以读写 bmp, jpg/jpeg, tif/tiff, png, hdf, pcx, wxd 格式文件。读索引文件时,还可以得到相应的调色板数据。 2. 图象显示 imshow():显示一幅图像;imfinfo():可以得到读入图像的信息。如文件的大小、格式、格式版本号、图像的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等。 3. 变换域函数 对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB 中的一

21、维信号和二维信号分别提供了各种变换和逆变换函数。 1) 离散余弦变换(DCT) (1) dct(),dct2():分别实现一维信号和二维信号的 DCT(离散余弦变换); (2) idct(),idct2():分别实现一维信号和二维信号的 IDCT(逆离散余弦变换); 2) 离散傅立叶变换(DFT) (1) fft(),fft2():分别实现一维信号和二维信号的 DFT(离散傅立叶变换); (2) ifft(),ifft2():分别实现一维信号和二维信号的 IDFT(逆离散傅立叶变换); 4. 攻击函数 对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算法必须经过各种攻击测试才能

22、对之做出客观的评价。 MATLAB 中的许多函数可以直接用来做攻击测试: 1)旋转:rotate()可以对图像进行任意角度的旋转; 2)剪裁:imcrop()可以按精确定位的各点坐标进行剪裁; 3)滤波:filter()和 filter2()可实现对一维信号和二维信号的滤波; 4)加各种噪声:imnoise()可以对图像加入各种噪声,如白噪声、椒盐噪声等 。 4. 基于 DCT 域的数字水印技术 离散余弦变换,简称 DCT,是一种实数域变换,其变换核为实数的余弦函数,计算速度较快,是一种近似最佳变换,很适合于做图象压缩和随机信号处理,它对常用的图象压缩有较强的鲁棒性。 基于 DCT 域的数字水

23、印算法,一般而言有两种算法。一种是直接对整幅图像进行 DCT 计算,选取合适频段的系数,嵌入水印。另一种是,首先将整幅图像分成块,对每一块分别进行 DCT 计算,在每一块中选取合适频段的系数,将水印信息分散嵌入到每一块所选取的 DCT 系数中。这种方法称为分块 DCT,这种方法非常适合 于 88 的图像块 DCT 变换。目前,DCT 域的水印方法大多数是采用分块 DCT 方法。 34.1 二维 DCT 概述 S 一般而言,数字图象,其二维 DCT 变换用矩阵表 S(m,n),0,m,M,0,n,N 示,其定义式如下式所示: 11M,N,ikjl2(21)(21),,,,SklklSij(,)(

24、)()(,)cos()cos(), (4-1) ,cc12MN22MN,00i,j, 8二维 IDCT 定义如下: 11M,N,ikjl2(21)(21),,,,SijklSkl (4-2) (,)()()(,)cos()cos(),cc12MN22MN,00k,l, ,i,k,0,1,2,.M,1,j,l,0,1,2,.N,1,其中 并且 11,k,0l,0, (4-3) k(),l(),22,cc12,kMlN1,1,2,.,11,1,2,.,1, 我们最常用到的是 88 分块 DCT,也就是首先将大小为 MN 的图像分成的非重叠的大小为 88 的块,然后对每一块作 DCT。(M/8),(

25、N/8),(M,N)/64 根据式(4-1)和式(4-2),88DCT 的定义如下: 77()()kl(21)21)i,k,j,l,cc12 (4-4) (,)(,)cos()cos()Skl,Sij,221616ij,00 88IDCT 的定义如下: 77()()kl(21)(21)i,k,j,l,cc12 (4-5) (,)(,)cos()cos()Sij,Skl,221616kl,00 其中, 并且 ,i,j,k,l,0,1,2,.7, 1,1,l,0k,0, (4-6) l(),k(),22,c2c1,l1,1,2,.7k1,1,2,.7, 4.2 基于 DCT 域数字水印嵌入算法 D

26、CT 域的水印嵌入过程,就是首先对宿主图像 S 进行分块 DCT 运算,选取出要嵌入的 DCT 系数 C,并且对宿主图像用 HVS 模型进行分析,得到感知系数掩蔽模板,用其来控制水印嵌入强度,再将编码后的水印信号 W,用一定方式嵌入到选好的系数中。用嵌入水印的系数替代原来位置的系数,再进行逆 DCT(Inverse Discrete Cosine Transform,IDCT)变换,就得到了含有水印的图像 X。DCT 域水印系统的水印嵌入过程框图如图 4 所示: 图 4 DCT 域水印嵌入过程方框图 水印嵌入步骤如下: 1. 将宿主图像分成 88 的块,每一块都进S(i,j),(i,1,2,.

27、,M;j,1,2,.,N) 行 DCT 变换,得到与宿主图象相同尺寸的 DCT 域系数矩阵。 S(i,j),(i,1,2,.,M;j,1,2,.,N) 2. 产生两个不相关的伪随机序列,并设定一个密钥 key。 3. 将每个 88 的 DCT 系数矩阵,从每一块的中频段取出(64,8)/(M,N)个系数。 C(i,j),(k,1,2,.,B)Knum 4. 然后嵌入水印,嵌入规则为当水印图像元素为0时,按照式子 W(其中 alpha 为尺度因子,mark 为随机序列,为原图像 W,W(1,alpha*mark) 的分块 DCT 系数),将一个随机序列与原始图像块的幅度谱对应元素进行乘性叠加;为

28、1时,用另一个伪随机序列与幅度谱对应元素进行乘性叠加。 5. 用得到的新的 DCT 系数对原来位置的 DCT 系数进行置换。 6. 对新的 DCT 系数矩阵进行 DCT 逆变换,得到了嵌入水印信号的图像。 4.3 基于 DCT 域数字水印检测提取算法 DCT 域水印的验证过程(即包括水印的检测和提取过程),就是将待测图像 Y(注意此时的图像也许已经遭受了图象处理或恶意攻击)进行 DCT 运算;然后按着嵌入水印时选取的 DCT 系数,选取其含有水印的系数,进行水印提取,然后利用相关检测法判断水印是否存在。如果水印检测器输出结果显示水印存在,则根据需要可以用水印解码器对提取的水印进行解码,恢复水印

29、。水印检测提取过程如图 5 图 5 DCT 域数字水印检测提取框图 水印检测提取步骤如下: 1. 对含有水印图像进行 88 的块 DCT 变换。 2. 对每一块的 DCT 系数进行“之”字型排列,从我们已知的嵌入位置取出可 能含有水印的系数,将所有提取出的系数,按顺序组成新的系数序列 C(i,j)k 。 C(l),(l,1,2,.N)w 3. 用密钥生成水印信号 WN(0,1) 4. 将含水印的系数序列与水印信号进行相关计算,得到归一化相关系数 。 NNC 4.4 实验结果及分析 以下是尺度因子 alpha=30 时的实验结果,以及受到各种攻击后所提取到的水印图像及其与原始水印图像的相关系数:

30、 NNC 图 6 原始图像和嵌入水印后的图像 此时,alpha=30 图 7 没有受到攻击的图像及提取到的水印图像 N 此时相关系数=1 NC 图 8 加入白噪声后的图像、原始水印和提取的水印图像 此时相关系数=0.99969 NNC 图 9 高斯低通滤波后的图像及提取的水印图像 此时相关系数=0.99058 NNC 图 10 剪切后的图像及提取的水印图像 N 此时相关系数=0.93909 NC 图 11 旋转 10 后的图像及提取的水印图像 此时相关系数=0.48383 NNC 从以上结果可以看出:当图像(宿主信息)受到加噪、高斯低通滤波、剪切等攻击后,其可视度、提取的水印图像与原始水印图像

31、的相似度(都在 90%以上) 都是非常令人满意的;当受到旋转攻击后,其提取的水印图像与原始水印图像的相似度(不足 50%)却令人感到失望,不过仍可证明水印信息的存在。 5 基于傅立叶域变换的数字水印技术 65.1 傅立叶变换概述 傅立叶变换(Fourier Transform)是线性系统分析的一个有力工具,是研究信号的频谱方法,它架起了时域和频域之间的桥梁。使我们能够定量分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪声等的作用,把傅立叶变换的理论同其物理解释相结合,将大大有助于解决大多数图象处理问题。 Fourier 分析理论十分完善,既可以处理连续信号也可以处理离散信号。计算机只能处

32、理离散信号,且在数字图象处理中,输入图像和输出图像通常都是二维 的,一般表示成二维数字矩阵,因此这里直接讨论二维离散傅立叶变换(DFT)和二维快速傅立叶变换(FFT)。 1. 二维离散傅立叶变换 DFT(Discrete Fourier Transform) 二维离散傅立叶变换对定义式如下: uxvyN,1M,1,j2(,)BN (5-1) F(u,v),f(x,y)e,u,0,1,2?,M,1;v,0,1,2?,N,1,y,0x,0 uxvxN,1M,1,i2(,)1MN (5-2) f(x,y),F(u,v)e,x,0,1,2,?,M,1;v,0,1,2,?,N,1,MNv,0u,0 二维

33、离散傅立叶变换的傅立叶谱、相位、功率谱分别如下: 1222,F(u,v),R(u,v),I(u,v) 傅立叶谱: (5-3) 相位: (5-4) ,(u,v),arctgI(u,v)R(u,v) 222E(u,v),F(u,v),R(u,v),I(u,v) 功率谱: (5-5) 式子(5-1)可以分离为: 2,2,N,1M,1,jvy,,juxNM (5-6) F(u,v),e,f(x,y)e,y,0x,0, 式子(5-2)可以分离为: 2,2,N,1M,1jvy,jux11NM (5-7) f(x,y),e,F(u,v)e,NMv,0u,0, 由上两式可知,二维傅立叶变换可由连续两次一维傅立

34、叶变换得到,从而将二维 DFT 分解为水平和垂直两部分运算,上式中方括号中的项表示在图像的行上计算的 DFT,方括号外边的求和则实现结果数组在列上的 DFT,这种分解使我们可以用一维 FFT 来快速实现二维 DFT。 2. 二维快速傅立叶变换 FFT(Fast Fourier Transform) FFT 的基本思想是: MNN,2 令序列的长度为,如果不满足,在尾部补零,没有任何影响。f(n) 按 n 奇偶把分解为两个 N/2 点的子序列: f(n) (5-8) g(m),f(2m),m,0,1,2,?,(N/2);1 (5-9) h(m),f(2m,1),m,0,1,2,?,(N/2);1

35、 那么 2,2,jknjkn,NN (5-10) F(k),f(n)e,f(n)e,n 为偶数 n 为奇数 将(5-8)和(5-9)式代入上式得: 22,NN,jkmjkm,11NN2222 (5-11) Fkgmehme()()(),,,11,mm00 g(m),h(m)上式右边的两部分恰好是长度(周期)为 N/2 的的傅立叶变换11G(k),H(k),所以: 11 2,jkNN(),(),(),0,1,2,?(,1) (5-12) FkGkeHkk112 2,jkNNN (5-13) (,),(),(),0,1,2,?,(,1)FkGkeHkk1122 这样一个长度为 N 的 DFT 就分

36、解为两个长度为 N/2 的 DFT,然后进行 N/2 次复数的蝶式运算,再运用分解-递归思想,分解次,每一次均有 N/2 个蝶 M,logN 式运算,所以 FFT 的时间复杂度为。 O(NlogN) FFT 在图像运用中的思想是,先将原图像进行转置,按行对转置后的图像矩阵做一维 FFT,将此变换所得的中间矩阵再转置,再按对转置后的中间矩阵做一维FFT,最后得到的就是二维 FFT。 5.2 基于傅立叶域的数字水印嵌入算法 这里的嵌入算法大抵同前面所讲的嵌入过程,唯一不同的是傅立叶变换中涉及到复数运算,所以在嵌入过程中还需要计算一下其变换后的幅度值方可嵌入,嵌入算法的步骤如下: 1. 将宿主图像分

37、成 88 的块,每一块都进行f(i,j),(i,1,2,.,M;j,1,2,.N) Fijk(,)DFT 变换,得到与宿主图象相同尺寸的 DFT 域图象系数矩阵。 2. 产生两个不相关的伪随机序列,并设定一个密钥 key。 3. 将每个 88 的 DFT 系数矩阵,从每一块的中频段取出(64,8)/(M,N)个系数。 C(i,j),k,1,2,.,BKnum 4. 由于 DFT 域的幅度谱具有对称性,为了水印嵌入后保持这种对称性,也为了确保恢复图像像素值为实数,嵌入水印时采用对称嵌入。嵌入规则为当水印图像元素为0时,按照式子(其中 alfa 为尺度因子,W,W(1,alfa*mark) Wma

38、rk 为随机序列,为原图像的分块 DFT 系数),将一个随机序列与原始图像块的幅度谱对应元素进行乘性叠加;为1时,用另一个伪随机序列与幅度谱对应元素进行乘性叠加。 5. 用得到的新的 DFT 系数对原来位置的 DFT 系数进行置换。 6. 对每一图像块进行 DFT 逆变换,得到含水印图像。 5.3 基于傅立叶域的数字水印检测提取算法 这里的检测提取算法过程大抵同前面所讲的 DCT 域数字水印检测提取算法,提取算法步骤如下: 1. 将宿主图像 f(i,j),i,1,2,.,M;j,1,2,.,N 分成 88 的块,每一块都进行 DFT 变换,得到与宿主图像相同尺寸的 DFT 域图象系数矩阵 。

39、Fk(i,j),i,1,.M;j,1,.N 2. 对每一块的 DFT 系数进行“之”字型排列,从我们已知的嵌入位置取出可 能含有水印的系数,将所有提取出的系数,按顺序组成新的系数序列 C(i,j)k 。 C(l),l,1,2,.,Nw 3. 计算嵌入水印图像块的幅度谱与两个伪随机序列的相关性,假设嵌入的水印图像矩阵为0时叠加的是随机序列 A,为1时叠加的是随机序列 B,则提取时如果嵌入水印幅度谱与随机序列 A 的相关性大于其 B 的相关性,那么这个位置嵌入的是水印图像矩阵0元素。按这个规则即可提取出水印图像。 4. 将含水印的系数序列与水印信号进行相关计算,得到归一化相关系数 。 NNC 5.

40、4 实验结果与分析 以下是尺度因子 alpha=260 时的实验结果,以及受到各种攻击后所提取到的水印图像及其与原始水印图像的相关系数: NNC 图 12 原始图像与嵌入水印后的图像 图 13 没有受到攻击的图像和直接提取的水印图像 此时相关系数=1 NNC 图 14 加入白噪声后的图像、原始水印图像及提取的水印图像 此时相关系数=0.96566 NNC 图 15 高斯低通滤波后的图像及提取的水印图像 此时相关系数 N=0.97311 NC 图 16 剪切后的图像及提取的水印图像 N 此时相关系数=0.96907 NC 图 17 旋转后的图像及提取的水印图像 此时相关系数=0.91301 NN

41、C 从以上结果可以看出,由于 DFT 域对全局性的旋转、平移和缩放变换具有不变性的特点,基于 DFT 域的数字水印技术要比基于 DCT 域的数字水印技术的鲁棒性要强的多,特别是对于旋转攻击,前者的优势更加突出 结 论 本文首先对数字水印技术进行了简单的概述,介绍了近些年来,国内外学者在这一方面所做出的努力和成就,并对其进行了一下客观的展望。其次,分别从数字水印可能受到的攻击、数字水印技术的嵌入、提取和检测四个方面展开了研究。 在研究过程中,通过改变尺度因子,进而改变水印信息的嵌入强度,然后比较嵌入水印信息后宿主图像的可视度来确定最佳尺度因子。经过实验观察,尺度因子越大嵌入水印后宿主图像的可视度

42、就越小,即图像越模糊不清,却有利于提高其鲁棒性;反之亦然。 对于数字水印技术,除了通过改进算法来提高鲁棒性外,我们还可以从密码学角度通过提高攻破密钥所需要的代价来保护我们所传送的信息。另外,还可以仿照互联网中通过建立标准的协议和方法来进一步改变现状等等。 总之,这是一门崭新而富有挑战的学科,而且,随着网络的发展其前景也是非常乐观的,它需要各个领域的专家联合攻关共同努力才能取得理想的效果。同时,也希望自己能在这一领域有所作为 参考文献 1 朱丹丹.图像数字水印技术要析J .通化师范学院学报.-通化:2008 年 2月第 29 卷第 2 期:39 2 彭静.数字水印算法检测标准的研究J .电子科技

43、大学学报.-西安:2007年 6 月第 36 卷第 3 期:567 3 耿永军,朱雪芹.基于离散余弦变换的数字水印算法J .郑州大学学报.-郑州:2005 4 刘慧珍.变换域数字水印算法研究J .华侨大学硕士学位论文.-广州:2006:1617 5 庞小红.图像数字水印理论与技术研究.哈尔滨工程大学博士学位论文.-哈尔滨:2006:2930 6 曾满红.傅立叶明文水印及零水印算法的研究.燕山大学硕士学位论文.-北京:2005:1617 7 庞小红.图像数字水印理论与技术研究.哈尔滨工程大学博士学位论文.-哈尔滨:2006:34 8 Rafael C.Gonzalez,Richad E.Wood

44、s.数字图像处理(阮秋琦,阮宇智等译)M. -北京:电子工业出版社,2003 9 飞思科技产品研发中心.MATLAB 6.5 辅助图象处理M .-北京:电子工业出 版社,2003 附录 A(基于 DCT 域的数字水印算法程序) % 嵌入算法 % clear all; clc; % 读取水印图像 % omark=double(imread(muxiao.bmp)/255; mo=size(omark,1); no=size(omark,2); % 以下生成水印信息 % mark=omark; alpha=30; rand1=randn(1,8); rand2=randn(1,8); % 读取宿主

45、图像 % cimage=imread(lena.bmp); figure(1); subplot(2,3,1),imshow(cimage,),title(原始的宿主图像); mc,nc=size(cimage); cda0=blkproc(cimage,8,8,dct2); % 嵌入水印 % cda1=cda0; for i=1:mo for j=1:no x=(i-1)*8;y=(j-1)*8; if mark(i,j)=1 k=rand1; else k=rand2; end cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1); cda1(x+2,y+7)=cd

46、a0(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 % 嵌入水印后图象 % wimage=blkproc(c

47、da1,8,8,idct2); wimage_1=uint8(wimage); imwrite(wimage_1,withmark.bmp,bmp); subplot(2,3,2),imshow(wimage,),title(嵌入水印后图象); % 进行攻击测试 % disp(1-加入白噪声); disp(2-高斯低通滤波); disp(3-剪切图像); disp(4-旋转攻击); disp(5-直接检测) begin=input(请选择攻击(1-5):) switch begin % 加入白噪声 % case 1 Aimage1=wimage; Wnoise=20*randn(size(Ai

48、mage1); Aimage1=Aimage1+Wnoise; subplot(2,3,4),imshow(Aimage1,),title(加入白噪声后的图象); att=Aimage1; imwrite(att,whitenoiseimage.bmp); % 高斯低通滤波 % case 2 Aimage2=wimage; H=fspecial(gaussian,4,4,0.5); Aimage2=imfilter(Aimage2,H); subplot(2,3,4),imshow(Aimage2,),title(高斯低通滤波后的图象); att=Aimage2; imwrite(att,ga

49、ussianimage.bmp) % 剪切攻击 % case 3 Aimage3=wimage; Aimage3(1:128,1:128)=256; subplot(2,3,4),imshow(Aimage3,),title(剪切后的图象); att=Aimage3; imwrite(att,cutpartimage.bmp); % 旋转攻击 % case 4 Aimage4=wimage; Aimage4=imrotate(Aimage4,10,bilinear,crop); Aimage_4=mat2gray(Aimage4); subplot(2,3,4),imshow(Aimage_4

50、,),title(旋转 10 度后的图象); att=Aimage_4; imwrite(att,rotatedimage.bmp); % 没有受到攻击 % case 5 subplot(2,3,4),imshow(wimage,),title(直接提取的图像); att=wimage; imwrite(att,directimage.bmp); end % 提取水印 % tmark_0=att; tmark_0=blkproc(tmark_0,8,8,dct2); pass=zeros(1,8); for i=1:mo for j=1:no x=(i-1)*8;y=(j-1)*8; pass

51、(1)=tmark_0(x+1,y+8); pass(2)=tmark_0(x+2,y+7); pass(3)=tmark_0(x+3,y+6); pass(4)=tmark_0(x+4,y+5); pass(5)=tmark_0(x+5,y+4); pass(6)=tmark_0(x+6,y+3); pass(7)=tmark_0(x+7,y+2); pass(8)=tmark_0(x+8,y+1); if (corr2(pass,rand1)corr2(pass,rand2) tmark_1(i,j)=1; else tmark_1(i,j)=0; end end end % 计算 NC(

52、归一化相关系数)% g_mark=double(tmark_1); o_mark=double(omark); m,n=size(g_mark); nc_0=0; nc_1=0; nc_2=0; for i=1:m for j=1:n nc_0=nc_0+g_mark(i,j)*o_mark(i,j); nc_1=nc_1+o_mark(i,j)*o_mark(i,j); nc_2=nc_2+g_mark(i,j)*g_mark(i,j); end end NC=nc_0/sqrt(nc_1*nc_2); % 显示提取水印 % subplot(2,3,5),imshow(muxiao.bmp)

53、,title(原始水印图像); subplot(2,3,6),imshow(tmark_1,); name=提取得水印图像; title(strcat(num2str(name),NC=,num2str(NC); 附录 B(基于 FFT 域的数字水印算法程序) % % 嵌入水印算法 % clear all; clc; % 读取水印图象 % omark=double(imread(muxiao.bmp)/255; mo=size(omark,1); no=size(omark,2); % 以下生成水印信息 % mark=omark; alpha=200; R1=randn(1,8); rand1

54、=round(R1); R2=randn(1,8); rand2=round(R2); % 读取宿主图像 % cimage=imread(lena.bmp); figure(1); subplot(2,3,1),imshow(cimage,),title(原始的宿主图像); mc,nc=size(cimage); cimage=double(cimage); fft0=blkproc(cimage,8,8,fft2); % 嵌入水印 % fft_abs=abs(fft0); fft_angle=angle(fft0); fft1=fft_abs; for ii=1:mo for jj=1:no

55、 x=(ii-1)*8;y=(jj-1)*8; if mark(ii,jj)=1 k=rand1; else k=rand2; end fft1(x+1,y+8)=fft_abs(x+1,y+8)+alpha*k(1); fft1(x+2,y+7)=fft_abs(x+2,y+7)+alpha*k(2); fft1(x+3,y+6)=fft_abs(x+3,y+6)+alpha*k(3); fft1(x+4,y+5)=fft_abs(x+4,y+5)+alpha*k(4); fft1(x+5,y+4)=fft_abs(x+5,y+4)+alpha*k(5); fft1(x+6,y+3)=fft

56、_abs(x+6,y+3)+alpha*k(6); fft1(x+7,y+2)=fft_abs(x+7,y+2)+alpha*k(7); fft1(x+8,y+1)=fft_abs(x+8,y+1)+alpha*k(8); end end fft_abs_0=fft1; fft_abs_1=(fft_abs_0.*exp(i*fft_angle); wimage_0=blkproc(fft_abs_1,8,8,ifft2); wimage=abs(wimage_0); % 显示嵌入水印图象 % wimage_1=uint8(wimage); imwrite(wimage_1,withmark.

57、bmp,bmp); subplot(2,3,2),imshow(wimage,),title(嵌入水印后的图象); % 进行各种攻击 % disp(1-加入白噪声); disp(2-高斯低通滤波); disp(3-剪切图像); disp(4-旋转图象); disp(5-直接检测); begin=input(请选择攻击(1-5); switch begin %加入白噪声% case 1 Aimage1=wimage; Wnoise=12*randn(size(Aimage1); Aimage1=Aimage1+Wnoise; subplot(2,3,4),imshow(Aimage1,),tit

58、le(加入白噪声后的图象); att=Aimage1; imwrite(att,whitenoiseimage.bmp); % 高斯低通滤波 % case 2 Aimage2=wimage; H=fspecial(gaussian,4,4,0.6); Aimage2=imfilter(Aimage2,H); subplot(2,3,4),imshow(Aimage2,),title(高斯低通滤波后的图象); att=Aimage2; imwrite(att,gaussianimage.bmp) % 剪切攻击 % case 3 Aimage3=wimage; Aimage3(1:128,1:12

59、8)=256; subplot(2,3,4),imshow(Aimage3,),title(剪切后的图象); att=Aimage3; imwrite(att,cutpartimage.bmp); % 旋转攻击 % case 4 Aimage4=wimage; Aimage4=imrotate(Aimage4,10,bilinear,crop); Aimage_4=mat2gray(Aimage4); subplot(2,3,4),imshow(Aimage_4,),title(旋转 10 度后的图象); att=Aimage_4; imwrite(att,rotatedimage.bmp);

60、 % 没有受到攻击 % case 5 subplot(2,3,4),imshow(wimage,),title(直接提取的图象); att=wimage; imwrite(att,directimage.bmp); end % 提取水印 % tmark_0=att; tmark_0=blkproc(tmark_0,8,8,fft2); tmark_0=abs(tmark_0); pass=zeros(1,8); for ii=1:mo for jj=1:no x=(ii-1)*8;y=(jj-1)*8; pass(1)=tmark_0(x+1,y+8); pass(2)=tmark_0(x+2

61、,y+7); pass(3)=tmark_0(x+3,y+6); pass(4)=tmark_0(x+4,y+5); pass(5)=tmark_0(x+5,y+4); pass(6)=tmark_0(x+6,y+3); pass(7)=tmark_0(x+7,y+2); pass(8)=tmark_0(x+8,y+1); if (corr2(pass,rand1)corr2(pass,rand2) tmark_1(ii,jj)=1; else tmark_1(ii,jj)=0; end end end % 计算 NC(归一化相关系数)% g_mark=double(tmark_1); o_m

62、ark=double(omark); m,n=size(g_mark); nc_0=0; nc_1=0; nc_2=0; for ii=1:m for jj=1:n nc_0=nc_0+g_mark(ii,jj)*o_mark(ii,jj); nc_1=nc_1+o_mark(ii,jj)*o_mark(ii,jj); nc_2=nc_2+g_mark(ii,jj)*g_mark(ii,jj); end end NC=nc_0/sqrt(nc_1*nc_2); % 显示提取水印图象 % subplot(2,3,5),imshow(muxiao.bmp),title(原始水印图象); subplot(2,3,6),imshow(tmark_1,); name=提取的水印图像; name),NC=,num2str(NC); title(strcat(num2str(

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号