基于离散余弦变换算法的数字水印研究周伟峰_第1页
基于离散余弦变换算法的数字水印研究周伟峰_第2页
基于离散余弦变换算法的数字水印研究周伟峰_第3页
基于离散余弦变换算法的数字水印研究周伟峰_第4页
基于离散余弦变换算法的数字水印研究周伟峰_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于离散余弦变换算法的数字水印研究周伟峰(上海大学 机电与自动化学院,上海200072)摘要:首先对数字水印技术进行了详细介绍,学习研究了数字水印技术的基本原理、基本特性及系统的设计。选取数字水印技术的离散余弦算法作为本文的主要研究方向,重点分析了基于DCT 的水印方案。对离散余弦变换( DCT 域的图像水印的生成、嵌入、提取做了详细的分析、实验, 结果表明: 这种算法较好地兼顾了水印技术的透明性和鲁棒性的要求。关键词:数字水印;离散余弦变换;鲁棒性;水印方案Research of Digital Watermark Based on DCT DomainZhou Wei-feng(Schoo

2、l of Mechatronical Engineering and Automation, Shanghai University, Shanghai 200072, ChinaAbstract: In this paper we first introduce the research background of digital watermarking basic principles and technique characteristics。 It was analyzed in detail hereby about generating, embedding and extrac

3、ting of image watermark with DCT domain. It was concluded that the algorithm hereinafter gave better consideration to the demand of both transparency and robustness to watermark technology.Key words: Digital Watermark; DCT; robustness; watermarking scheme1 引言1.1 数字水印技术数字水印技术是指用信号处理的方法在声音,图像或视频等数字化的多

4、媒体数据中嵌入某些能证明版权归属或跟踪侵权行为的隐蔽的信息,这些信息通常是不可见的,不能被人的知觉系统觉察或注意到,只有通过专用的监测器或阅读器才能提取。通过这些隐藏在多媒体内容中的信息,可以达到确认内容创建者,购买者或判断内容是否真实完整的目的。水印系统所隐藏的信息总是与被保护的数字对象或它的所有者有关 。作为传统加密系统的有效补充办法,从1993年Caronni 正式提出数字水印到现在的十几年时间里,无论国内还是国外对数字水印的研究都引起了人们的极大关注。在国外方面,由于有大公司的介入和美国军方及财政部的支持,虽然在数字水印方面的研究刚起步不久,但该技术研究的发展速度非常快。国内方面,我国

5、学术界对数字水印技术的反应也非常快,已经有相当一批有实力的科研机构投入到这一领域的研究中来。我国相关学术领域的研究与世界水平相差不远,而且有自己独特的研究思路。数字水印技术从正式提出到现在虽然只有短短几年,但由于它是应用于开放性网络上的多媒体信息隐藏技术,为解决版权保护和内容完整性认证、来源认证、篡改认证、网上发行、用户跟踪等一系列问题提供了一个崭新的技术研究方向,因此在数字产品的知识产权保护、隐蔽标识、篡改提示、隐蔽通信和防伪等方面具有十分看好的应用前景。从研究意义来看,对它的研究具有重要的学术、经济和军事价值一方面,它将促进多媒体技术、网络技术、通信技术、信号处理技术等多门新兴技术的有机结

6、合,促进多媒体网络的进一步繁荣;另一方面,它将有助于多媒体信息版权保护极其版权冲突问题的解决。同时,它将促进隐蔽通信技术,信息安全技术的提高。1.2 基于离散余弦变换的数字水印技术DCT 变换域数字水印是目前研究最多的一种数字水印,它具有鲁棒性强、隐蔽性好的特点。其主要思想是在图像的DCT 变换域上选择中低频系数叠加水印信息。之所以选择中、低频系数,是因为人眼的感觉主要集中在这一频段,攻击者在破坏水印的过程中,不可避免地会引起图像质量的严重下降,一般的图像处理过程也不会改变这部分数据。E. Koch和J.Zhao 较早提出了利用DCT 分解来设计水印的算法 ,他们不是把水印加载到整幅图像上,而

7、是随机地选取图像的一些区域加以改动以嵌入水印,水印所选择的区域是由密钥来控制的。Cox 等人在文献中提出了基于图像全局变换的水印方法。他们重要的贡献是明确提出加载在图像的视觉敏感部分的数字水印才能有较强的鲁棒性。的水印方案是对整个图像进行DCT 变换,然后将水印加载在低频分量上。它的实现方法是首先对整幅图像进行二维DCT 变换,然后选取除直流(DC分量外的1000个较大的低频DCT 系数并加以改变,用一个服从N (0,1)分布的高斯序列来调制水印序列,伪随机序列是以密钥为种子来产生的,密钥通常由作者的标识码和图像相关信息的散列值组成。检测时通过计算高斯序列与从加水印图像中得到的1000个改动过

8、的低频DCT 系数的相关性来判断水印是否存在。该算法不仅在视觉上具有水印的不可察觉性,而且水印的鲁棒性非常好,可经受一定程度的有损JPEG 压缩、滤波、D/A及A/D转换等信号处理,也可以经受一般的几何变换如剪切、缩放、平移及旋转等操作,对复印和扫描等处理也具有较强的鲁棒性。该算法具有较强的鲁棒性和安全性。由于该算法是由LTEc 实验室的Cox 等人提出的,因此又称为NEC 算法 。2 数字水印技术理论人类社会经历了农业、工业社会后进入了信息化社会。生活在当今信息化社会里,人们不得不承认我们周边的“信息场”发生了两个重大变化:一是信息空间的结构越来越复杂,信息源的频率范围越来越宽,也就是说,我

9、们的研究对象更加复杂; 二是随着信息科学和技术发展,科学家和工程师获取信息的手段和方法越来越多样化。在这样的背景下,数据融合技术应运而生。数据融合的最终目的是构造高性能智能化系统。2.1 数字水印的基本原理从图像处理的角度来看,嵌入水印信号可以视为在强背景下叠加一个弱信号,只要叠加的水印信号强度低于人类视觉模型HVS(Human Vision System的对比度门限,HVS 就无法感到信号的存在。从数字通信的角度看,水印嵌入可理解为在一个宽带信道(载体图像 上用扩频技术传输一个窄带信号(水印信号 。尽管水印信号具有一定的能量,但分布到信道中任一频率上的能量是难以检测到的。水印的检测就相当于是

10、一个有噪声信道中弱信号的检测问题。通常,可以定义水印为如下的信号:W=W(k|W(kU,k o,1,2, M-1其中,W 有时被称为原始水印,以区别与可能在嵌入或检测过程中变换处理以后的水印。M 为水印序列的长度,U 代表水印的值域。水印信号可以是二进制形(如:U=(0,1)或U = (-1,1),也可以是高斯噪声形式(如均值为0,方差为1的高斯白噪声N(0,1),或者其本身也是一幅图像,其幅值相对要保护的数字产品的幅值而言应该是很小的。我们可以将数字水印系统的基本框架定义为六元体 X , W , K , G , E , D 表示 。其中:1、X 表示要被保护的数字产品X 的集合。其中Xo 为

11、表示原始数字作品,Xw 表示含水印的数字作品。2、W 为水印信号集合。3、K 是水印密钥集合。4、G 表示利用密钥K 和待嵌入水印的X 共同生成水印的算法,即G:XK W,W=G(X,K5、E 表示将水印W 嵌入到数字作品X 中的嵌入算法,即E: XoW Xw,Xw=E(Xo,W6、D 表示水印的检测算法。D: XK (0,11, X W H 1 D(X,K= W H 0 0 X其中,H1和H0分别表示水印的有无。2.2 数字水印的基本特性一般地,数字水印应具有如下的特征:(1稳健性:指经过常规的处理操作后,水印算法仍能从水印作品中检测到水印的能力。这些处理包括常见的图像处理(图像压缩、低通滤

12、波、高通滤波和图像增强等 、几何失真变换(剪切、图像缩放、平移和旋转等 、噪声干扰、打印和扫描等。稳健性对于水印而言极为重要,通常只要求水印在嵌入和检测之间的信号处理操作中存在。对于不同的应用需求,要求有不同程度的稳健性。(2不可感知性:不可感知性包含两方面的意思,一方面指视觉上的不可感知性,即嵌入水印后不能导致图像质量在视觉上发生明显地变化。另一方面,用统计方法是不能恢复水印。(3安全性:指水印能够抵御未经授权的人的攻击的能力,这些攻击指专门为了阻碍水印发挥作用的处理行为。主要有三大类型的攻击。一类为未经授权的删除,指阻止检测出作品中水印的攻击。另一类为未经授权的嵌入(伪造 ,指把不合法的水

13、印嵌入到不应含有该水印的作品中的行为。第三类为未经授权的检测,按照其严重性不同,又可以分为三种程度。第一种最严重,指未经授权者检测并解密出嵌入水印的信息。第二种稍轻,指未经授权者检测出水印并且可以区分不同的水印信息,但是不能解读水印的具体含义。第三种最轻,指未经授权者能够判断水印的存在,但不能解读水印信息,也不能区分嵌入信息。(4有效性:指嵌入水印后紧接着检测到水印的概率。水印系统的有效性可能低于100%,如果要尽量接近期望的100%的有效性,需要在其它特性方面付出较高的代价。在实际的应用中,为了在其它特性方面获得更好的性能,需要牺牲一些有效性。在某些情况下,水印系统的有效性需要经分析后才能确

14、定。2.3 数字水印系统的设计数据融合常用的方法有:Un规则、贝叶斯准则、证据推理、模糊积分、确定性理论、神经网络方法等。下面简要介绍。在实际应用中,一个完整水印系统的设计通常包括水印的生成、嵌入、提取和检测四个部分。(1 水印生成:通常基于伪随机数发生器或混沌系统来产生水印信号,从水印的稳健性和安全性考虑,常常需要对水印进行预处理来适应水印嵌入算法(2 水印嵌入:尽量保证水印不可感知性的前提下,嵌入最大强度的水印,来提高水印的稳健性。水印的嵌入过程如图2-1所示。有三种常用的水印嵌入准则。一类为加法准则(Xi= Xi+a Wi 。Xi 为原始图像,Wi 为水印信号,Xi 为含水印图像。a 为

15、水印嵌入强度,它的选择必须考虑图像的实际情况和人类的视觉特性。加法准则是一种普遍的水印嵌入方式,嵌入水印时没有考虑到原始图像各像素之间的差异,因此,用此方法嵌入水印后图像质量在视觉上变化较大,影响了水印的稳健性。另一类为乘法准则(Xi= Xi(1+a Wi,它考虑到原始图像各像素间的差异,因此,乘法准则的性能在很多方面要优于加法准则。第三类为融合准则(Xi=(1-aXi+a Wi,近年来,融合准则引起了人们的广泛关注,它综合考虑了原始图像和水印图像,在不影响人的视觉效果的前提下,对原始图像做了一定程度地修改。水印嵌入框图如下:图2-1 水印嵌入框图 (3 水印提取:指水印可比较精确地被提取出来

16、的过程,比如在完整性确认的应用中,必须能够精确地提取出嵌入的水印信息,并且可以通过水印的完整性情况来确认多媒体数据的完整性。水印的提取和检测可以需要原始图像的参与,也可不需要原始图像的参与,如果没有原始图像,则提取和检测将比较困难。水印的提取过程如图2-2所示,虚框表示提取水印信号时并不一定需要原始图像。图2-2 水印提取框图 (4 水印检测:判断水印载体中是否存在水印的过程,水印的检测过程如图2-3所示,虚框表示判断水印信号是否存在时并不一定需要原始图像。图2-3 水印检测框图2.4 数字水印的分类数字水印有多种分类方法,出发点不同导致了不同的分类,它们之间既有联系又有区别。常见的分类 方法

17、有以下几种:(1按水印信号的意义划分:可将水印分为无意义水印和有意义水印。无意义水印指嵌入的水印信号没有实际的含义,可以为伪随机实数序列、伪随机二值序列和混沌序列等。有意义水印指嵌入的水印信号具有一定的意义,能比较直观地表示数字作品的信息,可以为数字图像、数字音频和文字等。目前有意义水印在实际应用中更加广泛,它能更有效地保护数字作品的版权。(2按水印的可见性划分:此类划分主要用于数字图像作品中。从人类视觉系统来看,按照数字水印在数字图像作品中是否可见分为可见水印和不可见水印。可见水印指水印在数字图像中可见。不可见水印指将水印信号嵌入到数字图像、音频或视频中,从表面上很难察觉到这些数字作品的变化

18、,但当发生版权纠纷时,可以从这些数字作品中提取水印,来证明数字作品的版权,它比可见水印应用更加广泛。(3按水印的稳健性划分:按照嵌入的水印能多大程度地经受常见的信号处理等操作可将水印分为易损水印和稳健性水印。易损水印指当嵌入水印的载体数据被修改后,通过水印检测,可以对载体是否进行了修改或进行了何种修改进行判定。稳健性水印指嵌入的水印能抵抗一定失真内的恶意攻击,且一般的信号处理不影响水印的检测。(4按水印所依附的载体形式划分:可将水印划分为图像水印、音频水印、视频水印和文本水印等。(5按水印隐藏的位置划分:可将水印划分为空域数字水印和变换域数字水印。空域数字水印指水印直接嵌入到信号空间上,即通过

19、改变载体空间的某些系数来嵌入水印。变换域数字水印指改变某些变换域系数来嵌入水印。(6按水印检测过程划分:可将水印分为非盲水印、半盲水印和盲水印。非盲水印指在检测和提取数字水印的过程中,需要原始数据和原始水印的参与。半盲水印指不需要原始数据,但需要原始水印来进行检测。盲水印指在检测和提取数字水印的过程中只需要密钥,既不需要原始数据,也不需要原始水印。通常,非盲水印的稳健性比较强,但它需要存储原始数据和原始水印,其应用受到了限制,因此,盲水印和半盲水印将成为今后的发展方向。3 基于DCT 域的数字水印算法DCT 变换域数字水印算法的主要思想是在DCT 变换域上选择中、低频系数叠加水印信息,因为人眼

20、的感觉主要集中在中、低频段,攻击者破坏水印时,小可避免地会引起图像质量的严重卜降,而且一般的图像处理也不会改变这部分数据。再者,由于JPEG , MPEG 等压缩算法的核心是在DCT 变换域上进行量化,故通过巧妙的融合水印和量化过程,可以使水印抵御一定的有损压缩。此外,DCT 变换域系数的统计分布有比较好的数学模型,可以从理论上估计水印的信息量。基于DCT 变换的数字水印在逆变换时会散布在整个图像空间中,故水印小像空间域技术那样易受到裁剪、低通滤波等攻击的影响,具有鲁棒性高、隐蔽性好的特点。由于以上的种种优点,目前基于DCT 变换得图像数字水印算法是目前国内外研究的热门方向之一。3.1 DCT

21、 变换理论基础离散余弦变换(Discrete Cosine Transform简称DCT 是简化傅立叶变换的重要方法,从傅立叶变换的性质可以知道当连续的实函数f(x或f(xy为偶函数时,变换的计算只有余弦项,因此余弦变换和傅立叶变换一样有明确的物理意义,可以说余弦变换是傅立叶变换的特例。DCT 变换避免了傅立叶变换中的复数运算,它是基于实数的正交变换。DCT 变换矩阵的基向量很近似于Toeplitz 矩阵(系数矩阵对称且沿着与主对角线平行的任一对角线上的元素都相等 的特征向量,而Toeplitz 矩阵又体现了人类语言及图像信号的相关特性,故DCT 变换常常被认为是对语音和图像信号的准最佳变换,

22、同时DCT 算法较易于在数字信号处理器中快速实现,因此它目前在图像编码中占有重要的地位,成为一系列有关图像编码的国际标准(JPEG,MPEG, H.261等 的主要环节。基于DCT 域的数字水印算法,根据对宿主图像DCT 的计算方法分为两大类,一类是直接对整幅图像进行DCT 计算,选取合适频段的系数,嵌入水印。另一类是,首先将整幅图像分成块,对每一块分别进行DCT 计算,在每一块中选取合适频段的系数,将水印信息分散嵌入到每一块所选取的DCT 系数中。这种方法称为分块DCT 。通常块的大小采用g*g像素点。由于后者是JPEG 压缩标准中采用的方法,而且分块DCT 计算速度要比全局DCT 计算速度

23、快得多,因此目前DCT 域的水印方法大多数是采用分块DCT 方法。利用DCT 域作为水印嵌入域的优点是:1. 图像被DCT 分成伪频率段,水印可以很容易地嵌入到中频段。2. 基于DCT 变换域的算法可以更好的结合HVS 模型,图像失真度的约束可以很容易地加进去,进一步改进算法性能。3. 分块DCT 被广泛地应用在压缩方法中如JPEG 。通过预测哪些系数在压缩过程中会被减弱,可以把水印嵌入到非损系数中,增强水印对图像压缩的鲁棒性。4. 可以嵌入较多的信息。5. 将水印嵌入到DCT 域的某一个频段,经过反变换后,水印分散到整幅图像中,对于剪切等图像处理有一定的鲁棒性。6. 二维DCT 是一种可分离

24、变换,DCT 是一种准最优变换。但是,DCT 算法也有其缺点,利用DCT 域作为水印嵌入的缺点主要有以下两点:1. DCT对于图像在空域上的平移和位置交换具有敏感性。对于几何攻击的鲁棒性较弱。2. 基于DCT 变换域的算法:即相对来说计算复杂。但是目前,己经有针对DCT 计算的硬件芯片了,所以计算复杂的缺点可以在很大程度上得到克服。3.2 二维DCT 的定义目前文献中关于二进制DE 算法的相关研究还比较少,具有代表性的二进制DE 算法主要是:AMDE ,AIS-DE ,BCDE ,BADE ,DBDE 。这五种二进制DE 算法的交叉、选择算子与标准DE 算法完全相同,其不同之处在于变异算子,即

25、变异个体的生成策略不同。S 我们知道,数字图像可以用二维矩阵S 表示,因此其二维DCT 用矩阵表示,其定义如下式所示:S (k,l )=2M N M -1N -1(2i +1 k (2j +1 l (k (l S (i , j c c 122M 2N i =0j =0 (3-1二维IDCT 如下式所示2S (i , j =M N M -1N -1(2i +1 k (2j +1 l (k (l S (k , l c c 122M 2N k =0l =0 (3-2), 并且 其中i , k 0, 1, 2,. M -1, j , l 0, 1, 2,. N -11, k =0c 1(k =21,

26、k =1, 2,. M -1 1, l =0c 2(l =21, l =1, 2, . N . -1 (3-3)我们最常用到的是88分块DCT ,即首先将大小为M N 的图像分成(M/8 (N/8 =(MN/64的非重叠的大小为88的块,然后对每一块作DCT 。根据式(4-1和式(4-2 88 DCT的定义如下:S (k,l )=7(k (l S (i , j (2i +1 k 2j +1 l 127722i =0j =01616 (3-4 88 IDCT的定义如下: (k (l (2i +1 k (2j +1 l S (i , j =(k , l 712k =0l =0221616 (3-5

27、)其中,i , j , k , l 0, 1, 2,. 7, 并且1, k =0c 1(k =21, k =1, 2,. 7 1, l =0c 2(l =21, l =1, 2,. 7 (3-6)3.3 DCT 变换理论基础3.3.1 嵌入水印的过程本文采用的是分块DCT 算法,使用的宿主图像是256256的灰度图像水印嵌入步骤如下:1, 将宿主图像S(i, j, i =1,2., M; j =1,2,., N分成互不覆盖的88的块,然后对每一块都进行DCTS 变换,得到与宿主图像相同尺寸的DCT 域系数矩阵 (i , j ,i=1,2., M; j=1,2,.,N 。2, 我们用密钥生成长度

28、为N w 的Gaussian 白噪声作为水印信号:W N(0,1。3将每个88的DCT 系数矩阵从每一块的中频段取出(64 Nw /(M N 个系数c (i , j , k =1, 2,. B k n u m 。4根据公式W =W (1+alfa *mark 嵌入水印,其中alfa 为尺度因子,mark 为水印信息,W 为原图像的分块DCT 系数。5用得到的新的DCT 系数对原来位置的DCT 系数进行置换。6对新的DCT 系数矩阵进行DCT 反变换,得到了嵌入水印信号的图像。在MA TLAB 中实现后得到图1 图1 原始图像和嵌入水印后的图像3.3.2 水印的提取和检测在某些水印系统中水印可以

29、被精确地抽取出来. 这一过程称为水印提取。通过所提取出的水印的完整性来确认多媒体数据的完整性。如果提取的水印发生了部分的变化最好是能够通过发生变化的水印的位置来确定原始数据被篡改的位置。水印检测采用相关检测技术。待测试图像K -1k =0f *(x , y 与原始图像的差为: e (x , y =f *(x , y -f (x , y =e k (x , y , x 0, y T ,可以判定被测图像中含有水印W. 否则,没有水印W 。阈值T 的选择要同时考虑虚警概率和漏警概率。虚警概率是指待测图像中不包含水印而检测器输出结果却表明含有水印的概率; 漏警概率是指待测图像中包含水印而检测器输出结果

30、却表明不含有水印的概率。T 减少,则漏警概率降低而虚警概率提*高;T 增大. 则虚警概率降低而漏警概率提高。若W 与W 不相关. T 的概率等于具有Gaussian 分布的随机变量超过其均值T 倍方差的概率。水印测试结果如图2所示. 其中纵坐标表示相关系数值. 横坐标表示50个length 1的测试水印序列. 测试结果清楚表明第10个(即正确水印 的相关值大于其他值. 并且绝对值大于设定的阈值。因此可以检测到正确的水印。 图2 水印检测结果3.3.3 攻击试验接下来对算法产生的含水印图像进行了一系列攻击实验. 水印的攻击实验是检验水印鲁棒性的有力手段。1)噪声干扰实验:利用MA TLAB 图像

31、处理工具箱提供的随机序列产生函Y=randn( size( A产生一个均匀的高斯随机序列加入目标图像图3 实验结果. 证实了水印图像在噪声攻击后仍然能够提取出水印。 图3噪声图像及检测结果2)滤波实验:利用MATLAB 图像处理工具箱提供的滤波函数B= imfilter( A, H对嵌入水印后的图像进行滤波处理. 如图4. 仍然能够提取出较清晰的水印图像。 图4滤波图像及检测结果3)剪切实验:利用MATLAB 图像处理工具箱提供的图像剪裁函数W Image4 =imcrop( WImage4, 50 40 100 100对水印图像进行剪裁的几何操作. 图5是被剪裁掉约70%后的目标图像仍然能够

32、提取出较清晰的水印图像。 图5剪切图像及检测结果4)JPEG 压缩实验:利用MA TLAB 图像处理工具箱提供的双精度数转换函数I2= im2double ( I ,DCT矩阵计算函数B = dctmtx ( n.块处理操作函数D= blkproc( A,m,N,fun , P1, P2,. 重排图像块为矩阵阵列函数B= im2col(A, m,N, block-type 等利用分块DCT 变换来实现对嵌入水印后的图像的压缩,图6是该图像的水印提取结果 图6压缩图像及检测结果5)旋转实验:利用MA TLAB 图像处理工具箱提供的图像旋转函数T= imrotate( A, angle, meth

33、od, bbox对嵌入水印后的图像进行旋转的几何操作. 然后再调用函数watermark_ detect 证实了水印图像在旋转后仍然能够提取出水印。图7是实验结果。 图7旋转图像及检测结果4 结束语随着通信技术和网络技术的飞速发展和广泛应用,数字多媒体信息的存储、复制与传播变得非常方便,数字化产品的产权保护成为急需解决的问题。数字水印技术作为一种新的有效产权保护手段,应用前景和使用价值十分广阔。本文首先对数字水印技术进行了详细介绍,学习研究了数字水印技术的基本原理、基本特性及系统的设计。选取数字水印技术的离散余弦算法作为本文的主要研究方向,重点分析了基于DCT 的水印方案。在DCT 水印系统选

34、择DCT 系数交流系数中的低频系数作为嵌入的载体(出于不可觉察性和健壮性的考虑 。 用MATLAB 模拟图像可能遭受的各种攻击,测试水印系统的鲁棒性,并对水印图像的失真进行主观和客 观的评估。证明在文中所建立的水印系统都具有很好的抵抗常见信号处理(JPEG 压缩、滤波、噪声干扰等 以及图像处理(旋转、直方图调整、图像剪切等的性能。 水印技术的研究在国内的起步较晚,水平相比较国外还有一定的差距,目前还没有具体的产品问世。 我们应该抓住信息时代对于数字版权保护的迫切需求,开发出自己的水印产品。数字水印技术是一个新兴 的研究领域,基于 DCT 域的数字水印的嵌入、提取、检测和攻击等领域还有许多未触及

35、的而且很有价值 的研究课题,在今后的工作中将作进一步的研究。 参考文献: 1 孙圣和,陆哲明,牛夏牧.数字水印技术及应用.科学出版社,2007 2易开祥,石教英,孙鑫.数字水印技术研究进展.图形图像学报 2011,6(2: 111117 3孙锐,孙洪,姚天任.多媒体水印技术的研究进展与应用.系统土程与电子技术,2009,25(6: 772776 4王丙锡,陈琦,邓峰森,数字水印技术,西安电子科技大学出版社,2010 5 钟桦,张小华,焦李成. 数字水印与图像认证算法及应用,西安电子科技大学出版社,2010 6 余成波,杨菁,杨如民,周登义. 数字信号处理及 MATLAB 实现,清华大学出版社

36、2008 7 王家文,李仰军. MATLAB7.0 图形图像处理,国防工业出版社 2006 8 张问银,梁永全. 基于 DCT 的一种数字图像水印策略,山东科技大学学报 2012 9 肖力,一种基于 DCT 域的数字水印的实现,鄂州大学学报 2005 10 黄继武,SHI Y Q,程卫东.DCT 域图像水印:嵌入对策和算法.电子学报,2010. 2-8(4 11 飞思科技产品研发中心,精通 MATLAB 7 ,电子工业出版社 2005 12 Rafael C.Gonzalez,Richad E.Woods,数字图像处理,阮秋琦,阮宇智等译 电子工业出版社 2003 13 耿永军,朱雪芹,基于离

37、散余弦变换的数字水印算法,郑州大学学报 2005 14 赵伟,陈仁安,张晓玲,游荣义. 15 赵彦涛,吴希军,马云飞,李志全. 17 李秋艳,孟庆华. 18 路玲,孙新德. 基于 ICA 和 DCT 的鲁棒性盲水印算法J. 厦门理工学院学报. 2011(02 基于可逆信息隐藏的的无损鲁棒数字水印模型的研究J. 燕山大学学报. 2010(03 16 李绍华,林克正,李东勤. 基于 Watson 感知模型的 DCT 变换数字水印算法J. 哈尔滨理工大学学报. 2007(02 基于融合的数字水印在电台加密技术中的应用研究J. 长春工业大学学报(自然科学版. 2008(03 基于图像子块 DCT 系数

38、对的盲检测数字水印J. 郑州大学学报(工学版. 2010(02 基于 DCT 图像水印系统的研究J. 包装工程. 2009(11 19 兀旦晖,赵晨飞,李晗,郭琴. - 11 - 附录资料:不需要的可以自行删除Pascal/C/C+语句对比(补充版)一、Hello world 先看三种语言的样例:Pascalbegin writeln(Hello world);end.C#include int main() printf(Hello world!n); return 0;C+#include using namespace std;int main()cout Hello world! en

39、dl; return 0; 从这三个程序可以看到一些最基本的东西。在Pascal中的begin和end,在C/C+里就是;Pascal主程序没有返回值,而C/C+返回0(好像在C中可以为NULL)。在C/C+中,main函数以前的是头文件,样例中C为stdio.h,C+除了iostream还有第二行的using namespace std,这个是打开命名空间的,NOIP不会考这个,可以不管,只要知道就行了。 此外说明 注释单行用/,段落的话Pascal为,C/C+为/* */。* 常用头文件(模板)#include #include #include #include #include #in

40、clude using namespace std;int main() system(“pause”);return 0;二、数据类型及定义 这里只列出常用的类型。1、整型PascalC/C+范围shortint-128 127integershort-32768 32767longintInt -2147483648 2147483647int64long long-9223372036854775808 9223372036854775807byte-0 255wordunsigned short0 65535longwordunsigned int0 4294967295qwordun

41、signed long long0 18446744073709551615 * 当对long long 变量赋值时,后要加LLLong long x=6327844632743269843LL* 如果位移 x2LL* Linux: printf(“%lldn”,x);* Windows: printf(“%I64dn”,x);2、实型PascalC/C+范围realfloat2.9E-39 1.7E38single-1.5E-45 3.4E38doubledouble5.0E-324 1.7E3083、字符即字符串 字符在三种语言中都为char,C里没有字符串,只有用字符数组来代替字符串,P

42、ascal和C+均为string。Pascal中字符串长度有限制,为255,C+则没有。 字符串和字符在Pascal中均用单引号注明,在C/C+中字符用单引号,字符串用双引号。4、布尔类型 Pascal 中为 boolean,C/C+ 为 bool。值均为True 或 False。C/C+中除0外bool都为真。5、定义 常量的定义均为 const,只是在C/C+中必须要注明常量的类型。在C/C+中还可以用宏来定义常量,此时不注明类型。PascalC/C+const a = 60; b = -a + 30; d = ;const int a = 60;const int b = - a + 3

43、0;const string d = “”;define MAXN 501 /这个是宏 * 宏定义其实就是直接在程序相应的位置替换: #define randomize srand(unsigned time(NULL) #define wait for(int w=0;w a;cout a;cout a endl;特别说明C+中cin一个字符的话会自动跳过空格和回车,Pascal和C则会读入空格和回车。在Pascal中writeln(a:n:m) 表示在n个字符宽的输出域上输出a保留m位小数。例如:pascal write(a:6) c/c+ printf(“%6d”,a) Pascal w

44、rite(a:6:2) c/c+ printf(“%6.2f”,a) C+ 如果用 cout ? (繁琐!) 需要加头文件 #inlude cout setprecision(2)a; /作用永久 cout setw(6)a; /作用临时 以下三个进制设定都是永久作用: cout deca; 相当 printf(“%d”,a); /十进制 cout hexa; 相当 printf(“%X”,a); /十六进制 cout octa; 相当 printf(“%o”,a); /八进制例如:cout 12hex12oct1212endl;输出:12c1414 C 的输入输出里面的字符串中%表示变量,%

45、后面的字目表示变量类型。下面是类型表:%hd1个short型整数%d1个int型整数%u1个unsigned int型整数%I64d1个long long型整数%c1个字符%s1个C字符串%f1个float型实数%lf1个double型实数%10.4f输出1个总宽度为10,保留4位小数的实数 文件输入输出:Pascalassign(input, test.in);assign(output, test.out);reset(input);rewrite(output);read(a, b);writeln(a, b);close(input);close(output);CFILE *fin

46、= fopen(“test.in”, “r”);FILE *fout = fopen(“test.out”, “w”);fscanf(fin, “%d%d”, &a, &b);fprintf(fout, “%d%d”, a, b);fclose(fin); fclose(fout);C+#include using namespace std;ifstream fin(“test.in”);ofstream fout(“test.out”);fin a b;fout a b endl;fin.close(); fout.close();因为C+的读入较慢,个人建议C+的话使用C的输入方式。当然

47、也有人用C的读入,C+的输出的,这种方式我们称之为城乡结合。*中国计算机学会竞赛须知发布的C读写程序:(C+ 也能用,cin,cout,scanf,printf 可混用)#include int main() int a,b; freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout); scanf(“%d%d”,&a,&b); printf(“%dn”,a+b); return 0; 或者:freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout);ios:sync_with_st

48、dio(false); 取消同步,cin,cout的速度就不慢了! cinab;couta+bendl; return 0;以下扩充c/c+混用是可行的:#include #include using namespace std;int main() int a,b,c,d; freopen(sum.in,r,stdin); freopen(sum.out,w,stdout); scanf(%d%d,&a,&b); cincd; printf(%dn,a+b); couta+b+c+dsn).Cwhile(scanf(%s%d,s,&n)!=EOF).四、赋值语句及运算符号 一一对应的关系Pa

49、scalC/C+赋值运算赋值:=基本运算加+减-乘*除(实数)/ (double)除法取整div(int) / (int)取余mod%比较等于=不等于!=大于大于等于=小于小于等于=逻辑且and&或or|非not!位运算左移(*2)shl且and&或or|非not异或xor其他增一inc(x)x+减一dec(x)x- 在C/C+中对某个变量自身进行运算可以简写为 变量名 运算符号= 改变量 如 x += 8 就表示 x = x + 8, 即 inc(x, 8)。 在 C/C+里还存在一种三目运算 变量名 = 条件 ? 值A : 值B 如 x = x 0 ? x : -x; /表示若x 0 则取

50、 x, 否则取 x, 同 if x 0 then x := x else x := -x;五、条件语句1、if C/C+中if 语句的条件必须要用括号括起来,后面不使用then。PascalC/C+if a b then flag := true else flag := false;if (a b) flag = true;else flag = false;2、多种分支 C/C+中为switch,Pascal为case:PascalC/C+case x of 1: inc(x); 2: dec(x); else x := x * x;end;switch (x) case 1: x +;

51、break; case 2: x -; break; default: x *= x; 切记C/C+中一定要写break,后果你可以去掉break,运行看看就知道了。六、循环语句1、forPascalC/C+for 变量名 := 初始值 to(downto) 终止值 dofor (变量名=初始值;条件;改变方式)for i := 5 to 10 do dec(a);/终止值大于初始值用 tofor i := 5 downto 1 do dec(a);/终止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 满足条件就会一直循环。C/C+中i是实数、指针

52、都可以*/C/C+中for的特殊用法:/变量为实数for (double i = 1; i 符号为间接引用,后面会提到。for (type1 *p = head - next; p; p = p - next) printf(“%d”, p - k);2、whilePascalC/C+while 条件 dowhile (条件)while i 0 do dec(i);while (i != 0) i-;/也可写作 while (i) i-;/在C/C+中非0即为真。3、repeat-until & do-whilePascalC/C+repeat 语句 until 结束条件;do while (

53、运行条件)repeat int(i) until i 100;do i+; while (i = 100);七、数组 Pascal中数组的下标可以随意定义,而C/C+下标始终为从0开始到(数组大小1)。PascalC/C+定义a : array 1.100 of integer;b :array 1.10,1.10 of int64;int a100;int b1010;含义a 为大小为100的integer数组,合法下标为1到100b 为大小为10*10的int64数组,合法下标为1,1到10,10a 为大小为100的int数组,合法下标为0到99b 为大小为10*10的int数组,合法下标

54、为0,0到9,9;使用inc(a21);b2,2:=b1,1+b1,2+b2,1;a21+;b11=b01+b00+b10; 数组清零PascalC/C+Fillchar(a, sizeof(a), 0);memset(a, 0, sizeof(a);/头文件包含 string.h*如果要填最大: memset(a,127,sizeof(a) (但达不到 INT_MAX) 如果要填最小: memset(a,128,sizeof(a) (但达不到 INT_MIN) 如果填0: memset(a,0,sizeof(a) 如果填-1: memset(a,-1,sizeof(a)八、字符串 C风格的字

55、符串就是字符数组。 C+和Pascal的字符串使用基本相同,只是C+中字符串下标以0开始,Pascal以1开始。字符串处理很多这里不一一列举,只写最常用的几个。PascalC (包含)定义用:char sC+(包含)定义用:string s输入输出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%sn”,s);注:不能输入输出c+的字符串Cins;Couts = s 的区别: getline(cin,s)cins一次性整行读入,直至行末尾。只读入一个“单词”,遇空格和行末停止。例如输入;How are you?s=” How are you?”读入整串含空

56、格例如输入;How are you?s=”How”如果三个都读:cins1s2s3*C+ 数字与数值之间的转换:#include #include #include /必须加入using namespace std;int main() string text = 152; int number; stringstream ss;ss number; /string - int coutnumber+100endl; ss string string str = ss.str(); return 0;九、过程和函数1、过程 在C/C+中没有过程,但可以把返回值为“空”的函数理解为过程。Pasc

57、alC/C+无参过程procedure 过程名;说明部分begin 语句部分 end;/说明部分、begin、end语句部分统称为过程体void 函数名(); 主体部分; return ;带参过程procedure 过程名(形参表)过程体void 函数名(形参表)过程体 值传和址传:当一个参数是值传时,形参在子过程中相当于一个局部变量,对它的改变不影响实在的参数值。址传则会影响。下例中a为值传,b为址传。初始a = 5,b = 5,运行后a = 5,b = 10;PascalC/C+var a, b:integer;procedure doit(a:integer; var b:integer

58、);begin b := a + b; a := a + b;end;begina := 5;b := 5;doit(a, b);writeln(a, , b);end.void doit(int a, int &b) HYPERLINK a a认为值参,b认为变量传参 b += a; a += b; return ;int main()int a = 5, b = 5;doit(a, b);cout a b;return 0;* 用若干地址传参可以给调用者传回若干值 Void tryit(int &x,int &y,int &z) 调用时: tryit(a,b,c) ,可以传回 a,b,c的

59、值。* 用数组名(也是地址)传参可以传回整组的数据 Void tryit( int a) 调用时: tryit(x),可以传回整个数组。例如:void tryit(int a) for(int i=0;i=10;i+) ai=i*2; return; int main() int x10; tryit(x); for(int i=0;i=10;i+) coutxiendl; system(pause); return 0;*用指向函数的指针作为参数,可以执行指定的函数。(略)STL 的两个应用:* C+ 快排函数#include Bool com(int a,int b) Return ab;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论