基于Matlab的图像数字水印系统开发-毕业论文_第1页
基于Matlab的图像数字水印系统开发-毕业论文_第2页
基于Matlab的图像数字水印系统开发-毕业论文_第3页
基于Matlab的图像数字水印系统开发-毕业论文_第4页
基于Matlab的图像数字水印系统开发-毕业论文_第5页
免费预览已结束,剩余35页可下载查看

下载本文档

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

文档简介

厦门大学本科毕业论文 1/40 基于 Matlab 的图像数字水印系统开发 摘要摘要 数字水印技术是指在宿主数字媒体(图像、声音、视频)等中嵌入一定量的 数字信息,它不同于传统的数据加密技术,其目的不是限制对数据的存取,而是保证 嵌入的数据不可侵犯和可恢复,是当前数字媒体版权保护的一种有效办法。由于数字 水印技术涉及到的知识面很广,即使是专业人员有时也感到力不从心,那么如何选择 一种有效的编程工具便成为一个亟待解决的问题。本文针对 MATLAB 与 Visual C+ 6.0 软件的各自编程优势,提出了一种利用 Matlab 语言来实现数字水印算法, VC 环境下 开发应用程序界面,通过编译器将二者有效结合起来,从而形成一个完整的图像数字 水印系统。 关键词关键词 数字水印 Matlab Visual C+ 6.0 厦门大学本科毕业论文 2/40 program the digital watermark system with the matlab language Abstract The digital watermark is an item of technology that inserting a few of numerical information to the host numeric media (such as picture, sound, video and so on). It is different from the traditional data encryption technology, its goal is not to limit the data access, but to guarantee the inserted data inviolable and resumable, it is a method which is effective protect the media copyright. Because the digital watermark technology is very difficult, even if the professional also feels very difficulty to program sometimes. So how to choose a kind of effective programming tool becomes a problem which urgently awaits to be solved. This article contrapose the MATLAB and Visual C+ softwares superiority in respective programming, and advance a kind of method that implements the digital watermark algorithm using the Matlab language. It develops the interface of application program, and uses the Matlab compiler to combine the above two kinds of compilers effectively, in order to forms a complete digital watermark demonstration system. keywords digital watermark matlab visual c+ 6.0 厦门大学本科毕业论文 3/40 目目 录录 第一章 引言 .7 第二章 数字水印技术 .9 2.1 数字水印技术的简介.9 2.2 数字水印产生的历史背景.9 2.3 数字水印的基本特性.10 2.4 数字水印技术的复杂性.10 2.5 数字水印技术的常用算法.10 第三章 可实现数字水印技术的高效实用工具MATLAB 12 3.1 MATLAB 简介 12 3.2 MATLAB 的语言特点 .12 3.3 用 MATLAB实现数字水印算法的优点.13 3.4 MATLAB函数介绍 14 3.4.1 数据输入输出函数: .14 3.4.2 图像显示与声音播放: .14 3.4.3 变换频函数: 14 3.4.4 攻击函数15 第四章 数字水印系统模块设计与实现 16 4.1 数字水印系统的总体结构.16 4.2 嵌入水印模块.17 4.1.1 嵌入水印模块功能描述.17 4.1.2 嵌入水印的算法基本框图.17 4.1.3 嵌入水印算法的具体分析.17 4.3 水印提取模块.19 4.3.1 水印提取的功能描述.19 厦门大学本科毕业论文 4/40 4.3.2 水印提取的算法框图.20 4.3.3 水印提取的算法具体分析.20 4.4 水印算法的稳健性验证模块:.21 4.4.1 水印算法稳健性验证的功能描述.21 4.4.2 添加噪音.21 4.4.3 滤波.22 4.4.4 剪切.22 4.4.5JPEG 压缩.22 4.4.6 旋转.23 第五章 MATLAB 与 VC+6.0 的接口实现25 5.1 集成的几种实现方法.25 5.2 配置编译器.26 5.2.1 对 MATLAB 的编译器进行配置.26 5.2.2 对 VC 的编译器进行配置.26 5.3 编写M函数文件27 5.4 将M函数文件转化为脱离 MATLAB 环境的动态链接.27 第六章 总结与展望 29 第七章 致 谢 30 第八章 参考文献 31 厦门大学本科毕业论文 5/40 CONTENTS CHAPTER 1 FOREWORD .7 CHAPTER 2 DIGITAL WARTERMARKING 9 2.1 INTRODUCTION.9 2.2 BACKGROUND.9 2.3 CHARACTERISTIC10 2.4 COMPLEXITY.10 2.5 ARITHMETIC10 CHAPTER 3 TOOL TO IMPLEMENT DIGITAL WARTERMARKINGMATLAB .12 3.1 1INTRODUCTION.12 3.2 MATLABS CHARACTERISTIC.12 3.3 ARITHMETICS EXCELLENCE.14 3.4 MATLABS FUNTION 1INTRODUCTION.14 3.4.1data in/out funtion14 3.4.2picture display and voice play function.14 3.4.3 frequency conversion function.15 3.4.4 attack function.15 CHAPTER 4 WARTERMARKING SYSTEMS DESIGN AND IMPLEMENTATION.17 4.1 STRUCTURE.17 4.2 INPLAY WARTERMARKING MODULE.17 4.1.1 DESCRIBE FOR FUNCTION.17 4.1.2 arithmetic PROCESS PICTURE 19 4.1.3 arithmetic 19 4.3 WARTERMARKING DISTILL MODULE.20 4.3.1 DESCRIBE FOR FUNCTION.20 厦门大学本科毕业论文 6/40 4.3.2 arithmetic PROCESS PICTURE 20 4.3.3 arithmetic 20 4.4 WARTERMARKING ARITHMETICS STABILIZATION VALIDATE MODULE21 4.4.1 DESCRIBE FOR FUNCTION.21 4.4.2add noise21 4.4.3 filter.22 4.4.4cut.22 4.4.5JPEG compress .22 4.5.6 circumgyrate .23 CHAPTER 5 IMPLEMENT THE INTERFACE OF MATLAB AND VC 25 5.1THE IMPLEMENT METHOD OF INTEGRATION 25 5.2CONFIGURE THE COMPILER26 5.2.1 configure the compiler of MATLAB26 5.2.2 configure the compiler of VC.26 5.3 WRITE THE FILE OF M FUNCTION.27 5.4 TRANSFER THE M FUNCTION FILE TO DYNAMIC LINK WHICH IS SEPARATED FROM MATLAB ENVIRONMENT27 CHAPTER 6 CONCLUSIONS AND PERSPECTIVE .29 CHAPTER 7 ACKNOWLEDGES 30 CHAPTER 8 REFERENCES .31 厦门大学本科毕业论文 7/40 第一章第一章 引言引言 随着多媒体和网络技术的迅速发展与广泛应用,数字化媒体(如数字图像、数字视 频和音频等)的传输和获取变得越来越便捷,一方面促进了人类信息的共享,推动了社 会的进步,而另一方面由于其极易复制且复制后的媒体质量与原版几乎没有差异,因 此也带来了数字多媒体的版权问题。数字水印技术作为版权保护的重要手段而得到了 广泛的研究和应用。数字水印技术不同于传统的数据加密,其目的不是限制对数据的 存取,而是保证嵌入的数据不可侵犯和可恢复。其基本要求有:透明性,是指在宿主 数字媒体中嵌入一定量的数 字水印信息后,不会引起原媒体明显的降质现象,隐藏数 据不易察觉,即无法人为地看见或听见;鲁棒性,是指数字水印必须对施加于宿主媒 体的各种变换操作(如 有损压缩、滤波和剪切等)具有免疫性,即水印信息不能因为 施加于宿主媒体的某种变换操作而丢失;安全性,是指数字水印能够抵挡各种蓄意的 攻击,很难被他人 所复制和伪造,只要其不知道控制该算法的密钥。作为传统加密系 统的有效补充办法,从 1993 年 Caronni 正式提出数字水印到现在短短几年里,无论是 在国内还是在国外对数字水印的研究都引起了人们极大的关注。但数字水印技术的发 展还很不成熟,应用也处于初级阶段。在我国,知识产权问题是一个敏感的话题,只 有深入开展数字水印技术的研究,尽快制定我国的版权保护水印标准,才能使我们在 未来可能的国际知识产权纠纷中取得主动权。那么掌握高效的工具,便成为一个必须 解决的问题。本文就针对数字水印本身的特点,介绍了一种高效的实用工具 MATLAB。 MATLAB 是 Mathworks 公司推出的针对数值计算的交互式软件,是一套高效率的数 值计算和可视化软件,具有极其强大的数值分析、矩阵运算、信号处理和图形显示功 能;MATLAB 以其强大的数据处理能力和丰富的工具箱使得他的编程极为简单,可大幅 缩短应用程序开发周期,提高编程效率。但由于其为解释性执行语言,执行效率低、 速度慢,不适应实时性较高场合。而 Visual C+是 Windows 平台下强大的应用程序开 发环境,基于 VC 几乎可以开发从底层软件到直接面向用户的各个方面的软件 MATLAB 是 Mathworks 公司推出的针对数值计算的交互式软件,是一套高效率的数值计算和可 厦门大学本科毕业论文 8/40 视化软件,具有极其强大的数值分析、矩阵运算、信号处理和图形显示功能;MATLAB 以其强大的数据处理能力和丰富的工具箱使得他的编程极为简单,可大幅缩短应用程 序开发周期,提高编程效率。但由于其为解释性执行语言,执行效率低、速度慢,不 适应实时性较高场合。而 Visual C +是 Windows 平台下强大的应用程序开发环境,基 于 VC 几乎可以开发从底层软件到直接面向用户的各个方面的软件。MATLAB 的应用程序 界面开发功能远不如 VC 方便强大,VC 在工程计算方面则要比 MATLAB 繁琐得多。因此 实现 MATLAB 与 VC 的混合编程,可以为科研工作和工程开发提供强大的技术支持。 要实现 VC、MATLAB 混合编程必须解决两方面的问题:一是接口的问题,包括 VC 语言程序对 MATLAB 函数的调用及数据的互传;二是数据组织问题。 厦门大学本科毕业论文 9/40 第二章第二章 数字水印技术数字水印技术 2.12.1 数字水印技术的简介数字水印技术的简介 数字水印技术是指在宿主数字媒体(图像、声音、视频)等中嵌入一定量的数字 信息,它不同于传统的数据加密技术,其目的不是限制对数据的存取,而是保证嵌入 的数据不可侵犯和可恢复,是当前数字媒体版权保护的一种有效办法。 2.22.2 数字水印产生的历史背景数字水印产生的历史背景 随着多媒体技术和数字传输的迅猛发展,因特网和 CD-ROM 上的数字媒体应用正在 呈爆炸式的增长。数字信号处理和网络传输技术可以对数字媒体(数字声音、文本、 图像和视频)的原版进行无限制的任意编辑、修改、拷贝和散布,造成数字媒体作品 的原创者巨大的经济损失,并对数字媒体的安全权限提出了挑战,促使数字媒体的知 识产权保护和信息安全问题日益突出,并已成为数字世界的一个非常重要和紧迫的议 题。 目前的信息安全技术基本上以密码学理论为基础的,采用的传统方法是将文件加 密成密文的密钥系统或公钥系统,提高加密、解密系统密级的方法是不断增加密钥的 长度。这种将文件加密成密文的方法,在将密文解开后就失去了保密意义;加密的密 文还容易引起许多好事者的兴趣,触发他们积极破译的激情。数字签名技术是一种较 新的技术。已用于检验短信息的正式可靠性,虽然数字签名的标准已被许多国家采纳, 可以通过私有密钥对数字产品进行签名,检测算法可用来检测产品的内容是否符合相 应的签名,但因对多媒体中需要大量的签名,因而对多媒体保护的不适用也不方便。 由此可见目前的保密方法在当今广泛应用的 Internet 多媒体信息安全中难以起到全面 保障的作用。数字水印技术是九十年代中期信息安全领域的一个新方向。它是指用信 号处理的方法 在数字化的多媒体数据中嵌入隐蔽的水印标记,并使人的感知系统察觉 厦门大学本科毕业论文 10/40 不出来,隐藏的水印标记只有通过专用的检测器才能提取出来的一种最新的多媒体保 密技术。 数字水印技术源于是在开放的网络环境下保护多媒体版权的新型技术,它可验证 数字产品的版权拥有者、识别销售商、购买者或提供关于数字产品内容的其他附加信 息,并将这些信息以人眼不可见的形式嵌入在数字图像或视频序列中,用于确认数字 产品的所有权和跟踪侵权行为。除此之外,它在证据篡改鉴定,数据的分级访问,数 据产品的跟踪和检测,商业视频广播和因特网数字媒体的服务付费,电子商务的认证 鉴定,商务活动中的票据防伪等方面也具有十分广阔的应用前景。自 93 年尤其是 95/96 年以来引起工业界的浓厚兴趣,已成为国际上非常活跃的研究领域。 2.32.3 数字水印的基本特性数字水印的基本特性 数字水印应用在数字作品的版权保护中必须满足以下基本条件: (1)图像在加入水印后不能改变图像的视觉效果,水印在通常的视觉条件下不可见。 (2)加过水印的图像通过普通的图像处理技术和标准压缩后水印仍保持在图像之中并 能被检测出来。(3)未经授权者不能伪造水印或检测出水印。(4)水印的图像在经 受印刷、打印、扫描等模数和数模转换后仍能检测出水印。 2.42.4 数字水印技术的复杂性数字水印技术的复杂性 数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉感知理论、扩频技 术信号处理技术、数字图像处理技术、多媒体技术、模式识别技术、算法设计等理论, 用到经典的 DFT(Discrete Fourier Transform) 、DCT(Discrete Cosine Transform)变换和 近代最先进的数学工具-小波(Wavelet)。 数字水印又是一个横跨计算机科学、密码学、数字、数字通信等多门学科,并 与 Internet 的发展密切相关的交叉科学。数字水印的多学科性导致数字水印技术研究的 难度和复杂性。所以,针对数字水印技术本身的跨学科特点,找出一种合适的编程工 具,往往可以起到事半功倍的效果。 厦门大学本科毕业论文 11/40 2.52.5 数字水印技术的常用算法数字水印技术的常用算法 数字水印算法一般可分为两种空域法和频域法。频域法加入数字水印的原理是首 先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有 DWT、DCT、 DFT、WP 和分形。然后,对加入了水印信息的信号进行频域反变换 (IDWT、IDCT、DFT、WP),得到含有水印信息的信号。频域法检测水印的原理是将原 始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算, 得出水印信息。如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声, 就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印 的检测有两个结束点。频域法有以下优点:(1)嵌入的水印信号能量可以分布到空域 的所有像素上,有利于保证水印的不可见性;(2)视觉系统(HVS)的某些特性(如 频率的掩蔽特性)可以更方便地结合到水印编码过程中;(3)频域法可与国际数据压 缩标准兼容,从而实现在压缩域(compressed domain)内的水印编码。所以我们也以 频域法为主介绍 MATLAB 在数字水印技术中的使用。 DCT 法(Discreste Cosine Transformation) 对原始信号做 DCT 变换的算法:利用随机数发生器产生标准正态序列作为水印信 息对图像进行整体 DCT 变换后,选取除去 DC 系数之外部分较低频率系数叠加水印信息。 对原始信号分块后,再作 DCT 的算法:把图像进行 8*8 分块,将一个二进制序列 作为水印放入 DCT 的中频区;有些学者则计算整个图像的 DCT,把一个实数序列嵌入 DCT 的中频系数上。选择中频区的好处是一方面尽量减少嵌入信息对图像主观视觉的影 响;同时,尽量避免有损压缩对水印信息可能带来的损失。在我的数字水印演示系统 中将采用这个算法。 还有一种 DCT 方法就是把水印信息嵌入到高频系数上,但是采用这种方法,抗压 缩性非常差。 厦门大学本科毕业论文 12/40 第三章第三章可实现数字水印技术的高效实用工具可实现数字水印技术的高效实用工具MatlabMatlab 3.13.1 MATLABMATLAB 简介简介 Matlab 是当前在国内外十分流行的工程设计和系统仿真软件包。它是 MathWorks 公司于 1982 年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、 信号处理和图形显示于一体,构成了一人方便的、界面友好的用户环境。 Matlab 的推出得到了各个领域专家、学者的广泛关注,其强大的扩展功能为各个 领域的应用提供了基础。由各个专家学者相继推出了 MATLAB 工具箱,其中的信号处理 (signal processing)、控制系统(control system)、神经网络(neural network)、图 像处理(image processing)、鲁棒控制(robust control)、非线性系统控制设计 (nonlinear system control design)、系统辨识(system identification)、最优化 (optimization)、模糊逻辑(fuzzy logic)、小波(wavelet)、通信(communication)、 统计(statistics)等工具箱,这些工具箱给各个领域的研究和工程应用提供了有力的 工具,借助于这些“巨人肩上的工具”,各个层次的研究人员可直观、方便地进行分 析、计算及设计工作,从而大大地节省了时间。 3.23.2 MATLABMATLAB 的语言特点的语言特点 一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不 同于其他语言的特点,正如同 FORTRAN 和 C 等高级语言使人们摆脱了需要直接对计算 厦门大学本科毕业论文 13/40 机硬件资源进行操作一样,被称作为第四代计算机语言的 MATLAB,利用其丰富的函数 资源,使编程人员从繁琐的程序代码中解放出来。MATLAB 最突出的特点就是简洁。 MATLAB 用更直观的,符合人们思维习惯的代码,代替了 C 和 FORTRAN 语言的冗长代 码。MATLAB 给用户带来的是最直观,最简洁的程序开发环境。以下简单介绍一下 MATLAB 的主要特点: (1)语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB 程序书写形式自由, 利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由 于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用 MATLAB 进 行科技开发是站在专家的肩膀上。 2)运算符丰富。由于 MATLAB 是用 C 语言编写的,MATLAB 提供了和 C 语言几乎一 样多的运算符,灵活使用 MATLAB 的运算符将使程序变得极为简短。 3MATLAB 既具有结构化的控制语句(如 for 循环,while 循环,break 语句和 if 语 句),又有面向对象编程的特性。 (4)程序限制不严格,程序设计自由度大。例如,在 MATLAB 里,用户无需对矩 阵预定义就可使用。 5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统 上运行。 (6)MATLAB 的图形功能强大。在 FORTRAN 和 C 语言里,绘图都很不容易,但在 MATLAB 里,数据的可视化非常简单。MATLAB 还具有较强的编辑图形界面的能力。 (7)MATLAB 的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于 MATLAB 的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度 较慢。 (8)功能强大的工具箱是 MATLAB 的另一特色。MATLAB 包含两个部分:核心部分 和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功 能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模 仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而 学科性工具箱是专业性比较强的,如 control,toolbox,signl proceessing toolbox,commumnication toolbox 等。这些工具箱都是由该领域内学术水平很高的专 家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的 研究。 厦门大学本科毕业论文 14/40 (9)源程序的开放性。开放性也许是 MATLAB 最受人们欢迎的特点。除内部函数 以外,所有 MATLAB 的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源 文件的修改以及加入自己的文件构成新的工具箱。 3.33.3 用用 MatlabMatlab 实现数字水印算法的优点实现数字水印算法的优点 Matlab 集成了 DCT、DWT 等函数有丰富的小波函数和处理函数,这不仅方便了研究 人员,而且使源程序简洁明了、易实现。强大的数学运算功能,能够方便、高效地实现 音频、视频中的大量矩阵运算。提供了图像处理工具箱、小波分析工具箱、数字信号 处理工具箱。用来编制跨数字图像处理技术、数字信号处理等多学科的数字水印技术 是非常好的选择。而且 MATLAB 与目前最强大的编程工具Visual C+ 6.0 具有良好 的接口。 3.43.4 MatlabMatlab 函数介绍函数介绍 在介绍函数之前,必须明确一点:编写水印程序时,处理的图像数据是二维信号, 而声音信号是一维信号。在这里我们仅仅简单介绍与水印有关的函数,具体函数的用 法请读者参考文献2。 3.4.1 数据输入输出函数: imread()和 imwrite():可以读写 bmp,jpg/jpeg, tif/tiff, png, hdf, pcx, wxd 格式文件。读索引文件时,还可以得到相应的调色板数据。 auread()、auwrite()、wavread()和 wavwrite():可以方便地读写 au 和 wav 文件,并可控制其中的位及频率。 3.4.2 图像显示与声音播放: imshow():显示一幅图像; 厦门大学本科毕业论文 15/40 imfinfo():可以得到读入图像的信息。如文件的大小、格式、格式版本号、图像 的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等 wavplay():播放 wav 声音文件。当然,也可以把处理后的 wav 文件保存后再用其 它工具播放。 wavrecord():可以对处理后的 wav 文件进行录音。 3.4.3 变换频函数: 对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB 中对一维 信号和二维信号分别提供了各种变换和逆变换函数。 离散余弦变换(DCT) dct(),dct2():分别实现一维信号和二维信号的 DCT(离散余弦变换); idct(),idct2():分别实现一维信号和二维信号的 IDCT(逆向离散余弦变换); 离散傅里叶变换(DFT) fft(),fft2():分别实现一维信号和二维信号的 DFT(离散傅里叶变换); ifft(),ifft2():分别实现一维信号和二维信号的 IDFT(逆向离散傅里叶变换); 离散小波变换(DWT) dwt(),dwt2():分别实现一维信号和二维信号的 DWT(离散小波变换); idwt(),idwt2():分别实现一维信号和二维信号的 IDWT(离散小波变换); Wavedec2():多级二维小波分解函数; Waveinfo():提供小波包中所有的小波信息; 另外,MATLAB 中还有丰富的小波包处理函数,有兴趣的读者可参考文献2。 3.4.4 攻击函数 攻击函数对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水 印算法必须经过各种攻击测试才能对之做出客观的评价。MATLAB 中的许多函数可以 直接用来做的攻击测试。如下面的函数: 旋转:rotate()可以对图像进行任意角度的旋转; 剪裁:imcrop()可以按精确定位的各点坐标进行剪裁; 厦门大学本科毕业论文 16/40 放大/缩小:imresize()可以以指定的插值方法来对图像进行放大和缩小。 滤波:filter()和 filter2()可实现对一维信号和二维信号的滤波; 压缩:imwrite()中 jpg 和 quality 参数能对图像进行可控 jpg 压缩; 抖动:dither()对图像进行抖动;抖动攻击考验水印鲁棒性的一个很好的攻击;加各 种噪声:imnoise()可以对图像加入各种噪声,如白噪声、椒盐噪声等,加入噪声是对 水印鲁棒性考验的一种常见的攻击; 第四章第四章数字水印系统模块设计与实现数字水印系统模块设计与实现 4.14.1 数字水印系统的总体结构数字水印系统的总体结构 厦门大学本科毕业论文 17/40 图像数字水印系统的总体结构 嵌入 水印 模块 水印 提取 模块 水印 算法 稳健 性验 证模 块 获 取 原 图 像 获取 水印 图像 存储 和显 示嵌 入水 印的 图像 获取 含有 水印 的原 始图 像 获取含 有水印 置乱的 随机序 列 恢复 水印 图像 获取 含水 印图 像 对 图 像 进 行 处 理 提取 水印 图像 并显 示, 得到 相关 系数 4.24.2 嵌入水印模块嵌入水印模块 4.1.1 嵌入水印模块功能描述 输入原始图像的地址,载入原始图像,再输入将要嵌入水印图像的地址, 把水印图像嵌入原始图像,输出含有水印的图像。 厦门大学本科毕业论文 18/40 4.1.2 嵌入水印的算法基本框图 嵌入水印的算法基本框图如图 4-1 所示 图 4-1 嵌入水印的算法基本框图 4.1.3 嵌入水印算法的具体分析 1原始图像分割为互不覆盖的 88 子块,记为 Bm=fm(i,j),0 m =0,1,.,M-1 7m =0,1,.,M-1 ,对 Bm 进行 DCT 变换,得到: DCT ,0 7m =0,1,.,M-1 2水印的预处理 我们设二值水印表示为: , ,很 明显看出,如果不将水印的空域关系打乱,直接把可视的二值水印加到原始图像的中 频段,那么一个简单的图像剪切操作就会把水印破坏掉,因此,在嵌入水印之前,首 先对其进行置乱处理,本系统采用一个时间复杂度较低的随机算法来打乱水印的空间 顺序。 其中, 是原始像素点 经过随机排序后得到的乱序水印像素点。 厦门大学本科毕业论文 19/40 图 4-2 水印随机排序示意图 首先,利用密钥 K1 产生 0 到 的随机数作为原始水印每个像素点的标 号,然后利用桶分类排序算法将这些随机标号按由小到大排序,随机标号的顺序排序 使得标号所标识的原始水印像素点随机排序,这种方法的时间复杂度为 ,以 3232 二值水印为例,排序过程由图 4-2 所示。 3 水印扩频 扩频调制具有抗干扰、低功率谱密度、保密性好等许多优点,它是利用伪随机序 列对被传输信号进行频谱扩展,使之占据的带宽远远超过所必需的最小带宽,其本质 是利用带宽换取信噪比。在水印算法中,它是利用水印信道的容量换取算法稳健性的 改善。本文提出采用两个不相关的伪随机序列来代表二值水印信息中的 0 和 1,从而实 现频谱扩展的目的,首先利用密钥 K2 产生一个种子,在此种子下,生成两个不相关的 伪随机序列:PN_zero,PN_one。 , 其中 L 由 88DCT 系数矩阵的中频段长度决定,然后根据二值水印信息的 0 或 1,分别嵌入 PN_zero 或 PN_one。本文采用的扩频方案具有简单易实现和稳健性好的 优点。 4水印嵌入 为了在鲁棒性和透明性之间进行折中,本文将二值水印经扩频后的伪随机序列嵌 入到各图像块的中低频段系数中。实验中采用的二值图像是 3232 的字符图像 watermark.bmp,原始图像是 256 256 的 Lena 图像 oriImage.bmp。原始图像经过 88 分块后,有 1024 个子块。首先对 Bm(m =0,1,.,M-1) 的系数按 Zig-Zag 顺序读取(如 图 4-3(a) ) ,在图 4-3(b)为 1 的位置嵌入伪随机序列, 水印具有较好的鲁棒性和透 明性。 厦门大学本科毕业论文 20/40 将按 Zig-Zag 顺序读取的每一分块系数重新排列为一维向量 ,并取出系数中第 L+1 到 L+N 的中低频段部分,得: , 根据图 3 知 L =14, N 13,伪随机序列由 N 个实数随机数组成: 按下式将伪随机序列嵌入到(a) 中: 当 message(m)0, 当 message(m)1, (a)Zig-Zag 读取顺序 (b)水印嵌入位置 图 4-3 Zig-zag 读取顺序及水印嵌入位置 message 为二值水印行扫描重复 4 次后排成的一维向量。它的长度和原图像块个数 均为 1024, 为拉伸因子,根据块的类别而变, 可由实验确定,对应 R1、R2,本文 根据实验确定 分别为 6、8、12。 将修改系数后的一维向量再逆 Zig-Zag 扫描变换为二维矩阵,然后分块做 IDCT 变 换,即得到嵌有水印的图像 4.34.3 水印提取模块水印提取模块 4.3.1 水印提取的功能描述 输入含有水印的图像的地址和水印置乱的随机序列,载入图像,获得水印向量,并根据原 图像的水印置乱的随机序列进行反置乱,恢复水印图像。 厦门大学本科毕业论文 21/40 4.3.2 水印提取的算法框图 水印提取算法框图如图 4-4 所示, 图 4-4 水印检测算法 4.3.3 水印提取的算法具体分析 1含水印图像分块 设嵌入水印的图像为 ,首先将 分割为互不覆盖的 88 子块,记为 ,对 进行 DCT 变换,得到: DCT ,0 7 2解扩 对各 88DCT 分块系数矩阵 按 Zig-Zag 读取顺序排列为一维向量,提取每一列向量 L+1 到 L+N的系数,设该系数组成的一维向量为: , 将 和嵌入过程中的两伪随机序列分别作相关运算,从而判决嵌入的原始水印信息 是 0 或 1。 设:Sequence_zero(m)corr2(PN_zero, ), Sequence_one(m)corr2(PN_one, ) 则:if Sequence_zero(m) Sequence_one(m) message(m)=0; else message(m)=1; 对每一子图像块进行相关运算,就可把置乱水印的一维向量 message 提取出来。 3 水印反置乱 厦门大学本科毕业论文 22/40 原始水印在嵌入前经过了置乱处理,因此须对提取出的水印 message 进行反置乱。首 先根据密钥 K1 产生 0 到 的随机数,该随机数即为 message 向量中每个像 素点的标号,按照正常顺序重新排列 message 向量,就可还原出原始水印的一维向量, 因为水印嵌入过程中是重复 4 次嵌入的,因此把该一维向量分为 4 段,运用多数原则 提取原始水印,再将原始水印逆变换为二维矩阵,即恢复出二值水印。 4.44.4 水印算法的稳健性验证模块:水印算法的稳健性验证模块: 4.4.1 水印算法稳健性验证的功能描述 对含有水印的原始图像进行剪切,JPEG 压缩,加噪攻击实验,然后从经过处理的 图像中提取水印,恢复其水印。得出与原水印的相关系数。根据相关系数来评价水印 算法的稳健性。 4.4.2 添加噪音 对含有水印的图像加入不同的噪声,提取出来的水印图像,获得相关系数,根据相关 系数来判断水印抵抗噪声的能力。 %addnoise.m WImage1=idctF1; noise0=10*rand(size(WImage1); WImage1=WImage1+noise0; figure; imshow(WImage1, ); title(adding uniform noise 添加噪音); watemark_detect(WImage1,Y1,I0,waterMark1); 厦门大学本科毕业论文 23/40 4.4.3 滤波 对嵌入水印的图像进行中值滤波(33), 提取出来的水印图像并给以显示获得相关 系数,根据相关系数来判断水印抵抗滤波的能力。 %filter.m WImage1=idctF1; WImage2=idctF1; H=fspcial(gaussian 高斯,10,10,5); WImage2=imfilter(WImage2,H); figure; imshow(WImage2, ); title(through filter 10,10 滤波); watemark_detect(WImage2,Y1,I0,waterMark1); 4.4.4 剪切 我们从不同角度对图像进行了剪切实验,提取出来的水印图像,获得相关系数,根据 相关系数来判断水印抵抗剪切的能力。 %cut.m WImage3=idctF1; WImage3(1:128,1:128)=256; figure; imshow(WImage3); title(cutting part of the image 剪切); watemark_detect(WImage3,Y1,I0,waterMark1); 4.4.5JPEG 压缩 将嵌入水印的图像经过品质因子为 70、60%、50、40、30的 JPEG 压缩,提取 出来的水印图像,获得相关系数,根据相关系数来判断水印抵抗 JPEG 压缩 的能力。 厦门大学本科毕业论文 24/40 %Jpeg.m WImage4=idctF1; WImage4=im2double(WImage4); cnum=10; dctm=dctmtx(8); p1=dctm; p2=dctm.; imageDCT=blkproc(WImage5,8,8,p1*p2*x,dctm,dctm.); DCTvar=im2col(imageDCT,8,8,distinct); n=size(DCTvar,1); DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).2)/n; dum,order=sort(DCTvar); cnum=64-cnum; mask=ones(8,8); mask(order(1:cnum)=zeros(1,cnum); im88=zeros(9,9); im88(1:8,1:8)=mask; im128128=kron(im88(1:8,1:8),ones(16); dctm=dctmtx(8); p1=dctm.; p2=mask(1;8,1:8); p3=dctm; Wimage5=bikproc(imageDCT,8,8,p1*(x.8p2)*p3,dctm.,mask(1:8,1:8),dctm); figure; imshow(Wimage5); title(JPEG Image 压缩); watemark_detect(WImage5,Y1,I0,waterMark1); 4.4.6 旋转 将嵌入水印的图像经过不同角度的,提取出来的水印图像,获得相关系数,根据相关 厦门大学本科毕业论文 25/40 系数来判断水印抵抗旋转的能力。 %roate.m WImage5=idctF1; WImage5=imrotate(WImage6,45,bilinear,corp); figure; imshow(Wimage5); title(rotate 旋转); watemark_detect(WImage6,Y1,I0,waterMark1); 厦门大学本科毕业论文 26/40 第五章第五章 MATLABMATLAB 与与 VC+6.0VC+6.0 的接口实现的接口实现 用 MATLAB 编写数字水印程序的主要优点是语言本身适合水印技术所需的大量的 函数库。并且 MATLAB 本身具有可扩展性、易学易用性和高效性的优点。除此之外, MATLAB 还与 VC+6.0 有着良好的编程接口,可以采用 MATLAB 与 VC6.0+的混合 编程。有兴趣的读者可参考文献4。 5.15.1 集成的几种实现方法集成的几种实现方法 为了实现混合编程,Matlab 5.0 以后版本自带了 C 语言编译器(Compiler), 可以将 M 文件转换为 C-MEX 或 C/C+程序。根据 Matlab 是否运行,一般将 Matlab 与 VC 混合编程分为两大类:Matlab 在后台运行和可以脱离 Matlab 环境运行。 1 Matlab 引擎(Engine)采用客户机/服务器(Client/Server)的计算方式,通过 Windows 的 ActivcX 通道和 Matlab 接口。在具体的应用中,VC 的程序作为前端客户 机,通过调用 Matlab Engine 在后台与 Matlab 服务器建立连接,实现动态通信。这种 方法实现较为简单,不要求连接整个 Matlab,只需要嵌入必要的 Matlab Engine 库, 可大大地节省系统资源,但这种 Matlab 在后台运行,运行效率低下。 2Mideva 是 Mathtools 公司推出的一种 Matlab 集成编译开发平台,提供对 Matlab 程序文件(M 文件)的解释执行和开发环境支持。经过简单设置后 Mideva 可 以将 M 源文件转换为 C/C+,然后添加到 MSVC、C+ Builder 的工程中。 3另一种方法是先利用 Mideva 直接生成 EXE 文件(方法是启动 Mideva,在菜单 “File-Compile to exe”中, 选出需要转换的 M 文件),然后在 VC 中通过 Shell 调用, 常见的外部函数有 shellexec()或 winexec() 。这种方法简单方便,但运行时出现一个 控制台窗口,而且由于 VC 和 Matlab 之间不能交互,通用性差,仅适用于 VC 中调用 Matlab 实现图形显示的场合。 厦门大学本科毕业论文 27/40 4 最新也是最方便的方法是通过 Matlab 6.0 Add-in 实现 Matlab 与 VC 的混合编 程。 5.25.2 配置编译器配置编译器 5.2.1 对 MATLAB 的编译器进行配置 采用 MATLAB 与 VC6.0+进行混合编程,首先,必须保证编译器的正确配置,因 为编译器使用了 CC+库函数,所以在使用前需要使用 mex setup mbuild setup 配置编译器。 配置的过程如下: 1 在 MATLAB 环境中运行 mexsetup 命令,屏幕提示 Please choose your compiler for building external interface (MEX) files: Would you like mex to locate installed compilers y/n? 我们在这选择否; 屏幕提示请选择一个外部编译器,选择 Mircosoft Visual c+ 6.0; 接着提示是否使用这个编译器,我们选是;接着提示设置是否正确, 我们填是。 2在 MATLAB 环境中运行 mbuildsetup 命令,设置方法同上。 5.2.2 对 VC 的编译器进行配置 1用 VC 建立一个 SDI 工程 Watermarking。 2选择菜单 ToolsOptions在属性页中选择 Directories下拉框中选择 Include Files,在其最后加入 MATLAB6P5EXTERNINCLUDECPP MATLAB6P5EXTERNINCLUDE 其中 E:MATLAB6P5 为 MATLAB 的安装路径, 再在下拉框中选择 Library Files, 在最后加入 厦门大学本科毕业论文 28/40 MATLAB6P5EXTERNLIBWIN32MICROSOFTMSVC60 MATLAB6P5EXTERNLIBWIN32 3选择菜单 ProjectSettings属性页 Link下拉列表中选择 Input,在 Object/library modules 文本框中加入 libmmfile.lib libmatlb.lib libmx.lib libmat.lib libmat

温馨提示

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

评论

0/150

提交评论