版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章绪论第二章数字水印基本原理2.1概述对数字水印(DigitalWatermarking)技术来说,载体对象通常是数字产品,是版权保护对象,而所嵌入的信息则是与该产品相关的版权标志、购买者或者其他相关信息。其是将一些标识信息(即数字水印)直接嵌入数字载体当中(包括多媒体、文档、软件等)或是间接表示(修改特定区域的结构),不影响原载体的使用价值,也不容易被探知和再次修改,但可以被生产方识别和辨认。通过这些隐藏在载体中的信息,可以达到确认内容创建者、购买者、传送隐秘信息或者判断载体是否被篡改等目的。2.2数字水印的特点作为数字水印技术基本上具有下面几个方面的特点:1、安全性:表现为水印能够抵抗恶意攻击的能力。数字水印的信息应是安全的,难以篡改或伪造,同时,应当有较低的误检测率,当原内容发生变化时,数字水印应当发生变化,从而可以检测原始数据的变更;当然数字水印同样对重复添加有较强的抵抗性2、隐蔽性:数字水印应是不可知觉的,而且应不影响被保护数据的正常使用;不会降质;3、鲁棒性:是指在经过常规信号处理后,数字水印仍能保持部分完整性并能被准确鉴别。可能的信号处理过程包括信道噪声、滤波、数/模与模/数转换、重采样、剪切、位移、尺度变化以及有损压缩编码等。主要用于版权保护的数字水印易损水印(FragileWatermarking),这种水印是在内容数据中嵌入不可见的信息。当内容发生改变时,这些水印信息会相应地发生改变,从而可以鉴定原始数据是否被篡改。4、水印容量:是指载体在不发生形变的前提下可嵌入的水印信息量。嵌入的水印信息必须足以表示多媒体内容的创建者或所有者的标志信息,或购买者的序列号,这样有利于解决版权纠纷,保护数字产权合法拥有者的利益。尤其是隐蔽通信领域的特殊性,对水印的容量需求很大[11]。2.3数字水印的基本原理2.3.1数字水印系统的基本框架粗略来看,数字水印系统包含嵌入器和检测器两大部分。嵌入器至少具有两个输入量:一个是原始信息,它通过适当变换后作为待嵌入水印信号;另一个就是要在其中嵌入水印的载体作品。水印嵌入器输出结果为含水印的载体作品,通常用于传输和转录。之后这件作品或另一件未经过这个嵌入器的作品可以作为水印检测器的输入量。具体如图2-1所示:图2-1数字水印处理系统基本框架通用的水印技术包含两个方面:水印的嵌入和水印的提取、检测,如图2-2和图2-3所示。水印信息水印信息原始数据密钥水印嵌入算法含水印产品图2-2水印信号嵌入水印载体水印载体原始数据密钥水印提取算法水印提取或检测图2-3水印信号提取或检测2.4数字水印的几种主要算法对于水印嵌入和提取技术,纵观近几年来相关的报道和文献,从整体框架构思到具体实现细节,可以说是百花齐放,设计思想往往取决于研究人员的研究背景和入手角度。一般来讲,主要包括以下几个方面:1、空间域水印L.F.Turner与R.G.vanSchyndel等人的空间域水印算法是最低有效位算法(LSB)与改进算法。由于该算法是通过调整原始数据的最低几位来隐藏信息,使一般用户对于隐藏信息,在视觉上很难察觉。虽然其有较大的信息嵌入量,但作为数字水印算法,因其基本原理限制,所隐藏的数字水印信息是极为脆弱的,无法经受一些有损的信号处理。Bander等人提出的基于统计的数字水印方案(Patchwork)和纹理块映射编码方法则是空间域水印技术的典型设计。Patchwork任意选择N对图像点,增加其一点的亮度的同时,相应降低另一点的亮度值。通过这一调整过程完成水印的嵌入。该算法具有不易察觉性,并且对于有损压缩编码(JPEG)和一些恶意攻击处理等具有抵抗力。纹理块映射编码方法则是将数字信息隐藏于数字图像的任意纹理部分,其将隐藏信息纹理映射到另一纹理相似的区域。该算法对于滤波、压缩和扭转等操作具有抵抗力,但仅适于具有大量任意纹理区域的图像。Pitas和Kaskalis利用“Patchwork”算法的基本原理,提出了数字图像签名的思想。这种算法可以有效抵抗二次采样攻击与JPEG压缩。2、变换域算法基于变换域的技术可以嵌入大量比特数据而不会导致可察觉的缺陷,往往采用类似扩频图像的技术来隐藏数字水印信息。这类技术一般基于常用的图像变换,基于局部或是全部的变换,这些变换包括离散余弦变换(discreteconsinetransform,DCT)、小波变换(discretewavelettransform,DWT)、傅氏变换(fouriertransform,FT)以及哈达马变换(Hadamardtransform)等等。其中基于分块的DCT是最常用的变换之一,现在所采用的静止图像压缩标准JPEG也是基于分块DCT的。最早的基于分块DCT的一种数字水印技术方案是由一个密钥随机地选择图像的一些分块,在频域的中频上稍稍改变一个三元组以隐藏二进制序列信息。选择在中频分量编码是因为在高频编码易于被各种信号处理方法所破坏,而在低频编码则由于人的视觉对低频分量很敏感,对低频分量的改变易于被察觉。该数字水印算法对有损压缩和低通滤波是稳健的。另一种DCT数字水印算法是首先把图像分成8×8的不重叠像块,在经过分块DCT变换后,即得到由DCT系数组成的频率块,然后随机选取一些频率块,将水印信号嵌入到由密钥控制选择的一些DCT系数中。该算法是通过对选定的DCT系数进行微小变换以满足特定的关系,以此来表示一个比特的信息。在水印信息提取时,则选取相同的DCT系数,并根据系数之间的关系抽取比特信息。除了上述有代表性的变换域算法外,还有一些变换域数字水印方法,它们当中有相当一部分都是上述算法的改进及发展,这其中有代表性的算法是I.Podichuk和ZengWen-jun提出的算法。他们的方法是基于静止图像的DCT变换或小波变换,研究视觉模型模块返回数字水印应加载在何处及每处可承受的JND(JustNoticeableDifference恰好可察觉差别)的量值(加载数字水印的强度上限),这种水印算法是自适应的。3、压缩域算法基于JPEG、MPEG标准的压缩域数字水印系统不仅节省了大量的完全解码和重新编码过程,而且在数字电视广播及VOD(VideoOilDemand)中有很大的实用价值。相应地,水印检测与提取也可直接在压缩域数据中进行。Hartung提出了一种针对MPEG-2压缩视频数据流的数字水印案。虽然MPEG-2数据流语法允许把用户数据加到数据流中,但是这种方案并不适合数字水印技术,因为用户数据可以简单地从数据流中去掉,同时在MPEG-2编码视频数据流中增加用户数据会加大位率,使之不适于固定带宽的应用,所以关键是如何把水印信号加到数据信号中,即加入到表示视频帧的数据流中。对于输入的MPEG-2数据流而言,它可分为数据头信息、运动向量(用于运动补偿)和DCT编码信号块3部分,在Hartung方案中,只有MPEG-2数据流最后一部分数据被改变,其原理是,首先对DCT编码数据块中每一输入的Huffman码进行解码和逆量化,以得到当前数据块的一个DCT系数;其次,把相应水印信号块的变换系数与之相加,从而得到水印叠加的DCT系数,再重新进行量化和Huffman编码,最后对新的Huffman码字的位数n,与原来的无水印系数的码字n0进行比较,只在n1不大于n0的时候,才能传输水印码字,否则传输原码字,这就保证了不增加视频数据流位率。该方案有一个问题值得考虑,即引入的水印信号是一种引起降质的误差信号,而基于运动补偿的编码方案会将一个误差扩散和累积起来,为解决此问题,该算法采取了漂移补偿的方案来抵消因水印信号的引入所引起的视觉变形。4、NEC算法该算法由NEC实验室的Cox等人提出,该算法在数字水印算法中占有重要地位,其实现方法是,首先以密钥为种子来产生伪随机序列,该序列具有高斯N(0,1)分布,密钥一般由作者的标识码和图像的哈希值组成,其次对图像做DCT变换,最后用伪随机高斯序列来调制(叠加)该图像除直流分量外的1000个最大的DCT系数。该算法具有较强的鲁棒性、安全性、透明性等。由于采用特殊的密钥,故可防止IBM攻击,而且该算法还提出了增强水印鲁棒性和抗攻击算法的重要原则,即水印信号应该嵌人源数据中对人感觉最重要的部分,这种水印信号由独立同分布随机实数序列构成,且该实数序列应具有高斯分布N(0,1)的特征。随后Podilchuk等利用人类视觉模型又对该算法进行了改进,从而提高了该算法的鲁棒性、透明性等。5、生理模型算法人的生理模型包括人类视觉系统HVS和人类听觉系统HAS。该模型不仅被多媒体数据压缩系统利用,同样可以供数字水印系统利用。它们的基本思想均是利用从视觉模型导出的JND描述来确定在图像的各个部分所能容忍的数字水印信号的最大强度,从而能避免破坏视觉质量,也就是说,利用视觉模型来确定与图像相关的调制掩模,然后再利用其来插人水印。这一方法同时具有好的透明性和鲁棒性。2.5数字水印的分类1、按特性划分按水印的特性可以将数字水印分为鲁棒性数字水印和易损性数字水印两类。鲁棒性数字水印主要用于在数字作品中标识著作权信息,利用这种水印技术在多媒体内容的数据中嵌入创建者、所有者的标示信息,或者嵌入购买者的标示(即序列号)。在发生版权纠纷时,创建者或所有者的信息用于标示数据的版权所有者,而序列号用于追踪违反协议而为盗版提供多媒体数据的用户。用于版权保护的数字水印要求有很强的鲁棒性和安全性,除了要求在一般图像处理(如:滤波、加噪声、替换、压缩等)中生存外,还需能抵抗一些恶意攻击。易损性水印,与鲁棒水印的要求相反,易损数字水印主要用于完整性保护,这种水印同样是在内容数据中嵌入不可见的信息。当内容发生改变时,这些水印信息会发生相应的改变,从而可以鉴定原始数据是否被篡改。易损水印应对一般图像处理(如:滤波、加噪声、替换、压缩等)有较强的免疫能力(鲁棒性),同时又要求有较强的敏感性,即:既允许一定程度的失真,又要能将失真情况探测出来。必须对信号的改动很敏感,人们根据易损水印的状态就可以判断数据是否被篡改过。2、按水印所附载的媒体划分按水印所附载的媒体,我们可以将数字水印划分为图像水印、音频水印、视频水印、文本水印以及用于三维网格模型的网格水印等。随着数字技术的发展,会有更多种类的数字媒体出现,同时也会产生相应的水印技术。3、按检测过程划分按水印的检测过程可以将数字水印划分为明文水印和盲水印。明文水印在检测过程中需要原始数据,而盲水印的检测只需要密钥,不需要原始数据。一般来说,明文水印的鲁棒性比较强,但其应用受到存储成本的限制。目前学术界研究的数字水印大多数是盲水印。4、按内容划分按数字水印的内容可以将水印划分为有意义水印和无意义水印。有意义水印是指水印本身也是某个数字图像(如商标图像)或数字音频片段的编码;无意义水印则只对应于一个序列号。有意义水印的优势在于,如果由于受到攻击或其他原因致使解码后的水印破损,人们仍然可以通过视觉观察确认是否有水印。但对于无意义水印来说,如果解码后的水印序列有若干码元错误,则只能通过统计决策来确定信号中是否含有水印。5、按水印隐藏的位置划分按数字水印的隐藏位置,我们可以将其划分为时(空)域数字水印、频域数字水印、时/频域数字水印和时间/尺度域数字水印。时(空)域数字水印是直接在信号空间上叠加水印信息,而频域数字水印、时/频域数字水印和时间/尺度域数字水印则分别是在DCT变换域、时/频变换域和小波变换域上隐藏水印。随着数字水印技术的发展,各种水印算法层出不穷,水印的隐藏位置也不再局限于上述四种。应该说,只要构成一种信号变换,就有可能在其变换空间上隐藏水印。第三章数字水印的关键技术3.1公钥密码算法——RSA1976年Diffle和Hellman发表了“密码学的新方向”一文,提出了公钥密码算法。它不仅使对称密码的密钥分发困难得到有效解决,而且可用于数字水印,为网络时代的信息安全提供新的理论和技术基础。公钥加密体制系统如图3-1所示:图3-1公钥密码系统本系统运用基于数论的互素数、指数模和模逆元计算的\o"RSA算法"RSA算法。大数的因子的分解是RSA的安全性的保证,但同时并没有从\o"理论"理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解而不是NPC问题。任何算法都有其自身的缺陷,RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)其速度较慢。由于RSA算法涉及大数的高次幂模运算,计算量很大。这种算法出现于1978年,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:RonRivest,AdiShamir和LeonardAdleman。但RSA的安全性一直未能得到理论上的证明。
RSA的安全性依赖于大数分解。公钥和\o"私钥"私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
为了计算两个密钥,给定两个大素数,p和q,并计算。计算:
n=p*q、r=(p-1)*(q-1)然后随机选择加密密钥e,要求e和r互质,即互素数。再然后,利用欧几里得(Euclid)扩展算法计算解密密钥d,它满足
e*d=1(modr)
其中,e即为公钥,d即为私钥。e和n是公开的,p和q在加解密过程中不再需要,但绝不能泄露,应该丢弃。给定\o"加密信息"加密信息(明文)
m(二进制表示)时,首先把m分成等长数据块m1,m2,...,mi,块长s,其中s应小于n的位数,对应的加密密文是:
ci=mi^e(modn) (3-1)得到相应的密文块,加密后的密文m由相同长度的密文块ci组成。解密时作如下计算:
mi=ci^d(modn) (3-2)
RSA可用于数字签名时,签名是用(3-1)式,验证使用(3-2)式。具体操作时考虑到安全性和m信息量较大等因素,一般是先作HASH运算。
破译者要解密,就要根据已知的e和n,计算d。而要计算d,应知道r,因而必须知道p和q。但是,如果n是一个600位的大整数,如何能在有生之年将它分解为两个素数因子呢,据研究,目前最快的计算机也无法做到。这就是
RSA的安全所性依赖的。但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因应就具体适用情况而定。
3.2数字图像置乱技术置乱技术是随着信息的安全和保密被重视而发展起来的图像加密技术。它可以看作是从经典密码学中的单表系统扩展而来的。数字图像置乱即是一种加密方法,合法使用者可以自由控制算法的选择,参数的选择以及使用随机数技术,达到非法使用者无法破译图像内容的目的[12]。3.2.1数字图像置乱技术的基本概念经典密码学对于一维数据流提供了很好的加解密算法,其中如DES、RSA等著名密码系统得到了广泛的应用,但是这些系统往往忽视数字图像的一些特殊性质如二维的自相似性、大数据量等。图像置乱技术早期是对模拟图像的位置空间做置换,可以看作从经典密码学中的单表系统扩展而来。对于数字化的图像,置乱过程不仅可以在数字图像的空域(色彩空间、位置空间)上进行,还可以在数字图像的频域上进行。数字图像置乱即是对数字图像的一种加密方法,它使得合法使用者可以自由控制算法的选择、参数的选择以及使用随机数技术,这就给攻击者带来非法破译的难度,主要表现在统计分析各种可能的组合的巨大计算量。此外,近年兴起的信息隐藏以及数字水印技术,从不同角度对数字图像的隐藏与伪装、著作权保护等问题提出了一些解决方法,本文提出的数字水印算法把图像置乱技术和水印技术结合起来,通过产生置乱算法和水印算法的密钥来保护水印原始数据和跟踪产品的流动等。数字图像的置乱变换就是一种可逆变换,通过对数字图像的位置或灰度级等做变换,来“扰乱”图像,以达到在一定程度上迷惑第三者的目的。如果不知道所使用的置乱变换算法,很难恢复出原始图像。置乱算法置乱算法图3-1原始图像和置乱后的图像图3-1给出了一个通过象素置乱算法得到的置乱图像和原始图像的比较。3.2.2最佳置乱度文献[6]提出了最佳置乱度的定义,通过计算置乱度判断图像置乱的程度。图像中的任意两个像素的距离可以用公式表示如下: (3-3)式中(xi,yi),(xj.yj)分别表示像素的空间坐标值,如果将图像以矩阵形式表示,相当于矩阵元素的行和列的值。某—矩阵元素和它相邻的元素之间的距离称为一阶距离,用Dl(i,j)表示,将某一矩阵元素和它相距一个元素的元素之间的距离称为二阶距离,用D2(i,j)表示,同理相距n个元素的元素之间的距离称为n阶距离、用Dn(i,j)表示。定义1:一阶置乱度是图像I中所有像素的一阶距离的均值和方差之比,用公式表示如下: (3-4)从公式3-4可以看出,一阶距离的均值比较大表示置乱后相邻像素之间的距离变大了.也即相邻像素被分散了,—阶距离的方差比较小表示距离变化程度比较集中,所以二者的比值越大表示置乱度越大,即原来完整的图像的像素被均匀地打散的程度越大。直观地看,置乱度大表示一幅图像中原先空间距离小的像素对之间的距离变大了。因为一阶置乱度只定义了原来相邻像素对之间的距离变化,还不足以十分精确地描绘置乱程度,为此将一阶置乱度的公式推广,引出n阶置乱度的计算公式。(3-5)公式3-5中通过引入一个加权系数ak来体现不同阶距离在置乱度中所起的作用,即首先考虑将相距最近的像素对尽量分散开,然后再考虑其它距离较大的像素对[12]。3.2.3Arnold变换Arnold变换是在Arnold遍历理论研究中提出的一种变换,俗称描脸变换。定义2设有单位正方形上的点(x,y),将点(x,y)变到另一点的变换为:此变换称作猫变换。公式3-6定义的变换实际上是一种点的位置移动,该变换是一一对应的,且具有周期性。此外,这种变换可以迭代地做下去。需要注意的是,Arnold变换具有周期性,即当迭代到某一步时,将从新得到原始图像。Dyson和Falk分析了离散Arnold变换的周期性,给出了对于任意,Arnold变换的周期,这也许是迄今最好的结果了。3.2.4基于Arnold变换的数字图像位置置乱对于数字化图像而言,我们所说的位置移动实际上是对应点的灰度值或者RGB颜色值的移动,即将原来点处象素对应的灰度值或RGB颜色值移动至变换后的点处。如果我们对一个数字图像迭代地使用离散化的Arnold变换,即将左端输出的作为下一次Arnold变换的输入,可以重复这个过程一直作下去,当迭代到某一步时,如果出现的图像符合我们对图像的“杂乱无章”标准的要求,这即是一副置乱了的图像。图3-2即是经Arnold变换置乱后的图像,我们可以看到对图像只需进行几次Arnold变换迭代,原图像就已经杂乱无章了,置乱效果非常好。 (a)原始图像 (b)一次Arnold变换后的图像 (c)三次Arnold变换后的图像 (d)五次Arnold变换后的图像图3-2Arnold变换置乱3.3DCT域数字水印3.3.1DCT变换概述离散余弦变换是数字图像处理以及信号处理常用的一种正交变换,具有压缩比高、误码率小、信息集中能力和计算复杂性综合效果较好等优点,是图像编码的核心技术之一[13,14]。二维离散DCT变换及IDCT反变换公式如下:(3-7)DCT逆变换(3-8)图像二维DCT变换(N取8或16)有许多优点:图像信号经过变换后,变换系数几乎不相关,经过反变换重构图象信道误差和量化误差将像随机噪声一样分散到块中的各个像素中去,不会造成误差累积,并且变换能将数据块中的能量压缩到为数不多的部分低频系数中去(即DCT矩阵的左上角)。对于给定图像存在两种DCT变换方法:一种是把图像看成一个二维矩阵直接对其进行DCT变换,然后嵌入水印,Cox采用此种方法;另一种方法是与JPEG压缩标准相统一,先把图像分成8×8的不同小块,再分别对每一块进行DCT变换,进而嵌入水印。3.3.2DCT数字图像水印基本特点不同的应用对数字水印的要求不尽相同,一般认为数字水印应具有如下特点:1、透明性:对于以模拟方式存储和分发的信息(如电视节目),或是以物理形式存储的信息(如报刊、杂志),用可见的标志就足以表明其所有权。但在数字方式下,标志信息极易被修改或擦除。因此应根据多媒体信息的类型和几何特性,利用用户提供的密钥将水印隐藏到一系列随机产生的位置中,使人无法察觉。2、鲁棒性:水印必须对一般的信号处理操作(如滤波、平滑、增强和有失真压缩等)、删除攻击和迷惑攻击等具有鲁棒性。除非对数字水印具有足够的先验知识,任何破坏和消除水印的企图都将严重破坏多媒体信息的质量。3、不可检测性:包括两方面的含义:(1)水印信息与原始载体数据具有一致的特性,使攻击者无法通过信息分析手段判断多媒体数据中是否存在水印;(2)水印信息本身具有不可统计性,避免攻击者通过统计多个多媒体数据进而分析存在的相似性来进行攻击。4、安全性:指水印嵌入算法具有较强的抵抗攻击的能力,能够承受一定程度的人为攻击而使水印不会被破坏。5、自恢复性:经过一些操作或者变换之后,可能会使原始载体数据产生较大的破坏,如果从留下的片断数据能够恢复信号,就是所谓的自恢复性。3.3.3DCT数字图像水印基本特点3.4数字水印的模式识别3.4.1、模式识别的基本概念模式识别就是机器识别,计算机识别或机器自动识别,目的在于让机器自动识别事物。3.4.2、数字水印的检测方法:基于假设检验的水印检测设要检验的作品x属于一下两种情况之一:H0: x=x’H1: x=x’+w 即假设H0假定接收到的作品x中没有水印,称之为零假设。假设H1假定接收到的作品x中嵌入水印w,称之为备择假设。满足假设H0的作品全体组成集合R0,满足假设H1的作品全体组成集合R1。假设检验的方法,顾名思义,就是利用接受到的载体作品对假设进行检验,从而判断假设检验是否成立。本章研究了实现的数字水印系统中用到的一些关键技术和对其中一小点的扩展,在学习和研究这些技术的同时,也为本文后续的工作做了充足的基础准备,在后期实现的过程中,也更深入的了解了这些技术,并做了自己的优化。第四章一种优化的数字水印系统的实现4.1数字水印系统说明本文提出了一种优化的数字水印算法,及基于系数关系的DCT域数字图像水印算法。在嵌入的过程中,优化嵌入内容,提高原图片的不可见性;在提取过程中,优化提取判定条件,提高水印图片的鲁棒性。算法作用域在DCT变换后的中频域内,通过算法的处理在DCT系数里嵌入二值水印,系统能够支持彩色和灰度两种格式的BMP图像文件,并实现数字图像的隐藏,且水印的提取完全是盲提取,不需要原始图像,具有较强的安全性和鲁棒性。4.2数字水印系统优化设计普通数字水印系统仅仅包含对图像的嵌入以及提取,用户数字水印系统分为6个模块,分别为用户身份验证模块、采集图像等数据载体和预处理模块、数字水印嵌入模块、数字水印检测模块、水印提取以及水印测试模块。充分分析用户的需求,弥补了当下系统人机操作不协调的缺陷。4.2.1用户身份验证首先用户只有获得授权方能进入系统,其次对已授权的用户的身份加以验证和加密保护。不仅保证了用户的信息安全,而且可以实现用户的分配。图4-1用户身份验证用例图4.2.2采集图像与预处理系统支持数据载体的采集,查看,收藏,预处理等基本操作,优化当前系统用户对初始图片的采集,修改的缺陷。图4-2预处理用例图4.2.3数字水印的生成系统提供用户生成自定义水印信息的功能,方便用户添加自己的个人信息或者是版权信息。用户可通过简单的操作,实现自己的水印,而不需借助其他图像处理工具。图4-3水印生成用例图4.2.4数字水印的嵌入通过水印嵌入算法,实现将水印信息与载体数据的融合,形成水印载体数据。图4-4水印嵌入用例图4.2.5数字水印提取对给定的图像进行水印的提取,采用盲检测技术,有水印则提取出水印,无则提取为空。实现将水印信息与载体信息分离,水印信息的可视化,可操作话。图4-5水印提取用例图4.2.6数字水印鲁棒性检测多角度,多方面对数字水印进行测试,通过各类有意或无意的修改,结合预处理的操作,对载体图像的亮度,大小,对比度进行修改,然后再提取。测试提取结果与原图片之间的差异。图4-6水印检测用例图4.3数字水印系统优化算法本系统核心是离散预先变换(DCT),运用基于实数的正交变换,实现图像的“能量集中”特性。但同时不局限于此,在原理论的基础上,优化改善DCT矩阵的生成、DCT中频的确定、DCT系数的替换、统计均值比较算法规则等多个方面。提高水印系统的不可见性和鲁棒性等基本要求,不可见性就是在载体图像中嵌入水印图像后不能被人的视觉系统觉察或注意到,而鲁棒性就是能够从嵌入水印后的载体图像中提取出尽可能完整的水印图像,而不因图像数据的某种改动而导致水印信息丢失。由于人类视觉系统对图像频域空间的中低频信息不敏感,所以,本文将水印图像的中低频DCT系数隐藏到载体图像的中频DCT系数中。为了提高水印的鲁棒性,先对载体图像分割成8*8的像素块,然后将水印图像分别嵌入到每一块当中;提取时从带水印图像的每一块中提取出水印图像,再计算这些水印图像的平均值从而得到最终的水印图像。对于彩色图像的B分量即蓝色分量按照这种方法进行。4.3.1数字水印采集及预处理1、C#语言及其窗体程序,良好的用户体验目前的水印系统多以matlab为基础,调用其自身所含图像类,进行数字水印的研究与系统实现。本系统采用微软框架,以C#语言为基础,完成优秀的界面设计,提高用户体验感受和操作舒适度。2、bitmap类和BitmapData类图像处理类微软C#语言框架对于图像处理提供bitmap类,BitmapData类两大主要类,可方便实现图像的二值化存储,以及图像数据调入内存操作,并提供Scan0属性获取位图中第一个像素数据的地址,方便对图像的数据进行定位和扫描。是图像处理中公认的较为方便的类。对图像亮度调节主要代码如下:BitmapDatadata=b.LockBits(newRectangle(0,0,width,height),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);unsafe{byte*p=(byte*)data.Scan0;intoffset=data.Stride-width*3;for(inty=0;y<height;y++){for(intx=0;x<width;x++){for(inti=0;i<3;i++){pix=p[i]+degree;if(degree<0)p[i]=(byte)Math.Max(0,pix);if(degree>0)p[i]=(byte)Math.Min(255,pix);}//ip+=3;}//xp+=offset;}//y}b.UnlockBits(data);returnb;}catch{returnnull;} 4.3.2水印图片生成算法首先确定水印图像的背景,可由系统自动默认选择或由用户提供,然后对文字和图像进行嵌入,生成水印图片。具体步骤如下:(1)确定水印图像的默认图片。(2)添加文字信息和图片信息,并选择插入的位置。(3)进行文字和图片的嵌入。主要图片生成算法:privateImageGetTextWatermark(stringtext){Brushbrush=newSolidBrush(m_fontColor);SizeFsize;using(Graphicsg=Graphics.FromImage(m_image)){size=g.MeasureString(text,m_font);}Bitmapbitmap=newBitmap((int)size.Width,(int)size.Height);bitmap.SetResolution(m_image.HorizontalResolution,m_image.VerticalResolution);using(Graphicsg=Graphics.FromImage(bitmap)){g.DrawString(text,m_font,brush,0,0);}returnbitmap;}4.3.3数字水印嵌入算法水印的嵌入分五大步进行,概括而言,首先对源图像进行分块处理,而后进行DCT变换,通过矩阵乘法得到新的DCT系数矩阵,接着使用Zig-Zag数组对各块DCT系数进行扫描,使其按Zig-Zag数组的顺序排列,之后用水印图像数据替换符合条件的DCT系数,从而保证了嵌入水印后的图像的不可见性和一定的鲁棒性。水印嵌入步骤如下:(1)将给定的原始图像进行分块,并对每一块进行DCT操作。(2)使用猫脸置乱对给定的二值水印图像进行置乱操作,,置乱次数由用户输入,然后进行二值序列化,将二维图像数据转化为一维序列W={wc},其中c=1,2,3…,C,C=W*H,方法为: 判断像素像素平均值,如果像素平均值大于128,则为1,否则为0(3)在各个DCT分块中,将上一步生成的二值水印序列嵌入进去,方法为: 采用Zig-Zag进行排序,对每个DCT块数据进行重新分配,然后从第15个系数开始选取16个系数即:Di(j),j=15,16…30,并做替换操作,每替换完一个二值序列的值就操作下一个DCT块。替换方法为:如果wc=1,则Di’(j)=max(Di),否则Di’(j)=min(Di)。 (4)对图像进行逆离散余弦(IDCT)操作,还原图像,即得到嵌入水印之后的图像。 (5)对于原始图像和嵌入后的图像之间的差异程度,本文采用PSNR来客观的评价,从而评价此水印算法的性能,计算公式为:4-1主要嵌入算法的代码如下:///<summary>///DCT公式///DCT变换的具体算法///产生DCT的余弦矩阵///</summary>///<paramname="order">维数个数</param>///<returns>DCT的余弦矩阵</returns>publicdouble[,]GenerateDCTmatrix(intN){inti,j;intSize;Size=N;doublealpha;//系数doublefenMu;double[,]DCTCoeff=newdouble[Size,Size];for(j=0;j<=Size-1;j++){DCTCoeff[0,j]=Math.Sqrt(1/(double)Size);}alpha=Math.Sqrt(2/(double)Size);//C(u)fenMu=(double)2*Size;for(j=0;j<=Size-1;j++)for(i=1;i<=Size-1;i++){DCTCoeff[i,j]=alpha*Math.Cos(((2*j+1)*i*3.14159)/fenMu);}return(DCTCoeff);}///<summary>///分块DCT变换///</summary>///<paramname="imgSource">图像图片</param>///<returns>返回一个color对象的二维数组</returns>publicvoidDCTBlocksTrans(){double[,]temp=newdouble[8,8];double[][,]BlockDCTkernel=newdouble[3][,];for(intk=0;k<3;k++)BlockDCTkernel[k]=newdouble[8,8];for(inti=0;i<blocks.H;i++){for(intj=0;j<blocks.W;j++){for(intl=0;l<3;l++){//思想先得到对应DCT矩阵BlockDCTkernel[l]=GenerateDCTmatrix(Order);//将DCT矩阵与图像矩阵相乘?temp=multiply(BlockDCTkernel[l],blocks.Blocks[i,j].array[l]);//将相乘矩阵与DCT矩阵的转置矩阵相乘的矩阵返回给图像的颜色DCTblocks.Blocks[i,j].ColorDCT[l]=multiply(temp,Transpose(BlockDCTkernel[l]));}}}return;}4.3.4数字水印提取算法本系统采用盲水印提取的方式,水印提取不需要原始水印图像,初始操作与水印嵌入相同,也是先进行分块处理,而后进行DCT域变换,再对各块系数进行Zig-Zag扫描,然后对指定位置系数进行判断,从而得出水印图像。具体如下:(1)对于嵌入水印后的图像进行分块处理和DCT变换,对各块系数进行Zig-Zag扫描,而后从第15个系数位置开始进行提取,DCT系数判决条件如下:如果Di’’(j)>=avg(Di’’),则wc=1,否则wc=0。(2) 对于提取到的二值序列进行反置乱,置乱次数由用户输入,即得到水印图像。(3)为了衡量提取出的水印和原始水印之间的相似度,本文采用归一化相似度计算公式来评价水印算法的性能,计算公式为:4-2主要的提取代码如下://二值水印的提取publicvoidExtractMain(){doublemax;doublemin;doubleavg;intindex=Position;double[]Src_Zig;intcount=0;for(inti=0;i<waterImg_One.Length;i+=blocks.W*blocks.H){for(intj=0;j<blocks.H;j++){for(intk=0;k<blocks.W;k++){if(count<waterImg_One.Length){Src_Zig=ZigZagSort(blocks.Blocks[j,k].ColorDCT[0]);avg=getDCTBlockAVG(Src_Zig);if(Src_Zig[index]>=avg){waterImg_One[count++]=1;}else{waterImg_One[count++]=0;}blocks.Blocks[j,k].ColorDCT[0]=IZigZagSort(Src_Zig);}}}index++;}}///<summary>///重组水印数组///</summary>///<paramname=""></param>///<returns>水印图像</returns>publicBitmapgenWaterMark(){BitmapnewPic=newBitmap(WaterMarkHeight,WaterMarkWidth);inttmp=0;intcount=0;for(inti=0;i<WaterMarkHeight;i++){for(intj=0;j<WaterMarkWidth;j++){tmp=waterImg_One[count++];if(tmp==1){newPic.SetPixel(j,i,Color.FromArgb(255,255,255));}else{newPic.SetPixel(j,i,Color.FromArgb(0,0,0));}}}returnnewPic;}4.3.5数字水印核心算法类图系统的大体框架使用C#窗体应用,代码集成在窗体类中,但为便于后期维护和管理,将水印操作的核心类统一设计在一起。并以功能开,如图4-7所示:1,Block类,用于存储图像每块的内容,包含构造函数用于初始化;2,DCTBlocks类,用于对源图像数据的存储,包含Block类数组,记录每块的信息,其中H字段是图像的高度,W字段是图像的宽度,同时也包含构造函数用于初始化数据。3,ArnoldTransport类,数字水印算法的辅助类,用于对水印图片进行加密,采用Arnold置乱算法,将水印数组循环赋值后,生成杂乱的数组。其中times字段记录置乱的次数,而方法包含Arnold和Reverse_Arnold分别是将水印置乱与恢复的逆置乱。4,DCTTransform类,用于最核心的水印嵌入、提取、评测。其中包含zig-zag数组、分块大小等字段。waterMarkEmbed方法为嵌入的主方法,waterMarkExtract发放为提取的总方法,GenerateDCTmatrix方法则用来生成DCT余弦矩阵系数;multiply方法为两个矩阵相乘的算法实现,Transpose方法则是生成给定矩阵的转置矩阵。图4-7数字水印核心算法类图4.4系统程序运行展示4.4.1用户身份的认证窗体在程序运行之后,首先要进行用户身份的验证,即要求输入用户密码,方可进入系统,如图4-9所示:图4-9输入用户密码4.4.2采集图像等数据载体和预处理窗体在用户输入了正确的密码之后进入程序主界面,页面提供打开,选择,预览等操作,如图4-10所示:图4-10程序主界面4.4.3数字水印的生成窗体本系统提供水印的制作,自定义添加机密内容,内容格式分图片与文字两种,还可自定义选择显示位置。界面如图4-11所示:图4-11水印生成主界面4.4.4数字水印的嵌入窗体在水印的嵌入和提取之前,都要求输入置乱次数,界面如图4-12所示:图4-12输入置乱次数水印嵌入完成之后主界面将同时显示原始图片、二值水印图片以及嵌入水印之后的图片,如图4-13所示:图4-13嵌入水印主界面4.4.4数字水印提取窗体水印的提取时,需先打开已嵌入水印的图片,再输入置乱次数,点击提取水印之后,即得到二值水印,如图4-14所示:图4-14提取水印4.5系统性能测试系统进行测试时,使用图像处理中经典的灰度图像lena(如图a)和彩色图像lena(如图b)做仿真实验,两幅图像大小均为512*512;而水印图像是一幅128*128的二值图像,如图4-15(c)所示。(a)灰度图片(b)彩色图片(c)二值水印图4-15原始图片和水印图片4.4.1正常未受攻击情况嵌入水印后的灰度和彩色图像和未受到攻击情况下提取的水印分别如图4-16、4-17所示。从图像的视觉角度来看,图像的嵌入对图像的改变并不明显,肉眼根本无法观察。(a)嵌入水印的图像(b)提取的水印图像图4-16嵌入后的图像和提取的水印图像嵌入水印后的图像的峰值信噪比PSNR=67.54db,提取的水印的相似度NC=0.9991。(a)嵌入水印的图像(b)提取的水印图像图4-17嵌入后的图像和提取的水印图像嵌入水印后图像的峰值信噪比PSNR=68.69db,提取的水印的相似度NC=0.9997。4.4.2非正常受攻击情况系统进行的攻击主要包含对嵌入了水印的图片进行亮度、对比度的调节;图像发生裁减以及污染的情况等。系统设计要求在此种条件下还能保证提取出的水印图片保持一定的可辨度。受攻击的图像如图4-18、4-19、4-20所示。PSNR=35.39dbPSNR=63.51db(a)亮度变高(b)对比度变高图4-18嵌入水印的图像受到亮度、对比度攻击PSNR=56.39dbPSNR=57.51db(a)中间块剪裁(b)剪裁四份之一角图4-19嵌入水印的图像受到裁减攻击PSNR=61.15dbPSNR=63.28db(a)涂抹杂质(b)涂抹杂质图4-20嵌入水印的图像受到污染对于图4-18攻击之后,提取出的水印图像如图4-21所示。NC=0.7003NC=0.6845图4-21针对图4-18(a)、(b)所提取出来的水印图像对于图4-19攻击之后,提取出的水印图像如图4-22所示。NC=0.8003NC=0.7845 (a)(b)图4-22针对图4-19(a)、(b)所提取出来的水印图像对于图4-23攻击之后,提取出的水印图像如图4-17所示。NC=0.9723NC=0.9702(a)(b)图4-23针对图4-20(a)、(b)所提取出来的水印图像4.4.3特殊攻击情况现实生活中,系统也会遇到一些特殊的情况,被一些高级图像处理软件严重处理过,如雾化、底片化、积木化,数字水印则不能提取成功。这也是系统算法中存在的不足。受攻击的图像如图4-24所示。PSNR=25.37dbPSNR=63.51db(a)雾化(b)底片化图4-24嵌入水印的图像受到雾化、底片化攻击对于图4-18攻击之后,提取出的水印图像如图4-21所示。NC=0.0023NC=0.0845图4-25针对图4-24(a)、(b)所提取出来的水印图像4.5本章小结本章对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防风固沙堡坎建设协议
- 水库清淤水库劳务施工合同
- 海岸线防护工程队合同
- 市政道路散水施工合同
- 交通运输砌体抹灰施工合同
- 文化场馆改造补充协议
- 车牌租赁代购合同范本模板
- 2023年福建省中考物理复习专题练:3光现象
- 2022年中考物理一轮复习卷(人教版)第四章 光现象
- 遗赠抚养协议书股权激励计划
- 唐雎不辱使命课件(共张PPT)
- 钢结构模块化安装施工方案
- 公路工程地质勘察布孔原则
- 武汉理工网络《证券法》试题及其答案
- 物业公司安保部危险源清单及风险评价表
- 传热学——凝结核沸腾传热
- 10kV电力架架空线路施工组织设计
- 白淑敏崔红卫概率论与数理统计课后习题答案
- 山东普通中小学校办学条件标准
- 中华诗词之美期末考试答案(汇总)
- 深静脉血栓的预防及护理ppt课件
评论
0/150
提交评论