数字水印技术DCT算法MATLAB源代码
(完整word版)数字图像水印matlab实现
论文独创性声明本人所呈交的论文,是指导教师的指导下,独立进行研究和开发工作所取得的成果。
除文中已特别加以注明引用的内容外,论文中不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的工作做出重要贡献的个人和集体,均已在文中以明确方式标明并致谢。
本人完全意识到本声明的法律结果由本人承担.特此声明。
论文作者(签名):20 年月日摘要随着计算机网络的迅速发展,包括数字图像在内的数字媒体得到了广泛的应用,数字媒体的数据逐渐成为人们获取信息的重要来源,但随之而来出现了一系列如随意复制、编辑、非法传播数字图像的信息安全问题,数字媒体的版权保护问题变的日益突出,数字图像水印技术由此应用而生,已成为信息安全领域的一个研究热点.本文比较系统地研究了数字水印技术在静止图像中的应用问题。
首先介绍了数字水印技术的发展背景,然后对数字水印的原理、特点、分类、典型算法、应用领域以及评价标准等等进行了简要的分析。
其次,本文主要是针对目前现有数字图像水印算法实现过程比较复杂,其中重点讨论关于DCT的数字图像水印技术的嵌入,提取和水印的攻击测试等.最后对数字图像水印的特征进行分析总结。
最终通过Matlab这一工具来实现其具体的过程.通过实验对比分析得到该种算法具有一定的可行性以及较好的鲁棒性。
关键词:数字图像水印,信息安全,DCT算法,Matlab.AbstractWith the rapid development of computer network,digital media, including digital image has been widely used,digital media data gradually become an important source of obtaining information,but there's a series of such as free to copy, edit,illegal dissemination of digital image information security,copyright protection of digital media has become increasingly outstanding, digital image watermarking technology and the application, has become a research hotspot in the field of information security。
基于DCT变换的数字水印研究及其MATLAB实现
S u y o i i lwa e m a k b s d o t d n d g t t r r a e n DCT n h e l a i n a a d t e r a i to z
o ATLAB i u a i n nM sm l to
YANG n Xi
出水 印的存在 。这样 , 字水 印技 术包 含水 印 的嵌 数 入 和提取 两个过程 。
数字 媒体 因其 数字特 征极易被 复制 、 改 、 篡 非法 传播
以及蓄意攻击, 其版权保护, 1益引起人们 的关 已3 注 。数 字水印技术 就是在 这种背 景下应运 而生 。数 字水 印技术 利用人类 的听觉 、 视觉 系统 的特点 , 图 在
( oeeo pol toi Eli e g C o g i nvri f ot a dT l o mu i t n , hn q g4O6 , hn ) C lg f te c nc I n 血 , h nq gU i s yo s n e cm nc i sC o gi O5 C i l O er g e n e t P s e ao n O a
像、 音频 、 频 中加 入 一定 的信息 , 人们 很 难 分辨 视 使 出加人水 印后 的资 料 与原 始 资料 的 区别 , 通过 专 而 门的检验步骤 又能 提取 出所 加 信 息 , 以此 证 明原 创 者对数 字媒体 的版权 ¨ 。 J
研 究数字水 印技术 的最初 目的是用 于保护 数字
1 9— 2
数字 水印提取 从 水 印数 据 中提取 出水 印信 号 ,
数字水 印嵌 人是将 水 印信号 加 人原 始数 据 中 ,
其过 程如 图 1 所示 。
产 品的版权 , 随着研究 的进一 步深入 , 但 它在信息 安
matlab数字水印嵌入与提取代码
数字水印技术是一种用于保护数字信息安全和保护知识产权的重要技术手段。
Matlab作为一种强大的数学计算软件,具有丰富的数字信号处理和图像处理工具包,能够很好地支持数字水印的嵌入和提取。
本文将介绍如何使用Matlab进行数字水印的嵌入和提取,并给出相应的代码实现。
1. 数字水印嵌入数字水印嵌入是将一段隐藏的信息嵌入到载体中,使得这段信息对于一般观察者来说是不可察觉的。
在Matlab中,可以使用一些图像处理工具进行数字水印的嵌入。
需要读入载体图像和待嵌入的数字水印。
载体图像可以使用Matlab 中的imread函数进行读取,得到一个包含图像像素信息的矩阵。
待嵌入的数字水印可以是一段文本、一幅小型图像或者一段音频信号。
接下来,可以选择合适的嵌入算法进行数字水印的嵌入。
常用的算法包括LSB替换算法、DCT变换算法以及扩频水印算法等。
这些算法都可以在Matlab中找到相应的实现。
将得到的嵌入水印后的图像保存起来,成为带有数字水印的图像。
可以使用Matlab中的imwrite函数将处理后的图像保存到本地。
2. 数字水印提取数字水印提取是将嵌入在载体中的数字水印提取出来,还原成原始的水印信息。
在Matlab中,可以利用数字信号处理和图像处理工具进行数字水印的提取。
需要读入带有数字水印的载体图像。
同样可以使用Matlab中的imread函数进行读取。
接下来,根据数字水印嵌入时所采用的算法,使用相应的提取算法进行数字水印的提取。
提取算法通常与嵌入算法是对应的,可以在Matlab中找到相应的实现。
将提取得到的数字水印展示出来,可以是一段文本、一张图像或者一段音频信号。
在Matlab中可以利用文本处理工具、图像处理工具和音频处理工具展示提取得到的数字水印信息。
3. 示例代码以下是一个简单的示例代码,演示了如何在Matlab中进行数字水印的嵌入和提取:数字水印嵌入image = imread('carrier_image.jpg'); 读入载体图像watermark = imread('watermark_image.jpg'); 读入待嵌入的数字水印watermarked_image = embed_watermark(image, watermark); 使用embed_watermark函数进行数字水印的嵌入imwrite(watermarked_image, 'watermarked_image.jpg'); 保存带有数字水印的图像数字水印提取watermarked_image = imread('watermarked_image.jpg'); 读入带有数字水印的载体图像extracted_watermark = extract_watermark(watermarked_image); 使用extract_watermark函数进行数字水印的提取imshow(extracted_watermark); 展示提取得到的数字水印信息以上代码中,embed_watermark和extract_watermark分别是数字水印的嵌入和提取函数。
matlab数字水印算法及实现和源代码
摘要:数字水印技术作为数字媒体版权保护的有效办法,近年来在国内外引起了人们极大的兴趣。
但是由于数字水印技术涉及到的知识面比较广,即使是专业人员有时也感到力不从心,那么如何选择一种有效的编程工具便成为一个亟待解决的问题。
本文从数字水印技术本身的特点、一般模型和典型算法出发,简要地介绍了一种可以快速上手的高效的实用语言——Matlab。
最后,作者给出一个用Matlab实现数字水印实例。
关键词:数字水印Matlab Visual C++6.0DWT DCT1引言作为传统加密系统的有效补充办法,从1993年Caronni正式提出数字水印到现在短短几年里,无论是在国内还是在国外对数字水印的研究都引起了人们极大的关注。
但数字水印技术的发展还很不成熟,应用也处于初级阶段。
在我国,知识产权问题是一个敏感的话题,只有深入开展数字水印技术的研究,尽快制定我国的版权保护水印标准,才能使我们在未来可能的国际知识产权纠纷中取得主动权。
那么掌握高效的工具,便成为一个必须解决的问题。
本文就针对数字水印本身的特点,介绍了一种高效的实用工具——MATLAB。
2数字水印技术2.1数字水印技术的复杂性数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉感知理论、扩频技术(Sprea d Spectrum)、信号处理(Signal Processing)技术、数字图像处理(Digital Image Pr ocessing)技术、多媒体(Multimedia)技术、模式识别(Pattern Reorganization)技术、算法设计(Algorithm Design)等理论,用到经典的D FT(Discrete Fourier Transform)、DCT(Discrete Cosine Transform)变换和近代最先进的数学工具----小波(Wavelet)。
数字水印又是一个横跨计算机科学、生理学、密码学、数字、数字通信等多门学科,并与I nternet的发展密切相关的交叉科学。
Matlab实现基于DCT域的鲁棒水印算法
Matlab实现基于DCT域的鲁棒水印算法摘要:数字水印技术(digital watermarking)是实现版权保护的有效办法,并已得到了广泛的应用。
文章介绍了数字水印的相关知识,并借助于matlab环境实现了基于dct域的鲁棒水印嵌入和提取的方法。
关键词:matlab;dct域;鲁棒水印中图分类号:tp391 文献标识码:a 文章编号:1674-1723(2012)10-0155-02当今,随着计算机网络和数字技术的发展,越来越多的多媒体数字作品不断出现在网络上,其版权保护成为一个迫切需要解决的问题。
数字水印是实现版权保护的有效办法。
数字水印是一种全新的信息隐藏技术,它的基本思想是在原始数据中嵌入秘密的信息(即水印)来证实该数据的所有权。
通过对原始数据做微量修改来嵌入水印信息,从而达到信息隐藏的目的。
水印的嵌人通常借助于算法进行实现,水印的提取用嵌入的逆算法进行实现。
一、数字水印的概念数字水印技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到。
通过这些隐藏在载体中的信息,可以达到确认内容创建者、购买者、传送隐秘信息或者判断载体是否被篡改等目的。
数字水印是信息隐藏技术的一个重要研究方向。
二、数字水印的分类(一)可见水印与不可见水印可见水印:嵌入的水印是可见的。
不可见水印:具有透明性,这是目前大多数水印技术的要求。
应用面较广,对数字作品实现版权保护作用更好,是目前研究的主流。
(二)鲁棒水印、脆弱水印和半脆弱水印1.鲁棒水印。
鲁棒水印的主要目的在于保护数字作品的版权,它要求嵌入后的水印能够经受各种常用的信号处理操作,包括无意的或恶意的处理,如有损压缩、滤波、平滑、信号裁减、图像增强、重采样、几何变形等等。
鲁棒水印在经过各种处理后,只要宿主信息没有被破坏到不可使用的程度,都应该能够检测出来。
基于Matlab的数字水印设计基于DCT域的水印实现课程设计
要摘数字水印(Digital Watermark)技术是指用信号处理地方法在数字化地多媒体数据中嵌入隐蔽地标记,这种标记通常是不可见地,只有通过专用地检测器或阅读器才能提取.数字水印是信息隐藏技术地一个重要研究方向.随着数字水印技术地发展,数字水印地应用领域也得到了扩展,数字. 水印地基本应用领域是版权保护、隐藏标识、认证和安全不可见通信当数字水印应用于版权保护时,潜在地应用市场在于电子商务、在线或离线地分发多媒体内容以及大规模地广播服务.数字水印用于隐藏标识时,可在医学、制图、数字成像、数字图像监控、多媒体索引和基于内容地检索等领域得到应用.数字水印地认证方面主要ID卡、信用卡、ATM卡等上面数字水印地安全不可见通信将在国防和情报部门得到广泛地应用.本文主要是根据所学地数字图象处理知识,在MATLAB环境下,通过系统编程地方式,建立并实现基于DCT域地数字水印加密系统.该系统主要包含数字水印地嵌入与提取,仿真结果表明,数字水印算法具有有效性、可靠性、抗攻击性、鲁棒性和不可见性,能够为数字媒体信息在防伪、防篡改、认证、保障数据安全和完整性等方面提供有效地技术保障.DCTTLAB;关键词:数字水印;MA录目1 课程设计目地 (1)2 课程设计要求 (2)3 数字水印技术基本原理 (3).......................................................................................................... 33.1 数字水印基本框架.......................................................................................................................... 3算法分类 3.2 ................................................................................................................. 43.2.1 DCT 法.............................................................................................................. 4其他方法 3.2.2 ...................................................................................................... 43.3 实际需要考虑地问题.............................................................................................................. 4不可见性 3.3.1 .................................................................................................................. 5 3.3.2 鲁棒性.............................................................................................................. 5 3.3.3 水印容量3.3.4 安全性 (5)4 基于DCT变换仿真............................................................................................................................................................................................................................ 6 4.1 算法原理.............................................................................................................. 6 4.1.1 准备工作.................................................................................................. 78*8变换块4.1.2 选取.......................................................................................................... 7边界自适应 4.1.3 ................................................................................................. 74.1.4 DCT变换与嵌入.............................................................................................................. 8 4.1.5 恢复空域.................................................................................................................. 8嵌入算法扩展4.2 ......................................................................... 8彩色图像三个矩阵地划分4.2.1 RGB...................................................................................................... 8 4.2.2 八色彩色水印...................................................................................................................... 9水印地提取 4.3 .......................................................................................................................... 9 仿真程序4.45 结果分析..................................................................................................................14结束语..........................................................................................................................16参考文献......................................................................................................................17课程设计目地1数字水印技术是用信号处理地方法在数字化地多媒体数据中嵌入隐蔽地标记,这种标记通常是不可见地,只有通过专用地检测器或阅读器才能提取.数字水印是信息隐藏技术地一个重要研究方向.在数字水印技术中,水印地数据量和鲁棒性构成了一对基本矛盾.从主观上讲,理想地水印算法应该既能隐藏大量数据,又可以抗各种信道噪声和信号变形.然而在实际中,这两个指标往往不能同时实现,不过这并不会影响数字水印技术地应用,因为实际应用一般只偏重其中地一个方面.如果是为了隐蔽通信,数据量显然是最重要地,由于通信方式极为隐蔽,遭遇敌方篡改攻击地可能性很小,因而对鲁棒性要求不高.但对保证数据安全来说,情况恰恰相反,各种保密地数据随时面临着被盗取和篡改地危险,所以鲁棒性是十分重要地,此时,隐藏数据量地要求居于次要地位.数字水印技术是通过一定地算法将一些标志性信息直接嵌到多媒体内容当中,但不影响原内容地价值和使用,并且不能被人地知觉系统觉察或注意到.水印信息可以是作者地序列号、公司标志、有特殊意义地文本等,可用来识别文件、图像或音乐制品地来源、版本、原作者、拥有者、发行人、合法使用人对数字产品地拥有权.与加密技术不同,数字水印技术并不能阻止盗版活动地发生,但它可以判别对象是否受到保护,监视被保护数据地传播、真伪鉴别和非法拷贝、解决版权纠纷并为法庭提供证据.总地来说,数字水印可以携带有版权保护信息和认证信息,保护数字产品地合法拷贝和传播.课程设计要求2利用所学地数字图像处理技术,建立并实现基于DCT地数字水印加密系统,利用MATLAB软件系统来实现水印地嵌入和提取,并对算法地不可见性、鲁棒性进行测试.具体要求:TLAB程序设计方法;(1)熟悉和掌握MA TLAB图像处理工具箱;2)学习和熟悉MA (工具箱对图像进行处理和分析;)学会运用MA TLAB(3格式进行打开、保存、另存、退出等功能操作;)能对图像jpg(4软件对图像进行水印地嵌入和提取;)利用所学数字图像处理技术知识、MATLAB(5(6)在程序开发时,清楚主要实现函数目地和作用,需要在程序书写时做适当注释说明,理解每一句函数地具体意义和使用范围;.)每个程序都必须做到功能仿真成功,运行结果以图片地形式粘贴到报告中(7数字水印技术基本原理3数字水印基本框架3.1一个数字水印系统一般包括三个基本方面:水印地生成、水印地嵌入和水印地提取或检测.数字水印地嵌入和提取地一般过程基本框架如图3.1,图3.2所示.水印生成算法(G)数字水原始载体数(J)水印嵌入算私公(K)图3.1 水印嵌入地一般过程基本框架数字水(W)原始数据水印检测算法估计水印(W)/相似度检测) (I待检测数据W私钥/公钥(K)图3.2 水印检测地一般过程基本框架算法分类3.2.根据水印实现方法不同,数字水印可分为空(时)域数字水印和频域数字水印空域数字水印是直接在信号空间上叠加水印信号,而频域法加入数字水印地原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用地变换一般有DWT、DCT、DFT、WP和分形.然后,对加入了水印信息地信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息地信号.频域法检测水印地原理是将原始信号与待检测信号同时进行变换域变换,比较两者地区别,进行嵌入水印地逆运算,得出水印信息.如果是可读地水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出地水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印地检测有两个结束点.频域法有以下优点:嵌入地水印信号能量可以分布到空域地所有像素上,有利于保证水印地不可见性;视觉系统(HVS)地某些特性(如频率地掩蔽特性)可以更方便地结合到水印编码过程中;频域法可与国际数据压缩标准兼容,从而实现在压缩域(compressed domain)内地水印编码.法3.2.1 DCT.对原始信号做DCT地算法:Cox和Piva等人提出地DCT技术地经典之作.Cox利用随机数发生器产生标准正态序列作为水印信息对图像进行整体DCT变换后,选取除去DC系数之外部分较低频率系数叠加水印信息。
基于Matlab的数字水印设计――基于DCT域的水印实现
基于Matlab的数字水印设计――基于DCT域的水印实现沈阳理工大学数字图像处理课程设计摘要数字水印(Digital Watermark)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。
数字水印是信息隐藏技术的一个重要研究方向。
随着数字水印技术的发展,数字水印的应用领域也得到了扩展,数字水印的基本应用领域是版权保护、隐藏标识、认证和安全不可见通信。
当数字水印应用于版权保护时,潜在的应用市场在于电子商务、在线或离线地分发多媒体内容以及大规模的广播服务。
数字水印用于隐藏标识时,可在医学、制图、数字成像、数字图像监控、多媒体索引和基于内容的检索等领域得到应用。
数字水印的认证方面主要ID卡、信用卡、ATM卡等上面数字水印的安全不可见通信将在国防和情报部门得到广泛的应用。
本文主要是根据所学的数字图象处理知识,在MATLAB环境下,通过系统编程的方式,建立并实现基于DCT域的数字水印加密系统。
该系统主要包含数字水印的嵌入与提取,仿真结果表明,数字水印算法具有有效性、可靠性、抗攻击性、鲁棒性和不可见性,能够为数字媒体信息在防伪、防篡改、认证、保障数据安全和完整性等方面提供有效的技术保障。
关键词:数字水印;MATLAB;DCTI沈阳理工大学数字图像处理课程设计目录1 课程设计目的 ........................................................................... ............................... 1 2 课程设计要求 ........................................................................... ............................... 2 3 数字水印技术基本原理 ........................................................................... (3)3.1 数字水印基本框架 ........................................................................... ............. 3 3.2 算法分类 ........................................................................... .. (3)3.2.1 DCT法 ........................................................................... ...................... 4 3.2.2 其他方法 ........................................................................... ................... 4 3.3 实际需要考虑的问题 ........................................................................... (4)3.3.1 不可见性 ........................................................................... ................... 4 3.3.2 鲁棒性 ........................................................................... ....................... 5 3.3.3 水印容量 ........................................................................... ................... 5 3.3.4 安全性 ........................................................................... .. (5)4 基于DCT变换仿真 ........................................................................... (6)4.1 算法原理 ........................................................................... .. (6)4.1.1 准备工作 ........................................................................... ................... 6 4.1.2 选取8*8变换块 ........................................................................... ....... 7 4.1.3 边界自适应 ........................................................................... ............... 7 4.1.4 DCT变换与嵌入 ........................................................................... ...... 7 4.1.5 恢复空域 ........................................................................... ................... 8 4.2 嵌入算法扩展 ........................................................................... (8)4.2.1 RGB彩色图像三个矩阵的划分 ........................................................ 8 4.2.2 八色彩色水印 ........................................................................... ........... 8 4.3 水印的提取 ........................................................................... ......................... 9 4.4 仿真程序 ........................................................................... ............................. 9 5 结果分析 ........................................................................... ..................................... 14 结束语 ........................................................................... ............................................... 16 参考文献 ........................................................................... . (17)II沈阳理工大学数字图像处理课程设计1 课程设计目的数字水印技术是用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。
(完整word版)数字水印源码
数字水印源码,希望对大家学习有帮助.%由高斯正态分布序列g1 产生36×4 的水印信%号w0,w0 由(0,1)组成。
clearrandn(’state’,1106);g1=randn(36,4);for i=1:36for j=1:4if g1(i,j)〉=0w0(i,j)=1;else w0(i,j)=0;end;end;end;figure;imshow(w0);title('水印');%对水印信号w0 进行(7,4)汉明编码,得到一%36×7 的分组码x0。
x0=w0;for i=1:36s=8*x0(i,1)+4*x0(i,2)+2*x0(i,3)+x0(i,4);x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;case 1x0(i,5)=0;x0(i,6)=1;x0(i,7)=1; case 2x0(i,5)=1;x0(i,6)=1;x0(i,7)=0; case 3x0(i,5)=1;x0(i,6)=0;x0(i,7)=1; case 4x0(i,5)=1;x0(i,6)=1;x0(i,7)=1; case 5x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;case 6x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;case 7x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;case 8x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;case 9x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;case 10x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;case 11x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;case 13x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;case 14x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;case 15x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;end;end;% 对x0 进行行向位扩展,得到一个由(—1,1)组成%的扩展序列y。
DCT变换数字水印(答辩专用).
I 4・tlatlab上机操住;5 ■完成设计报告:由于老师开放题目,我们就按照耍求上网去*都*哪数字语音合成数字水印技术数字水印技术S 1.LSB2.DCT3.DWT4.........了解数字水印的应用背景和当对的发展状况. 然后紹如水印算法才是其中白勺精华,紧扌妾着我们就开始选择韓法:线件鸞法KtF卩妞杂应用奴杂空域臬法原理简单.容易理解选样DCT算法学习离散余弦变换,理解DCT域数理,然后制定组员任务表DCT域变换基本模式:图像方向组员陈攀关镇|成海健柴兆臣任务Matlab代码调试(咅频)代阅资料收集代码(音频)Matlab代码调试(图像)査阅资料手机代码<图像)组员任务分配4.Matlab上机操作由于本人对\kvtlcb软件的一知半解,调试彳艮不理想,加以ODCT域昔频水印代码相对复杂. 导玫语昔处理部分夭法达剧预期目的,但是经过几天的学习,本人已基本掌握昔频文件的Mat 1汕)处理分。
因为音频水印无法继续. 我矛口关镇放弃音频转向图1眾方向现在我组四个人两两合作祁做数字图像DCT域水印处理根据组员的反映我们祁遇到过如下难题:1.不理解DCT与阡T到砍升何羞异;2.门限值旳问想.3•国保尺才辽大.夭法傅列堵栗;4.;5.水印旳密起;DCT算法的基matlab关键代码解释离败金弦变换(Diserete Cosine Transform)简称DCT变换。
离敵余弦变换姐曲立叶变换的一种特殊情况. 在傅立叶级数展开式中. 如果被展开的函数是实偶函数,那么其傅立。
十级数中只包含余弦项. 再将其离散f匕可导出离放余弦变换.因此余弦变换与傅里叶变换一样冇明确的物理怠义,DCT变换避免了傅里叶变换中的复数运其. 它是基于卖数的正交变换C在数手囲俅处理中使用的是二维IICT. 对一梅\1桦田flfc£(x, y) • 它的DCT交换打M-LN-L2 (2X + l)un (2y + 1)VTTF(W =麻C(u)C(v) 乂2. KW—2M—cos―2N—x=0 y=0其中 v=0, lr 2, ......N-lU=0, lr 2, •M -la uv=0 .1 u, v * 0 二维DCT 变换时一种线性变焕. 可以分解为两个一维DCT 变换的乘积间频率上,不同的频域糸数代农该频率成分在质曲侬中的比量。
图像数字水印Matlab源代码
图像数字⽔印Matlab源代码1、运⾏MAIN.m即可开始⽔印的嵌⼊和提取。
2、⽂件夹中的两幅图⽚为载体图像和⽔印图像。
3、其他⽂件为主程序所调⽤的⾃定义函数,说明如下:sdwt.m:对图像依视觉能量进⾏树状⼩波分解embed.m:对标记的嵌⼊点进⾏⽔印嵌⼊nembed.m:对每个节点实施⽔印嵌⼊sidwt.m:对嵌⼊后的树形⼦图以⼩波逆变换进⾏重组sdwt_ex.m:依密钥树对含⽔印图像进⾏分解extract.m:依密钥树抽取⽔印nextract.m:对每个节点实施⽔印抽取jadeR.m:JADE算法,⽤于实现ICAfuse_pca.m:PCA算法,⽤于实现融合rand_orth.m:⽣成混叠矩阵随机数MAIN.m 主程序%-------------------⽔印嵌⼊------------------------------------------------while 1clear;c=0.3;a=imread('lina.jpg');%原图像b=imread('changsha.bmp')*255;%⼆值⽔印图像[m1,n1]=size(a);[m2,n2]=size(b);e0=(sum(sum(a.^2)))/(m1*n1);e0=c*e0;%计算基准能量[t,tkey]=sdwt(double(a),'db2',m2,n2,e0);%树状⼩波分解[t,tkey]=embed(t,tkey,b);%嵌⼊⽔印aw=sidwt(t,'db2');%重组figure(1);subplot(1,2,1);imshow(uint8(a));title('原图');subplot(1,2,2);imshow(uint8(aw));title('嵌⼊图');imwrite(uint8(aw),'watermark.jpg');% csvwrite('key.txt',reshape(tkey,m2,n2));v1=m1*m1*255*255;v2=sum(sum((double(a)-aw).^2));snr=10*log10(v1/v2);% 峰值信噪⽐snr。
图像数字水印+matlab程序
第三章图像数字水印的方案图像数字水印的技术方案在数据库中存储在国际互联网上传输的水印图像一般会被压缩,有时达到很高的压缩比。
因此,数字水印算法所面临的第一个考验就是压缩。
JPEG和EZW(Embedded Zero-Tree Wavelet)压缩是最常见的两种压缩方法。
JPEG是基于离散余弦变换域的压缩方法,而EZW是基于小波变换域的压缩方法。
前人的研究证明采用与压缩算法相同的变换域水印方法,对于压缩的稳健性较强。
因此,我研究图像文件水印算法主要集中在变换域算法及利用人眼视觉特性上。
数字水印的嵌入要求即要考虑视觉透明性,又要保证嵌入水印后图像的稳健性,这两个方面存在着矛盾。
保证视觉透明性,就要将水印嵌入到人眼不敏感区,也就是嵌入到图像的高频分量中。
而多数图像处理方法对于图像高频部分的损坏程度较高,如有损压缩、高频滤波等。
水印很容易在经历图像处理的过程中丢失。
这样,则无法保证图像数字水印的稳健性。
如果要获得很好的稳健性,数字水印应加在人眼敏感的低频部分,图像的大部分能量集中在低频部分,如果对于低频部分进行处理,水印固然会失去,而图像也没有了利用价值,然而,水印的嵌入会对图像的质量有非常大的影响,这又无法保证视觉透明性。
数字水印算法的实现基本分为三个部分:宿主图像的变换,水印的嵌入和水印的检测,分别描述如下。
基于DCT域的图像数字水印技术离散余弦变换(Discrete Cosine Transform)属于正交变换图像编码方法中的一种。
正交变换图像编码始于1968年。
当时安德鲁斯(Andrews)等人发现大多数自然图像的高频分量相对幅度较低,可完全舍弃或者只用少数码字编码,提出不对图像本身编码,只对其二维傅立叶(DFT)系数进行编码和传输。
但DFT是一种正交变换,运算量很大,常常使实时处理发生困难,第二年他们就用Walsh-Hadamard变换(WHT)取代DFT可以使运算量明显减少,这是因为WHT变换只有加减法而无需乘法。
基于DCT域的图像数字水印算法及matlab实现
2 DC T变换
离散余弦变换 ( D i s c r e t e C o s i n e T r a n s f o r m,DC T)是 基于 实数范围内的正交变换 ,是数字信号处理 中最常应用 的线 性 变换 之 一 ,它很 好地 体 现 了 二维 信 号 的相 关特 性 。 DC T算法复杂度中等 ,变换后能量聚集 ,具备很好的去相 关能 力 和能 量 的 压缩 能 力 ,所 以 在数 字 信 号压 缩 和 图像 压
在水印技术中受到广泛重视 。 DC T变 换 将 二 维 图像 分 解 到 一 组 不 同 的 空 间频 率
于数字化 ,一维、二维信号的传播越来越大众化 ,版权侵
犯 行 为也 越 来越 猖 狂 。为 了保 护 知 识产 权 ,人 们 发 明 了一 种将特定数字等信息放入到多媒体中的方法 ,用来标识媒
c ㈨c f v ) F v ) c o s — z( 2 x+1 ) u c o s x ( 2 y+ 1 ) v
其 中 X,Y为 空 间采 样值 ,u ,v为频 域采样 值 。 离散余 弦变 换水 印嵌 入算 法 数字 图像水印算法选择黑 白二值化灰度 图像作为数字 水 印信 息 ,根 据水 印 图像 的 黑 白二 值性 选 择不 同 的嵌 入 内 部 系数 ,并 将 承 载 图像 进 行 8 × 8 的 分 块 ,将 数 字 图像 水
体等的所有权等信息 ,这一技 术就是数字水印技术。基本 要求有:透明性 ,是指在宿主数字媒体 中嵌进一定量的数 字 水 印信 息 后 ,不 会 引起 原媒 体 的 明 显降 质 现象 ,隐藏 信 息不易察觉;鲁棒性 ,指数字水印能对施加于宿主媒体的 各种操作 ( 如滤波 、有损压缩和 剪切等)具有抗干扰性 , 即水 印信 息 不 能 因为 某种 变 换 操作 而 丢失 ; 安全 性 ,是 指
(完整word版)基于MATLAB的数字水印算法实现
数字水印作为一门新的学科,自 1993 年 Tirkel 等人正式提出到现在十几年里, 国内外对数字水印的研究都引起了极大的关注,从最初的版权保护, 已扩展到多媒体技术, 广播监听, in-ternet 等多个领域.数字水印是永久镶嵌在其他数据( 主要指宿主数据) 中具有可鉴别性的数字信号或数字模式,其存在不能影响宿主数据的正常使用.为了使数字水印技术达到一定的设计要求,当前水印数据一般应具备不可感知性(imperceptible) 、鲁棒性(Robust)、可证明性、自恢复性和安全保密性等特点。
在数字水印技术中, 水印的数据量和鲁棒性构成了一对基本矛盾.理想的水印算法应该既能隐藏大量数据,又可以抗各种信道噪声和信号变形。
然而在实际中,这两个指标往往不能同时实现,实际应用往往只偏重其中的一个方面.如果是为了隐蔽通信,数据量显然是最重要的, 由于通信方式极为隐蔽,遭遇敌方篡改攻击的可能性很小,因而对鲁棒性要求较为不高。
但对保证数据安全来说,情况恰恰相反, 各种保密的数据随时面临着被盗取和篡改的危险, 对鲁棒性的要求很高, 而对隐藏数据量的要求则居于次要地位。
典型的数字水印系统至少包含两个组成部分— - 水印嵌入单元和水印检测与提取单元.将水印信息进行预处理后加入到载体中,称为嵌入。
从水印化数据中提取出水印信息或者检测水印信息的存在性称为水印的提取和检测.数字水印算法主要是指水印的嵌入算法, 而提取算法往往被看成是嵌入算法的逆变换。
当前典型的嵌入算法主要被分为空间域水印算法和变换域水印算法。
DCT 变换域算法是数字水印算法的典型代表, 也是数字水印中较为常用的一种稳健的算法。
其算法思想是选择二值化灰度图像作为水印信息,根据水印图像的二值性来选择不同的嵌入系数, 并将载体图像(原始图像)进行8×8 的分块,再将灰度载体图像( 原始图像)进行DCT变换.然后,将数字水印信息的灰度值直接植入到载体灰度图像的DCT 变换域中, 实现水印的嵌入。
数字水印matlab程序
clear all;close all;clc;V=double(imread('D:\lena\lena.jpg'));imshow(mat2gray(V));[i u]=size(V); %计算V的规格r=100; %设置分解矩阵的秩W=rand(i,r) %初始化WH,为非负数H=rand(r,u)maviter=100; %最大迭代次数for iter=1:maviterW=W.*((V./(W*H))*H'); %注意这里的三个公式和文中的是对应的W=W./(ones(i,1)*sum(W));H=H.*(W'*(V./(W*H)));endimg_V=W*H;figure;imshow(mat2gray(img_V));首先读入原始图象并设置参数,然后嵌入水印信息,程序代码如下:clear%size=256;block=8;blockno=size/block;LENGTH=size*size/64;Alpha1=0.02; Alpha2=0.1; T1=3; I=zeros(size,size); D=zeros(size,size);BW=zeros(size,size); block_dct1=zeros(block,block);%产生水印序列并对其排序randn('seed',10);watermark1=randn(1,LENGTH);subplot(2,2,1);plot(watermark1);title('watermarc:Gaussian noise');subplot(2,2,3);title('edge of origine image')[Y0,I0]=sort(watermark1);%%读入原图象trueImage=imread('H:\Documents and Settings\sunhw\My Documents\My Pictures\biaozhun.bmp');alfa=.1;LENGTH=2500;subplot(2,2,2);imshow(trueImage);title('origine image:I');%%对原图象进行DCT变换dctF1=dct2('H:\Documents and Settings\sunhw\My Documents\MyPictures\biaozhun.bmp');[m,n]=size(dctF1);%%找出水印嵌入位置(幅值较大的n个频域成分)A=dctF1(:);[Y1,I1]=sort(A);x=m*n;k=LENGTH;M=zeros(x,1);%%修改幅值较大的n个频域成分的幅值,嵌入水印(因为两个问题不同,所以有两个注释符)for i=1:xif k>=1M(x)=Y1(x)*(1+alfa*Y0(k));k=k-1;elseM(x)=Y1(x);endx=x-1;endN=zeros(x,1);x=m*n;for i=1:xN(I1(i))=M(i);enda=1;for j=1:nfor i=1:mdctF2(i,j)=N(a);a=a+1;endend%%DCT反变换,得到嵌入水印的图象idctF1=idct2(dctF2);subplot(2,2,4);imshow(log(abs(idctF1)),[ ]);title('embeded image:D');%endI=imread('D:\lena\1.jpg');disp(I);I=double(I)/255;disp(I);I=ceil(I);%%%%%%%%%%显示水印图像%%%%%%%%%%%%%figure(1);subplot(2,3,1);imshow(I),title('水印图像')dimI=size(I);rm=dimI(1);cm=dimI(2);%%%%%%%%%%%%%%%5 以下生成水印信息 %%mark=I;alpha=0.05;V=imread('D:\lena\lena.jpg');[i u]=size(V); %计算V的规格r=100; %设置分解矩阵的秩W=rand(i,r) %初始化WH,为非负数H=rand(r,u)maviter=100; %最大迭代次数for iter=1:maviterW=W.*((V./(W*H))*H'); %注意这里的三个公式和文中的是对应的 W=W./(ones(i,1)*sum(W));H=H.*(W'*(V./(W*H)));endk1=H;psnr_cover=double(V);subplot(2,3,2),imshow(a0,[]),title('载体图像');[r,c]=size(a0);cda0=blkproc(a0,[8,8],'dct2'); %%%%%%%%%%%%%%%%%%%% 嵌入 %%%%%% cda1=cda0; % cda1 = 256_256for i=1:rm % i=1:32for j=1:cm % j=1:32x=(i-1)*10;y=(j-1)*10;if mark(i,j)==1k=k1;elsek=k2;endcda1(x+1,y+8)=cda0(x+1,y+8)*(1+alpha*k(1));cda1(x+2,y+7)=cda0(x+2,y+7)*(1+alpha*k(2));cda1(x+3,y+6)=cda0(x+3,y+6)*(1+alpha*k(3));cda1(x+4,y+5)=cda0(x+4,y+5)*(1+alpha*k(4));cda1(x+5,y+4)=cda0(x+5,y+4)*(1+alpha*k(5));cda1(x+6,y+3)=cda0(x+6,y+3)*(1+alpha*k(6));cda1(x+7,y+2)=cda0(x+7,y+2)*(1+alpha*k(7));cda1(x+8,y+1)=cda0(x+8,y+1)*(1+alpha*k(8));endend%%%%% 嵌入水印后图像 %%%%%%%%%%%%%%a1=blkproc(cda1,[8,8],'idct2');a_1=uint8(a1);imwrite(a_1,'withmark.bmp','bmp');subplot(2,3,3),imshow(a1,[]),title('嵌入水印后的图像');size=256;block=8;blockno=size/block;%一行有32格LENGTH=size*size/64;Alpha1=0.025;Alpha2=0.1;T1=3;I=zeros(size,size);%产生全矩阵D=zeros(size,size);BW=zeros(size,size);Block_dct1=zeros(block,block);%产生水印,并显示水印信息;subplot(3,2,1);Info='dcf';InfoStrSize=length(Info);%将字符串转换为位数组array=zeros(1,InfoStrSize*8);for m=1:InfoStrSizeInfochar=double(Info(m)); %% 'c'为99for n=1:8array(8*(m-1)+n)=bitget(Infochar,n);%%获得Infochar第n位的值 endendplot(array);title('原始水印信息');%显示原图subplot(3,2,2);i=imread('lena.bmp');imshow(i,[]);title('原始图像')%显示prewitt为算子的边缘图BW=edge(i,'prewitt');%BW=edge(I,’Roberts’);%BW=edge(I,’Sobel’);%BW=edge(I,’zerocross’);subplot(3,2,3);imshow(BW);Title('原始图像边缘图');%嵌入水印l=1;k=1;for m=1:blocknofor n=1:blocknox=(m-1)*block+1; y=(n-1)*block+1;%算出每格图像的坐标(x,y),block=8,8*8的图像小格block_dct1=H(x:x+block-1,y:y+block-1);%取原始图像小格中的像素点到block_dct1矩阵中。
基于DCT域的水印嵌入和提取
14电信温美松1428403048 9、基于DCT域的水印算法此程序对原始图像以及水印图像有一定要求:1)原始图像不能有大片灰度均匀的地方,否则大量子块方差相等,嵌入时标记、提取时比对,都会错乱;2)原始图像长、宽是8的整数倍最好;3)水印图像总像素点必须少于原始图像8*8子块数,最好是通过MATLAB查看原始图像方最大且不等的前n块,限制水印图像总像素点小于等于n。
MATLAB函数——嵌入:clcclear allk = 20;block_size = 8;DCT_coef = [0,0,0,1,1,1,1,0;0,0,1,1,1,1,0,0;0,1,1,1,1,0,0,0;1,1,1,1,0,0,0,0;1,1,1,0,0,0,0,0;1,1,0,0,0,0,0,0;1,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0];orig_image = double(imread('woman2.jpg'));%原始图像orig_image_show = orig_image;%用于显示原图[Hc,Wc] = size(orig_image);c = Hc/8;d = Wc/8;m = c*d;% 将原图分为m个8*8块watermark = double(imread('wenmeisong.jpg'));%水印图像,白色为目标watermark_show = watermark;%用于显示水印[Hm,Wm] = size(watermark);%水印尺寸n = Hm*Wm;%水印图像总像素点n%reshape将水印按列重组为一维向量%round将序列四舍五入,通过除以256将watermark转为0(背景)、1(目标)二值watermark = round(watermark./256);watermark = reshape(watermark,1,Hm*Wm);xx = 1;mean = zeros(1,c*d);%预先分配内存variance = mean;%预先分配内存%求方差for j = 1:cfor i = 1:dmean(xx)=1/64*sum(sum(orig_image(((1+(j-1)*8):j*8),((1+(i-1)*8):i*8)))); variance(xx)=1/64*sum(sum((orig_image(1+(j-1)*8:j*8,1+(i-1)*8:i*8)-mean(xx)).^2));xx = xx+1;endend%将方差升序排列存于A,长度为c*d,即子块数mA = sort(variance); % 16506A = fliplr(A);%最终降序排列%取出方差最大的前n块,长度为n,即水印像素数B = A(1:n);%标记水印信息到方差最大的前n块variance_o = zeros(1,c*d);for g = 1:nfor h = 1:c*dif B(g) == variance(h)variance_o(h) = watermark(g);h = c*d;endendendwatermark_vector = variance_o;watermarked_image = orig_image;%准备嵌入的图像%设置MATLAB随机数生成器状态J,作为系统秘钥K%MATLAB只要知道初始状态,就确定唯一的伪随机序列rand('state',7);%根据当前的随机数生成器状态,生成0、1的伪随机序列,长度为22pn_sequence_zero = round(rand(1,sum(sum(DCT_coef))));%嵌入水印x=1;y=1;for kk=1:m %一共m个子块%分块DCT变换dct_block = dct2(orig_image(y:(y+block_size-1),x:(x+block_size-1)));%纹理大并且被标示的水印信息为1(目标)的块在DCT中频系数嵌入伪随机序列zz=1;if watermark_vector(kk)==1;for ii=1:block_sizefor jj=1:block_sizeif (DCT_coef(jj,ii)==1)dct_block(jj,ii)=dct_block(jj,ii)+pn_sequence_zero(zz)*k;zz=zz+1;endendendend%分块DCT逆变换watermarked_image(y:(y+block_size-1),x:(x+block_size-1))=idct2(dct_block);if (x+block_size)>Wcx=1;if(y+block_size)>Hcy=1elsey=y+block_size;endelsex=x+block_size;endendwatermarked_image_int=uint8(watermarked_image);%生成并输出嵌入水印后的图像imwrite(watermarked_image_int,'dct2_A.jpg','jpg'); %显示嵌入水印后的图像figure(1);subplot(131)imshow(orig_image_show,[])xlabel('原图像');subplot(132)imshow(watermark_show,[]);xlabel('水印图像')subplot(133)imshow(watermarked_image_int,[]);xlabel('嵌入水印后的图像')实验结果:MATLAB程序——提取水印:clcclear allblock_size = 8;%zig_zag扫描位置DCT_coef=[0,0,0,1,1,1,1,0;0,0,1,1,1,1,0,0;0,1,1,1,1,0,0,0;1,1,1,1,0,0,0,0;1,1,1,0,0,0,0,0;1,1,0,0,0,0,0,0;1,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0];orig_image = double(imread('woman2.jpg'));%读入原始载体图像watermarked_image = double(imread('dct2_A.jpg'));%待检测图像[Hw,Ww]=size(watermarked_image);%待检测图像尺寸c = Hw/8;d = Ww/8;m = c*d;orig_watermark = double(imread('shuiyinsong3.jpg'));%读入原水印[Ho,Wo] = size(orig_watermark);n = Ho*Wo;%设置相同的随机数生成器状态J,作为检测时的系统秘钥%生成相同伪随机序列,长度同为22rand('state',7);pn_sequence_zero = round(rand(1,sum(sum(DCT_coef))));%提取水印x=1;y=1;for kk = 1:m %m个子块%对待检测图像进行分块DCT变换dct_block1 = dct2(watermarked_image(y:(y+block_size-1),x:(x+block_size-1)));%对原始图像进行分块DCT变换dct_block2 = dct2(orig_image(y:(y+block_size-1),x:(x+block_size-1)));tt=1;for ii = 1:block_sizefor jj = 1:block_sizeif DCT_coef(jj,ii)==1%取出DCT中频区域的信息sequence(tt) = dct_block1(jj,ii)-dct_block2(jj,ii);tt = tt+1;endendend%计算相关性if sequence == 0;correlation(kk) = 0;elsecorrelation(kk) = corr2(pn_sequence_zero,sequence);end%换行if x+block_size > Wwx = 1;if y+block_size >Hwy=1;elsey = y+block_size;endelsex = x+block_size;endend%相关性大于0.5嵌入,否则表明未被嵌入for kk = 1:mif correlation(kk)>=0.5watermark_vector(kk) = 1;elsewatermark_vector(kk) = 0;endend%计算原始图像的方差xx = 1;for j = 1:cfor i = 1:dmean(xx)=1/64*(sum(sum(orig_image(((1+(j-1)*8):j*8),((1+(i-1)*8):i*8))))); variance(xx)=1/64*sum(sum((orig_image((1+(j-1)*8:j*8),(1+(i-1)*8:i*8))-mean(xx)).^2));xx = xx+1;endend%取出方差最大的前N块A = sort(variance);A = fliplr(A);%最终降序排列B = A(1:n);%根据原始图像方差最大的前N块的位置把水印信息提取出来variance_o = zeros(1,n);for g = 1:nfor h = 1:mif B(g) == variance(h)variance_o(g) = watermark_vector(h);h = m;endendendwatermark_o = variance_o;%重组水印信息watermark = reshape(watermark_o(1:Ho*Wo),Ho,Wo);%计算提取的水印和原始图像的相似度%sim = corr2(orig_watermark,watermark);%把提取的水印信息保存imwrite(watermark,'watermark.jpg','jpg');figure;subplot(211)imshow(orig_watermark,[]);xlabel('原水印图像');subplot(212)imshow(watermark,[])xlabel('提取出的水印图像');实验结果:提取出的水印,左侧与原图几乎一致,中间略有失真,右侧失真较大。
数字水印技术LSB算法MATLAB源代码
close allclear all;% save start timestart_time=cputime;% read in the cover objectfile_name='E:\Phd\My Paper\Second paper -- Experiment\Experiment\Cover and Secretlmage\le na.bmp:[cover_object,map]=imread(file _n ame);% read in the secret imagefile_name='E:\Phd\My Paper\Second paper -- Experiment\Experiment\Cover and SecretImage\hat.bmp';[secret,map1]=imread(file_ name);secret仁secret;% convert to double for n ormalizatio n, the n back aga insecret=double(secret);secret=fix(secret./2); %rounds the eleme nts of A toward zero, result ing in an array of in tegers secret=uin t8(secret);% determ ine size of cover objectMc=size(cover_object,1); %HeightNc=size(cover_object,2); %Width% determ ine size of secret objectMm=size(secret,1); %HeightNm=size(secret,2); %Width% title the secret object out to cover object size to gen erate watermarkfor ii = 1:Mcfor jj = 1:Ncif (secret(ii,jj)>75)watermark(ii,jj)=255;elsewatermark(ii,jj)=0;endendend% now we set the lsb of cover_object(ii,jj) to the value of watermark(ii,jj)watermarked_image=cover_object;for ii = 1:Mcfor jj = 1:Ncif (watermark(ii,jj)==O)watermarked 」m age(ii,jj)=bitset(watermarked 」m age(ii,jj),1,0);%Set bit certa in positi onelsewatermarked 」m age(ii,jj)=bitset(watermarked 」m age(ii,jj),1,1); %Set bit certa in positi onendendend% write the watermarked image out to a fileimwrite(watermarked 」mage,'lsb_watermarked.bmp','bmp');%==================================Extracti on===========================% determ ine size of watermarked imageMw=size(watermarked 」mage,1); %HeightNw=size(watermarked 」mage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:Mwfor jj = 1:NwRecoveryWatermark(ii,jj)=bitget(watermarked 」m age(ii,jj),1);endend% scale the recovered watermarkRecoveryWatermark=2*double(RecoveryWatermark);%====================================================================%===========================SharpAttack================= SharpedWatermarkImage = watermarked 」m age;H = fspecial('u nsharp',0.001); %the alpha from 0.005 to 0.1 20 numberssharpImage = imfilter(SharpedWatermarklmage,H,'replicate');figure(6);colormap(gray(256));imshow(sharpImage); atattitle('sharp Image');imwrite(sharplmage, gray(256), 'sharplmage.bmp');% determ ine size of watermarked imageMSw=size(sharpImage,1); %HeightNSw=size(sharplmage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:MSwfor jj = 1:NSwRecoverySharpWatermark(ii,jj)=bitget(abs(sharplmage(ii,jj)),1);endend% scale the recovered watermarkRecoverySharpWatermark=2*double(RecoverySharpWatermark);psn rSharp = psn r(RecoveryWatermark, RecoverySharpWatermark)figure(7);colormap(gray(256));imshow(RecoverySharpWatermark,[])title('RecoverySharpWatermark');%====================================================================%%%===========================Gaussia n Blur=================Gaussia nBlurWatermarkedlmage = watermarked_image;H = fspecial('gaussian',size(GaussianBlurWatermarkedlmage),0.035); %the alpha from 0.005 to 0.1 20 numbersGaussia nBlurlmage = imfilter(Gaussia nBlurWatermarkedlmage,H,'replicate');figure(8);colormap(gray(256));imshow(Gaussia nBlurlmage』)title('Gaussia n Blur Image');imwrite(Gaussia nBlurlmage, gray(256), 'Gaussia nBlurlmage.bmp');% determ ine size of watermarked imageMSw=size(Gaussia nBlurlmage,1); %HeightNSw=size(Gaussia nBlurlmage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:MSwfor jj = 1:NSwRecoveryGaussia nBlurWatermark(ii,jj)=bitget(Gaussia nBlurlmage(ii,jj),1);end end% scale the recovered watermarkRecoveryGaussia nBlurWatermark=2*double(RecoveryGaussia nBlurWatermark);psn rBlur = psn r(RecoveryWatermark, RecoveryGaussia nBlurWatermark) figure(9);colormap(gray(256));imshow(RecoveryGaussia nBlurWatermark』) title('RecoveryGaussia nWatermark');% %% %===========================================================% %HistogramhistogramWatermarkedlmage = watermarked」m age;histogramimage = histeq(watermarked_image,10); % from 10 to 200 figure(10);colormap(gray(256));image(histogramimage);title('histogramimage Image');imwrite(histogramimage, gray(256), 'histogramimage.bmp');MSw=size(histogramlmage,1); %HeightNSw=size(histogramlmage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:MSwfor jj = 1:NSwRecoveryHistogramWatermarked(ii,jj)=bitget(histogramlmage(ii,jj),1); endend% scale the recovered watermarkRecoveryHistogramWatermarked=2*double(RecoveryHistogramWatermarked); psn rHistorgram = psn r(RecoveryWatermark, RecoveryHistogramWatermarked) figure(11);colormap(gray(256));imshow(RecoveryHistogramWatermarked,[]) title('RecoveryHistogramWatermarked');%%%% %==========================Noise=============================NoiseWatermarked = watermarked_image;Noiseimage = imno ise(NoiseWatermarked,'gaussia n',0.001);figure(12);colormap(gray(256));imshow(NoiseImage);title(' no iselmage');imwrite(Noiselmage, gray(256), 'no iselmage.bmp');MSw=size(Noiselmage,1); %HeightNSw=size(Noiselmage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:MSwfor jj = 1:NSwRecoveryNoiseWatermarked(ii,jj)=bitget(Noiselmage(ii,jj),1);endend% scale the recovered watermarkRecoveryNoiseWatermarked=2*double(RecoveryNoiseWatermarked);psn rNoise = psn r(RecoveryWatermark, RecoveryNoiseWatermarked)figure(13);colormap(gray(256));imshow(RecoveryNoiseWatermarked,[]) title('RecoveryNoiseWatermarked'); %%===================================================================% display process ing time elapsed_time=cputime-start_time,。
基于MATLAB的DCT域数字水印技术实现
介 了 目前 主 流 数 字水 印算 法 , 出 了 D T域 数 字 盲水 印算 法 。 水 印算 法不 可 见 性 较 好 , J E 压 缩 , 声 , 给 C 该 对 PG 噪 有较 好
的鲁 棒 性 。
关 键 词 :数 字 水 印 ;图像 ;DC T;盲 水 印
中 图分 类 号 : N 5 T 98
d gt l ae mak n c n lg a e o o h c d mi i l st ed gt l o k o y g t r tci n i mo ea d i i tr r i gt h oo y h sb c me ah t n t e a a e c cr ea h ii r sc p r h o e t r n aw e i c aw i p o s
mo e i o t n . n t i ril ,t e c re tman te m ii lw tr a k n l o t m s b e y d s rb d, e DC o i r mp r t I h s at e h u r n i sr a d g t a e r i g a g r h i r f e c e t T d man a c a m i i l i h d gt l d w tr r ig ag rt m r p s dT e e p rme t l e u t d mo s a et a ewae a kn l o t m a i y ii b i a e ma k n o i l a n l h i po oe .h x e s i n a s l e n t t t h tr r i ga g r h s t f s r s r h t m i s
ivsblya dh sg o b sn s rh P n iiit n a o dr u tes o eJ EG o rsina dn ie i o f t Cc mpe so n os.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%Name: Chris Shoemaker
%Course: E ER-280 - Digital Watermarking
%Project: Block DCT Based method, using comparision between mid-band coeffcients % Watermark Embeding
clear all;
% save start time
start_time=cputime;
k=50; % set minimum coeff difference
blocksize=8; % set the size of the block in cover to be used for each bit in watermark
% read in the cover object
file_name='_lena_std_bw.bmp';
cover_object=double(imread(file_name));
% determine size of cover image
Mc=size(cover_object,1); %Height
Nc=size(cover_object,2); %Width
% determine maximum message size based on cover object, and blocksize
max_message=Mc*Nc/(blocksize^2);
% read in the message image
file_name='_copyright.bmp';
message=double(imread(file_name));
Mm=size(message,1); %Height
Nm=size(message,2); %Width
% reshape the message to a vector
message=round(reshape(message,Mm*Nm,1)./256);
% check that the message isn't too large for cover
if (length(message) > max_message)
error('Message too large to fit in Cover Object')
end
% pad the message out to the maximum message size with ones
message_pad=ones(1,max_message);
message_pad(1:length(message))=message;
% generate shell of watermarked image
watermarked_image=cover_object;
% process the image in blocks
% encodes such that (5,2) > (4,3) when message(kk)=0
% and that (5,2) < (4,3) when message(kk)=1
x=1;
y=1;
for (kk = 1:length(message_pad))
% transform block using DCT
dct_block=dct2(cover_object(y:y+blocksize-1,x:x+blocksize-1));
% if message bit is black, (5,2) > (4,3)
if (message_pad(kk) == 0)
% if (5,2) < (4,3) then we need to swap them
if (dct_block(5,2) < dct_block(4,3))
temp=dct_block(4,3);
dct_block(4,3)=dct_block(5,2);
dct_block(5,2)=temp;
end
% if message bit is white, (5,2) < (4,3)
elseif (message_pad(kk) == 1)
% if (5,2) > (4,3) then we need to swap them
if (dct_block(5,2) >= dct_block(4,3))
temp=dct_block(4,3);
dct_block(4,3)=dct_block(5,2);
dct_block(5,2)=temp;
end
end
% now we adjust the two values such that their difference >= k
if dct_block(5,2) > dct_block(4,3)
if dct_block(5,2) - dct_block(4,3) < k
dct_block(5,2)=dct_block(5,2)+(k/2);
dct_block(4,3)=dct_block(4,3)-(k/2);
end
else
if dct_block(4,3) - dct_block(5,2) < k
dct_block(4,3)=dct_block(4,3)+(k/2);
dct_block(5,2)=dct_block(5,2)-(k/2);
end
end
% transform block back into spatial domain
watermarked_image(y:y+blocksize-1,x:x+blocksize-1)=idct2(dct_block);
% move on to next block. At and of row move to next row
if (x+blocksize) >= Nc
x=1;
y=y+blocksize;
else
x=x+blocksize;
end
end
% convert to uint8 and write the watermarked image out to a file watermarked_image_int=uint8(watermarked_image);
imwrite(watermarked_image_int,'dct1_watermarked.bmp','bmp');
% display processing time
elapsed_time=cputime-start_time,
% display psnr of watermarked image
psnr=psnr(cover_object,watermarked_image,Nc,Mc),
% display watermarked image
figure(1)
imshow(watermarked_image,[])
title('Watermarked Image')。