毕业设计说明说参考示例2

更新时间:2024-04-21 04:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计说明书

批量信息隐藏技术研究与实现

刘毅敏 1206034116 学生姓名: 学号: 软件学院

学 院: 软件工程(软件开发与测试方向) 专 业: *** 指导教师:

2016年 6 月

批量信息隐藏技术研究与实现

摘 要

伴随着信息技术的飞速发展,信息安全问题受到很多关注。信息隐藏技术也得到了很大的发展,随着这些的发展,也带来了许多关于这方面算法的研究。

本文主要介绍了信息隐藏的背景及原理,在信息隐藏的基础上,实现对成批数据进行隐藏,以MAtlab为工具,利用GUI完成对系统的构建。整个系统分为了对数据的嵌入和提取,显示嵌入载体,频谱分析等模块。其中主要是对于隐藏的算法进行了相应改进,利用了LSB算法,在其基础上对成批数据进行了隔段算法嵌入与提取,和二叉树算法的嵌入与提取。并且每种算法原图片和嵌入数据后的图片都有直方图比对。

关键词:批量信息隐藏,LSB改进,二叉树

Research and Implementation of Batch Steganography

Abstract

With the rapid development of information technology, information security gets a lot of attention. Steganography has also been a great development. With these developments, it also brings a lot of research on this algorithm.

This paper mainly introduces the background and principle of information hiding in the basis of information hiding to realize batch data, using Matlab for hidden GUI tool that USES for the construction of complete system. The whole system is divided into the function of data embedding and extracting, embed its spectrum analysis showed, other modules. Mainly for hidden algorithm using the corresponding improvement LSB algorithm, and on the basis of batch data embedding and extracting every section algorithm, and binary tree algorithm embedded and extraction. And each algorithm embedded after the original picture and data than the images have histogram.

Keywords: batch steganography, LSB, binary tree

中北大学2016届毕业设计说明书

目 录

1 绪论 .............................................................. 1 1.1 课题的提出 ...................................................... 1 1.1.1 课题的产生与发展 .............................................. 1 1.1.2 课题的现状及提出 .............................................. 1 1.2 课题研究基础 .................................................... 3 1.2.1 信息隐藏技术的基本概念 ........................................ 3 1.2.2 信息隐藏的一般模型 ............................................ 3 1.2.3 信息隐藏的特征 ................................................ 3 1.2.4 GUI界面设计系统的介绍 ......................................... 4 2 批量信息隐藏中相关算法的介绍 ...................................... 5 2.1 课题的任务 ...................................................... 5 2.2 LSB算法 ......................................................... 5 2.3 LSB算法的改进隔段嵌入 ........................................... 5 2.4 LSB算法的改进二叉树嵌入 ......................................... 5 2.5 直方图分析 ...................................................... 6 2.6 隔段提取 ........................................................ 6 2.7 二叉树提取 ...................................................... 6 3 批量信息隐藏系统的详细设计 ........................................ 7 3.1 批量信息隐藏系统整体的设计过程 .................................. 7 3.2 批量信息隐藏系统主界面的实现 .................................... 8 3.3 显示载体图片 .................................................... 9 3.4 宏观控制的数据量 ............................................... 10 3.5 文本作为批量数据的嵌入 ......................................... 10 3.6 图片作为批量数据的嵌入 ......................................... 14 3.7 嵌入后的图片与原图片的直方图对比 ............................... 17 3.8 文本的提取 ..................................................... 19 3.9 图片的提取 ..................................................... 21

第I页 共 II 页

中北大学2016届毕业设计说明书

4 结束语 ........................................................... 24 4.1 实验的数据流程 ................................................. 24 4.2 设计结论 ....................................................... 27 4.3 心得体会 ....................................................... 27 参 考 文 献 ......................................................... 28 致 谢 ............................................................. 29

第II页 共 II 页

中北大学2016届毕业设计说明书

1 绪论

1.1 课题的提出 1.1.1 课题的产生与发展

计算机及网络的飞速发展在带给人们通讯方便的同时,也对通讯安全带了挑战,信息安全问题日益突出。而现在的信息安全技术几乎都是基于密码学理论的,即将文件加密成密文,使得那些具有非法企图的个人或集团,不能对密文进行正确解读,使得信息得以安全保存和传递。由于时代在不断进步,计算机处理能力也越来越高,因此传统的通过增加密钥长度来提高系统安全的方法也变得越发的不可靠。信息的保密性,也在遭受着严重的挑战。

当今社会,数字多媒体技术应用越来越普遍,许多的文件,音像资料,图片等都需要认证和版权保护[2]。例如,以音像资料为例,其本质上也是数字信号,若采用密码加密方式,就会忽视其本身信号属性,因此具有伪装特点的信息隐藏技术应运而生。

作为隐蔽通信和版权保护的有效手段,并受到人们的格外关注。尤其是数字图像作为载体的信息隐藏与传统加密方法不尽相同,利用所具有的迷惑性产生的信息隐藏更能经受起恶意者的攻击[3]。

由于这些原因,作者认为批量信息隐藏技术研究与实现确实可以给现实生活中的安全与机密信息传送带来方便。尤其是以图像为载体,将秘密信息藏于其中,完成成批数据的传输,利用相应算法保证嵌入的规律不易被推断,保证传输数据的安全性。随着理论研究的不断完善,必将在社会中得到广泛应用。 1.1.2 课题的现状及提出

现代数字信息隐藏的历史可以追溯到1954年,Muza公司的 EmilHembrooke获得一项名为“Identifieati of sound and like signals”的专利,专利中描述了向音乐中嵌入不可感知的信号来证明所有权的方法[4]。1983年Simons提出了具有代表性的“囚犯问题”,此问题引发了人们对信息隐藏技术的研究热潮。

Van Schyndel 在ICIP’94会议上发表了题为“A digital watermark”的文章,它是第一篇在主要会议上发表的关于数字水印的文章,其中阐明了一些关于水印的重要概念,它被认为是一篇具有历史价值的文献。1996年5月30日至6月1

[1]

第1页 共29页

中北大学2016届毕业设计说明书

日在英国剑桥大学召开了国际第一届信息隐藏学术研讨会(First International Workshop on Infor- mation Hiding),会上对信息隐藏的部分英文术语和学科分支进行了统一和规范,标志着信息隐藏学科正式诞生[5]。直到现在,已经举行了多届国际信息隐藏学术研讨会,其研究内容从空域信息隐藏正在逐步转向频域的信息隐藏,从以数字水印为主的研究正逐步转向与数据压缩、数据融合、神经网络等学科的理论和方法相结合的理论和应用研究。

国内关于信息隐藏技术的研究从1999年开始兴起,其标志是由我国信息科学领域的何德全、周仲义、蔡吉人三位院士联合发起的全国信息隐藏学术研讨会,至今已经举行了七届全国学术会议,CIHW1999北京、CIHW2000北京、CIHW2001西安等。“西北工业大学”钱思进教授所著的 “信息隐藏与信息安全”, 该文介绍了信息隐藏技术和信息隐藏分析技术,分析了基于数字图像的信息隐藏分析技术,并对现有的多种信息隐藏分析方法和研究现状进行了深入讨论[6]。研讨会聚集了国内从事多媒体信息安全技术研究的权威专家和广大学者,促进了我国的信息隐藏学术研究及其应用,国内的研究主要集中在数字水印方面。2004年“北京电子技术应用研究所”的林代茂 ,胡岚,郭云彪,周琳娜等在中山大学学报(自然科学版)上发表了“广义信息隐藏技术的安全问题”,该文对对信息隐藏的安全性问题进行了深入讨论,给出了不同应用模式下的信息隐藏安全性定义,结合广义信息隐藏有关理论给出了广义信息隐藏安全性条件,并利用感知系统空间理论加以精确描述,在分析理论安全的基础上,对广义信息隐藏的现实安全给出了解释[7]。

随着我国对信息隐藏研究的不断升入,各种各样的信息隐藏分支相继出现,数字图像的信息安全问题成为研究课题。它主要包括数字图像的隐藏、数字水印和数字图像的分存等课题[8]。数字图像分存技术作为图像信息安全的一个重要课题,主要研究如何把一幅秘密的数字图像分解成几幅无意义或者杂乱无章的图像或者伪装到几幅有意义的图像中进行存储或传输,它可以避免由于少数图像信息的丢失而造成严重的事故,同时在通信中个别图像信息的泄露不会引起整个图像信息的丢失

[9]

。在图像分存与信息隐藏相结合情形下,将秘密信息分解为若干子秘密存于若干

图片中,秘密信息不会因为某几个子图片的丢失而消失,在恢复阶段当指定的若干子图片集合在一起秘密信息便可恢复,因此多载体批量信息隐藏技术的研究与实现将会变得更具有实际意义。

第2页 共29页

中北大学2016届毕业设计说明书

1.2 课题研究基础

1.2.1 信息隐藏技术的基本概念

信息隐藏运用各种信号处理方法将需要加密的信息隐藏在一般的多媒体数据中,若途中被非法截得,也只能得到载体的信息,而不会意识到其中包含秘密信息

[10]

。信息隐藏的优点在于它不仅隐藏了信息的具体内容,而且隐藏了信息的存在,

因此在信息安全领域显示出巨大的优势。 1.2.2 信息隐藏的一般模型

在信息隐藏中,通常称待隐藏的秘密信息为嵌入对象,称用于隐藏嵌入对象的公开信息为载体对象[11]。嵌入对象和载体对象可以是文本、图像、音频或视频等等。隐藏技术主要研究如何将秘密信息嵌入到载体对象中生成隐藏对象,而隐藏分析技术则主要考虑如何从隐藏对象中检测并破译出嵌入信息,或对隐藏对象进行某些处理以达到破坏嵌入对象的目的[12]。图1.1给出了一个信息隐藏系统的基本模型:

密钥生成与分配 嵌入密钥 原始数据 嵌入运算 合成数据 提取密钥 提取运算 隐秘信息 隐秘信息 隐秘攻击 图1.1 信息隐藏系统基本模型框图

1.2.3 信息隐藏的特征

信息隐藏是信息保护的一种手段,不同于传统的密码学。信息隐藏技术必须考虑正常的信息操作所造成的威胁,即要使机密信息对正常的数据操作技术具有免疫力。这种免疫力的关键是使隐藏信息不易被正常的数据操作所破坏

[13]

。尽管信息隐

藏技术存在着许多不同的分支,但是根据信息隐藏的目的和技术要求,该技术存在以下共同特性:

⑴ 不可感知性:指嵌入信息后在不引起秘密信息质量下降的前提下,不显著改变载体对象的外部特征,即不引起人们感官上对载体对象变化的察觉。从安全的角度考虑,载体对象与隐蔽载体还应具有一致的噪声统计分布等特性,不致使非法拦截者判断出秘密信息的存在,以至于破坏信息隐藏系统的安全性。

第3页 共29页

中北大学2016届毕业设计说明书

⑵ 鲁棒性:指隐藏载体对一般的信号处理(如滤波、增强、重采样、有损压缩等)、一般的几何变换(如平移、旋转、缩放、分割等)等恶意攻击具有一定的稳健性,即宿主信号受到一定的波动,也可恢复隐藏信息。

⑶ 自恢复性:指经过了一些操作和变换后,可能会使隐蔽载体受到较大的破坏,如果只留下部分的数据,在不需要宿主信号的情况下,却仍然能恢复隐藏信息的特征。

⑷ 安全性:指隐藏算法有较强的抗攻击能力,即隐蔽载体在承受一定程度的人为攻击的情况下而不致使隐藏信息遭到破坏的能力。隐藏的信息内容应是安全的,应经过某种加密后再隐藏,同时隐藏的具体位置也应是安全的,至少不会因格式变换而遭到破坏。且第三方在不知道隐藏算法和密钥时,均不能获得秘密信息。

⑸ 可纠错性:为了保证隐藏信息的完整性,使其在经过各种操作和变换后仍能很好地恢复,通常采取纠错编码方法达到这一目的[14]。 1.2.4 GUI界面设计系统的介绍

MATLAB是当今最优秀的科技应用软件之一,以强大的计算与可视化功能,简单易用,开放式可扩展环境,特别是所附带的30多种面向不同领域的工具箱支持,使得它在许多科学领域中成为计算机辅助设计与分析,算法研究和应用开发的基本工具和首选平台。GUI是一种图形化的沟通界面,通过此界面可以方便的达到一些特定控制的操作,而这些界面又是由按钮,窗口,工具栏,键盘等操作对象所构成的,以方便借助这些界面调用MATLAB来进行运算操作[15]。GUI是未来的趋势,因为人类对于图形辨识能力远超于其他表达方式,因此借助于GUI程序可以设计出专属某个主题的图形化界面。

第4页 共29页

中北大学2016届毕业设计说明书

2 批量信息隐藏中相关算法的介绍

2.1 课题的任务

本次设计通过LSB算法以及它的相应改进算法,将成批数据存入载体图像中,这些数据可以是图片也可以是文本,在嵌入过程完成后将两者通过直方图进行了比较,最后将其按照嵌入时的规则在相应位置进行提取。 2.2 LSB算法

LSB算法主要包括一个嵌入过程和一个提取过程。嵌入过程是指信息隐藏者利用嵌入密钥将嵌入对象添加到载体对象中,从而生成隐藏对象这一过程。提取过程是指利用提取密钥从接收到的可能经过修改的隐藏对象中恢复嵌入对象。在提取过程中可能需要载体对象、也可能不需要载体对象。为了提高保密性需要预先对隐藏信息进行预处理(如加密)而得到嵌入对象,相应地在提取过程中要对得到的嵌入对象进行解预处理(如解密),恢复为原隐藏信息。

一种典型的LSB算法:最低有效位替换:

设对载体图像的扫描方式为从左下开始,先行后列,且其像素数为lcr, Cji

为位于ji的像素点的最低有效位,秘密信息长度为lm比特,位置i的相应秘密信息为mi (mi=1或0)。嵌入过程如下:从一副载体图像中选择一个像素点子集{j1,j2,…,ji} (ji为在图像中的位置),然后将Ck替换为mi即可。在提取过程中,按嵌入时的方法抽出被选择嵌入信息的载体元素,然后提取相应最低比特位信息即得到隐秘信息。

2.3 LSB算法的改进隔段嵌入

对于LSB算法,由于嵌入间断是针对图片矩阵的像素点,逐个顺序嵌入的,这种方式实现容易,但是非法人员截得嵌有密文的载体后,按照一般思路,将其顺序提取,这样密钥很容易将被泄露,因此隔段嵌入就是采用在嵌入阶段,不按照顺序逐个嵌入,采用隔几个像素点嵌入密钥转换后的二进制流,这样就将不容被提取泄密,顺序提取的话将得到的是一串串乱码,而非真正的密钥。 2.4 LSB算法的改进二叉树嵌入

隔段嵌入尽管在一定程度上解决了顺序嵌入带来的密钥泄露的问题,但是并没有真正解决,因为隔段嵌入的规则太过明显,一旦被识破,还是很容易被提取的,

第5页 共29页

中北大学2016届毕业设计说明书

为此在嵌入阶段就要采取一种规则不明显的方式进行嵌入,采用二叉树方式寻找像素点进行嵌入的话,这样像素点的位置规律,不容易像隔段那样彼此差距规整,这样将不会被非法用户很容易截得真正的密钥信息,只有按照设计者的方式,在相应位置寻找嵌入的二进制密钥信息,才会真正提取正确的信息。 2.5 直方图分析

在载体中嵌入了一定量的密文后,就需要对二者进行相应的比较,当嵌入密钥的载体能够在视觉上无差别的显示出与本体可以乱真的图像后,本次嵌入才可以算是成功。但是,嵌入密钥后的图片必定会与本身真正的图片存在一定的不同,为了比较两者的区别就加入了直方图分析,通过将原图片和嵌入密钥的图片放到一起,将二者的直方图显示出来,通过对比则可以,看出彼此的差别。 2.6 隔段提取

通过了对LSB的第一层的改进,进行隔段嵌入后,得到嵌入密钥后的图片,为了能够将密要正确提取我们需要,按照隔段嵌入的规则,找到嵌入了密钥的像素点的具体位置,通过相对于嵌入相逆的方式,将密钥的二进制比特流提取出来,接着进行相关的转化,将其转化为文本或者BMP图片。 2.7 二叉树提取

相对应与隔断提取,二叉树提取也是采用二叉树嵌入阶段时嵌入规则,按照相对应的方式在所需要提取的载体图片上,按照二叉树规则正确寻找到需要提取二进制流的像素点,通过相逆与嵌入的过程,将相应二进制流提取出来,然后在进行相关转化,将其转化为文本或者图片。

第6页 共29页

中北大学2016届毕业设计说明书

3 批量信息隐藏系统的详细设计

3.1 批量信息隐藏系统整体的设计过程

整个系统的实现,首先想到的是整个界面的规划,采用MATLAB7.0中的GUI界面化设计,来对整个界面进行相关规划,首先是需要对嵌入的载体进行区分,为此设计了,复选框按键,一个是图片,另一个是文本。当其选中相关按键后,表示接下来将要嵌入密钥是何种类型,然后对该类型的密钥信息进行相应的的处理。这个过程的流程图如图3.1所示:

开始 进入系统初始界面 Y c9=1还是c8=1 N 读入载体图片并显示 密钥为文本 进入选择判定流程 文本图片的相关处理 密钥为图片 判断嵌入类型 结束

图3.1 显示载图片并进行密钥类型判定

接着是设计了相关算法的选择按钮,在LSB基础上设计了两种基本算法,一种是对LSB的简单改进,隔断嵌入方式;另一种是对于隔断方式又进行了改进的二叉树嵌入方式。由于要对批量信息进行处理,因此设计了四个载体,三个密钥来实现量化。三个密钥可以向四个载体中任意一个进行嵌入,并且在嵌入时可以选择相应的嵌入算法。当嵌入完成后,可以点击频谱分析的按键,然后对原有图像和嵌入了一定密钥后的图像进行分析,显示出它们的直方图,从而可以直观的比较出嵌入后所引起的差别。在直方图的比较完成后,进入下一阶段,即提取密钥信息的阶段。由于我们当初嵌入时可以选择不同的算法进行嵌入,因此在我们提取时,就要注意相关的一些事项。我们需要选择将要提取的密钥信息的相应载体,和提取时的相关

第7页 共29页

中北大学2016届毕业设计说明书

算法,注意此时的这个算法必须和嵌入时的相对应,然后点击提取按键就可显示出相应的密钥信息。当整个过程结束后,我们可以针对两种算法中曾经设置的记录基本操作次数的宏观变量进行一些比较,粗略的得出两种算法在相应情形下的优劣,这个过程的流程图如图3.2所示:

开始 进入嵌入算法的判定 s2=1 s2=1还是s3=1 s3=1 隔段嵌入算法 二叉树嵌入算法 显示嵌入后的结果 进行直方图对比 提取密钥信息 相关算法的简单比较 结束

图3.2 算法的选择及相应的嵌入提取过程

3.2 批量信息隐藏系统主界面的实现

程序的设计语言是MATLAB,采用其中的GUI可视化编程。首先利用了复选框按键checkbox,用于对嵌入类型,嵌入信息以及嵌入载体的选择。然后通过单选框按钮radiobutton来对算法进行选择。最后在pushbutton对应的框架中对相应的功能进行了相关设计。最终在这些基础上设计出一个简单的批量信息隐藏系统,系统

第8页 共29页

中北大学2016届毕业设计说明书

的具体界面如下图3.3所示:

图3.3 系统初始界面

3.3 显示载体图片

在系统设计的最初,首先对将要嵌入的载体进行初步了解,因此通过本功能将其直观的显示出来,其相应的代码如下: I= imread('D:\\tupian\\tu6.bmp'); H= imread('D:\\tupian\\tu7.bmp'); figure;

subplot(221);imshow(I);title('图1'); subplot(222);imshow(H);title('图2'); A= imread('D:\\tupian\\tu8.bmp'); B= imread('D:\\tupian\\tu9.bmp'); subplot(223);imshow(A);title('图3'); subplot(224);imshow(B);title('图4');

当载体图片显示出后,我们可以按照自己的爱好,将自己所要隐藏的一批密钥信息嵌于自己喜欢的载体图片中。

第9页 共29页

中北大学2016届毕业设计说明书

3.4 宏观控制的数据量

由于本系统需要对多个载体和多个密钥,进行嵌入和提取,以及对相关算法进行选择,因此宏观上就需要一些可以在整体上控制的变量,来进行相关的控制。

global c1; global c2; global c3; global c4;

global c5; global c6; global c7; global len_total;

global c8; global c9; global s2; global s3;

上述的宏观变量中c1,c2,c3,c4是对嵌入载体进行选择;c5,c6,c7是对嵌入的信息进行相关的选择;c8,c9是对嵌入的类型(文本,图片)进行选择;s2,s3是对相关算法进行的选择。这些宏观变量通过值0,1来进行控制,值0表示相应按键未选中,值1表示已经选中。 3.5 文本作为批量数据的嵌入

选择文本为嵌入密钥时,通过按键选择使C9为1,选中文本,然后选择相关的密钥信息,和要嵌入密钥信息的载体图。得到载体图的像素矩阵,然后读取密钥文本将其转化为相应的二进制流,读取,并得到其最大长度,然后判断密钥的长度是否大于像素矩阵的容量。当容量判断好后,进入算法选择的流程,如图3.4所示:

开始 容量判断 合适 进入算法选择 过大 读入载体图片并得到像素矩阵 打开密钥文本将其转化为为二进制流 结束 报错

图3.4 将文本读取并判断容量

当进入算法选择的流程后,我们接着所要做的操作是对S2,S1进行判断,如果s2为1,则将要进行隔段嵌入;但如果s3为1,那么接下来就会进入二叉树嵌入过程。当嵌入完成后,会对嵌入后的载体图片进行显示。这个过程对应的流程图如图3.5所示:

第10页 共29页

中北大学2016届毕业设计说明书

开始 进入算法选择的判定 s2=1 s2=1还是s3=1 s3=1 隔段嵌入算法 二叉树嵌入算法 显示嵌入后的结果 结束 图3.5 对相关内容进行相应算法选择并嵌入

核心代码如下:

读取图片矩阵,通过c1,c2,c3,c4进行相应载体图片的选择: if c1==1

cover=imread('D:\\tupian\\tu6.bmp'); elseif c2==1

cover=imread('D:\\tupian\\tu7.bmp'); elseif c3==1

cover=imread('D:\\tupian\\tu8.bmp'); elseif c4==1

cover=imread('D:\\tupian\\tu9.bmp'); end

ste_cover=cover;

ste_cover=double(ste_cover);

第11页 共29页

中北大学2016届毕业设计说明书

进行文本的提取,通过c5,c6,c7进行: if c5==1

f_id=fopen('D:\\tupian\\file.txt','r'); elseif c6==1

f_id=fopen('D:\\tupian\\file1.txt','r'); elseif c7==1

f_id=fopen('D:\\tupian\\file2.txt','r'); end

[msg,len_total]=fread(f_id,'ubit1'); 隔段嵌入代码:

h1=waitbar(0,'正在嵌入,请稍候!!!'); p=1; for f2=1:n for f1=1:m

y=mod(f1,8);//用来计算嵌入的位置 if y==0;

ste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(p,1); //当y为0时,进行嵌入运算 if p==len_total

break;//若嵌入数量已经等于准备嵌入的,停止嵌入,退出循环 end p=p+1;

waitbar(p/len_total,h1);//用于计算嵌入的进度 end end

if p==len_total

break; //若嵌入数量已经等于准备嵌入的,停止嵌入,退出循环 end end

第12页 共29页

中北大学2016届毕业设计说明书

close(h1);//嵌入完成关闭进度条 二叉树嵌入代码:

h1=waitbar(0,'正在嵌入,请稍候!!!'); p=1; J=1; Q=0; index=0;

count=5;//根结点初始位置 for f2=1:n for f1=1:m

//当count==5时进行如下嵌入操作

ste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(p,1); //这一步仅在判断根节点时进行

count=2*count;//找到左子树节点的位置 f1=count;//移动矩正列的位置 J=2*J;//进入二叉树的下一层

for f3=1:J//以该层节点数构建第三层循环 p=p+1;

waitbar(p/len_total,h1);//用来计算嵌入进度 if p>=len_total

break; 若嵌入数量已经等于准备嵌入的,停止嵌入,退出循环 end if f1>m

R=f1;//记录这是f1的值

index=fix(f1/m);//通过取整运算得到这时真正应在的行数 f2=index;//将其赋给f2 if f2>n

break;//若超出则结束运算 end

第13页 共29页

中北大学2016届毕业设计说明书

f1=f1-f2*m;//计算出f1在该行的具体位置 if f1==0

ste_cover(m,f2)=ste_cover(m,f2)-mod(ste_cover(m,f2),2)+msg(p,1); f1=R+1;//当恰好为0时,表示在上一行最后一个位置,进行运算 else

f2=f2+1;//否则的话在下一行,f2加1并进行嵌入

ste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(p,1); f2=f2-1;//还原f2;

f1=R+1;//让f1加1嵌入它旁边的子结点 Q=1; end else

ste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(p,1); f1=f1+1; if f1>m

Q=1;//用来关注f1是否超出m,超出Q置1 end end end if Q==1

f1=f1-f2*m;//计算出f1的位置 f2=f2+1;//计算出f2的位置; end end

if p>=len_total//超出嵌入数量后,结束循环 break;

close(h1);//关闭进度条 3.6 图片作为批量数据的嵌入

图片作为将要嵌入的密钥信息时,所要做的是下面一系列步骤。首先将图片选

第14页 共29页

中北大学2016届毕业设计说明书

中,即让c8为1。然后进行图片密钥的嵌入时,同样需要读取载体图片的像素矩正,同时也要得到密钥图片的像素矩正,在得到相应的矩正后,通过二进制转化,将相应的密钥图片的像素矩正中的数值转化为与之对应的二进制数值,接着将得到的数值存放于事先定义好的文本文档“zhancun”中,而此文档的真正目的也正是用于存放图片对应的二进制流。然后将文本中的二进制流读出,并得到其总容量,与载体图片的像素矩正的像素点总数比较。若容量不合适则更换载体图片,只有当容量合适时才进行嵌入,选择相应的嵌入算法,在设定的像素点处进行嵌入。在嵌入完成后,同样也将原图片与嵌入后的图片进行显示。该过程的流程图如图3.6和3.7所示:

开始 读入载体图片并得到像素矩阵 读入密钥图片并得到其像素矩阵 将密钥图片的像素矩正转化为二进制流 存入文本文档zhancun中 打开zhancun文本提取二进制流 判断容量是否过大 是 否 进入算法选择的判定 提示并报错 结束

第15页 共29页

中北大学2016届毕业设计说明书

图3.6 将图片读入转化为二进制流并判定容量

开始 算法选择的判定 s2=1 s2=1还是s3=1 s3=1 隔段嵌入算法 二叉树嵌入算法 显示嵌入后的结果 结束

图3.7 显示嵌入算法的选择流程

选择嵌入的载体图片: if c1==1

cover=imread('D:\\tupian\\tu11.bmp'); elseif c2==1

cover=imread('D:\\tupian\\tu11.1.bmp'); elseif c3==1

cover=imread('D:\\tupian\\tu11.2.bmp'); elseif c4==1

cover=imread('D:\\tupian\\tu11.3.bmp'); end

ste_cover=cover;

ste_cover=double(ste_cover);

第16页 共29页

中北大学2016届毕业设计说明书

选择嵌入的密钥图片: if c5==1

T=imread('D:\\tupian\\tu10.bmp'); elseif c6==1

T=imread('D:\\tupian\\tu10.1.bmp'); elseif c7==1

T=imread('D:\\tupian\\tu10.2.bmp'); end T_tu=T;

T_tu=double(T);

[m,n]=size(ste_cover);//读取图片矩正的尺寸,并记忆 [h,k]=size(T_tu);//读取密钥图片的尺寸并做记忆 frr=fopen('D:\\tupian\\zhancun.txt','W+');

fprintf(frr,'%s','');//找到了准备存密钥图片的文本,并准备进行写入 for i=1:h for j=1:k

bind=dec2bin(T_tu(i,j),8); //将相应像素矩正数值转化为相应的二进制 frr=fopen('D:\\tupian\\zhancun.txt','a+'); //进行文本的追加 fprintf(frr,'%s',bind);//写入文本中 fclose(frr);//关闭文本 end end

f_id=fopen('D:\\tupian\\zhancun.txt','r'); [msg,len_total]=fread(f_id,'ubit1');

然后将文本中的二进制流按照相应的两种算法进行嵌入。 3.7 嵌入后的图片与原图片的直方图对比

在嵌入阶段完成后,为了能够直观的看出原图片和嵌入以后的图片的不同,引入了相应的直方图分析,首先读取原图片,然后读取嵌入密钥的图片,在这些完成后,将图片显示,并通过相应的功能函数,将其直方图显示出来,其过程如图3.8

第17页 共29页

中北大学2016届毕业设计说明书

所示:

开始 选择原载体图片 选择嵌入密钥后的图片 显示出原图片及其直方图 显示出嵌有密钥的图片和直方图 结束 图3.8 显示读取直方图的流程

具体代码如下: if c1==1

I=imread('D:\\tupian\\tu6.bmp'); elseif c2==1

I=imread('D:\\tupian\\tu7.bmp'); elseif c3==1

I=imread('D:\\tupian\\tu8.bmp'); elseif c4==1

I=imread('D:\\tupian\\tu9.bmp'); end

subplot(221),imshow(I);title('原图片!'); I=rgb2gray(I);

I=histeq(I);//显示原图的直方图 if c1==1

第18页

共29页

中北大学2016届毕业设计说明书

H=imread('D:\\tupian\\d.bmp'); elseif c2==1

H=imread('D:\\tupian\\h.bmp'); elseif c3==1

H=imread('D:\\tupian\\e.bmp'); elseif c4==1

H=imread('D:\\tupian\\f.bmp'); end

subplot(222),imshow(H);title('嵌入文本密钥后的图片'); H=rgb2gray(H);

H=histeq(H);//显示嵌入后的图片的直方图

subplot(223),imhist(I);title('原图片对应的直方图!');

subplot(224),imhist(H);title('嵌入文本密钥后对应的直方图!'); 3.8 文本的提取

对于文本的提取,当c9为1时,表明将要提取的是文本。然后依据嵌入时的选择,选择好提取的算法。依据相应的算法找到真正应该提取的像素点。然后通过与像素点对应的数值进行与1的与运算,得到嵌入的二进制流,然后将其转化成为相应的文本内容,写入存放密钥的文本中。具体的流程如图3.9所示:

开始 提取相关文本信息 选择嵌有密钥的图片 进行提取算法选择 存放于文本 寻找嵌入密钥的像素结束

图3.9 显示提取文本的流程

具体提取代码如下:

读取图片矩阵,通过c1,c2,c3,c4进行提取图片的选择:

第19页 共29页

中北大学2016届毕业设计说明书

if c1==1

ste_cover = imread('D:\\tupian\\d.bmp'); elseif c2==1

ste_cover = imread('D:\\tupian\\h.bmp'); elseif c3==1

ste_cover = imread('D:\\tupian\\e.bmp'); elseif c4==1

ste_cover = imread('D:\\tupian\\f.bmp'); end

ste_cover = double(ste_cover(:,:,1)); [m,n] = size(ste_cover);

通过c5,c6,c7进行密钥提取的目的文本选择: if c5==1

frr=fopen('D:\\tupian\\goalfile1.txt','w'); elseif c6==1

frr=fopen('D:\\tupian\\goalfile2.txt','w'); elseif c7==1

frr=fopen('D:\\tupian\\goalfile3.txt','w'); end 隔段算法提取 p=1;

h=waitbar(0,'正在提取请稍等!!!'); for f2 = 1:n for f1 = 1:m

y=mod(f1,8)//寻找到提取的位置 if y==0

if bitand(ste_cover(f1,f2),1) == 1

fwrite(frr,1,'ubit1');//找到位置后,判断并进行提取,存于文本 result(p,1)= 1;

第20页共29页

中北大学2016届毕业设计说明书

else

fwrite(frr,0,'ubit1'); result(p,1)= 0; end

if p == len_total;

break;//若提取完毕则结束循环 end p = p + 1;

waitbar(p/len_total,h);//计算提取进度 end end

if p == len_total; break; end end close(h); 二叉树算法提取:

在经过了二叉树算法的嵌入后,我们已经基本了解了通过二叉树进行嵌入的具体过程,在二叉树的提取中,我们只需要按照相应的原理,计算出提取像素点的具体位置,然后通过相应的运算,判断出在该像素点嵌入的二进制是0还是1,然后将其写入文本中。在二叉树寻找提取点的过程中,我们设置J来控制二叉树,在循环的第三层,通过相关运算变化来J,然后由J控制二叉树的每层结点的嵌入,并且在提取过程中设置p,通过它来计算出提取的进度,当提取完成后,关闭进度条,并关闭相应的文本。 3.9 图片的提取

若选择的为图片提取,即c8为1时,同样先对算法进行选择,若选择的算法不是当初嵌入密钥时的算法,则会在将来提取出一批乱码,不是正确二进制流。当正确从载体图片中提取出相应的二进制流后,存于相应的文本中,在利用的得到二进制流,求出原图片各像素点的像素值,重建像素矩阵,然后通过像素矩阵显示出

第21页 共29页

中北大学2016届毕业设计说明书

相应的密钥图片,这个过程的具体流程图如图3.10所示:

开始 提取出嵌入的二进制流存于文读取嵌有密钥的图片矩阵 将二进制流转化为像素矩正并进行相应的提取算法选择 结束 寻找嵌入密钥的像素点 图3.10 显示提取图片的流程

利用3.7小节的方法将密钥图片的二进制流提取出放于文本后,接着将其通过计算转化为图片的像素矩阵,具体代码如下: for i=1:h for j=1:(8*k)

sec_m=str2num(ch(index,1));//将二进制流读出一位并将其转化为数字型; if count==1

sec_m1=sec_m*128;//若读出的是第一位,将其乘以128 elseif count==2

sec_m2=sec_m*64;//若读出的是第二位,将其乘以64 elseif count==3

sec_m3=sec_m*32; //若读出的是第三位,将其乘以32 elseif count==4;

sec_m4=sec_m*16; //若读出的是第四位,将其乘以16 elseif count==5

sec_m5=sec_m*8; //若读出的是第五位,将其乘以8 elseif count==6

sec_m6=sec_m*4; //若读出的是第六位,将其乘以4 elseif count==7

sec_m7=sec_m*2; //若读出的是第七位,将其乘以2 elseif count==8

第22页 共29页

中北大学2016届毕业设计说明书

sec_m8=sec_m*1; //若读出的是第八位,将其乘以1 end

count = count+1;//用来限制加的次数,限制为八次 index=index+1;//用来表示读取二进制的位置 if count==9

sec_m=sec_m1+sec_m2+sec_m3+sec_m4+sec_m5+sec_m6+sec_m7+sec_m8; result(i,flag)=sec_m;//够八次后将其转化为像素矩阵的十进制形式 flag=flag+1;//用来控制列,记忆像素矩阵列的位置 if flag>k

flag=1;//超出k后自动回归为1; end

count=1;//超出8后回归为1; end end end

通过上面一系列算法,最终将文本中的二进制流成功读取,并转化为相应的十进制形式,存于像素矩阵中。

第23页 共29页

中北大学2016届毕业设计说明书

4 结束语

4.1 实验的数据流程

1)显示嵌入的载体图片,如图4.1所示:

图4.1 显示嵌入的载体图片

2)显示主界面,在主界面中,可以通过复选框选择相关按键,实现相应的功能,如下图4.2所示:

图4.2 主界面

第24页 共29页

中北大学2016届毕业设计说明书

3)以嵌入文本为例,将原文本file中的内容嵌入图1中并显示,如下图4.3所示:

图4.3 嵌入文本file中的内容

4)显示文本file中内容,如图4.4所示:

图4.4 显示文本file中的内容

第25页 共29页

中北大学2016届毕业设计说明书

5)将文本嵌入后,显示出它们的直方图,如4.5所示:

图4.5 显示直方图

6)接着提取嵌入图片的文本信息,显示提取内容,如图4.6所示:

图4.6 显示提取的文本内容

第26页 共29页

中北大学2016届毕业设计说明书

4.2 设计结论

虽然经过三个月的学习和设计,最终我做出了一个简单的批量信息隐藏系统。但是其中还存在好多的不足,我明白自己对这个领域的理解还很浅薄,需要自己不断地深入学习和实践。当我每次遇到问题时,总是努力去解决问题,从中锻炼自己编程的调试能力。由于批量信息隐藏的特点,必定会在将来得到广泛应用。对于批量信息隐藏,我会在以后继续坚持学习,对该课题做进一步研究,不断地完善和改进,设计出更好的批量信息隐藏软件。 4.3 心得体会

当答辩临近,自己才突然感觉到三个月的毕业设计竟然这么快就要结束。回首已经逝去的三月,心中有种莫名的感动。也许是将要离别,心中有些许伤感,想着就要与悉心教导我的各位老师、与我的母校和与我一起走过风风雨雨的同学告别,无尽的不舍充斥在我的心中。而毕业设计的这三个月也是我感触最深的,其中有苦也有甜,但是最终确实是让我得到了很多。想法也有了很大的改变,最初只觉得毕业设计就是对以前的知识进行总结,但是当毕业设计真正开始后,我发现自己真正的想错了。毕业设计不仅是对以前知识的总结,更要在此基础上进行对毕业设计相关内容进行学习,从而对自己能力进行进一步提升,以下是我在毕业设计期间一些简单的总结。

首先接到毕业设计任务后,对自己题目进行相关了解。为开题报告做相应的准备,3月份的开题报告也是至关重要的,通过对开题报告的写作,可以让自己对毕业设计有一个整体的概念,同时能对论文书写有一定的锻炼。

接着当开题报告上交之后,就要进行相关资料的查阅,而图书馆,书店这些传统的方式自然必不可少,除此之外,我们还要在网上,电子阅览室等进行查阅。将所需知识一一记录下来。

最后就是对设计的程序进行调试,调试要有一定的技巧,不能将一堆程序放到一起,可以将一小个模块进行调试,调试成功后,将其加入大的功能模块中,在对整体调试直至无误后,再重复进行相关步骤,依次整合各个小的模块。

总之,这次毕业设计中和同组同学互相学习,使我的能力又得到了进一步提升,虽然中间也有彷徨的时候,但是最终能顺利完成,使我对未来充满信心。

第27页 共29页

中北大学2016届毕业设计说明书

参 考 文 献

[1]杨义先,钮心忻,任金强.信息安全新技术[M].北京:北京邮电大学出版社,2002,

3~10.

[2]胡春强.图像分存算法的研究与实现[D].硕士学位论文.重庆:重庆大学计算机

院, 2009,4~7.

[3]李洪安,刘晓霞,朱玲芳等.基于分存的多幅图像信息隐藏方案[J].计算机应用

研究,2009,10(06):3~20.

[4]易开祥,石教英,孙鑫.数字水印技术研究与发展[J].中国图象图形学报,2001,

6(2):111~117. [5]Ptitcolas F A P,Anderson R J,Kuhn M.G.Information hiding[C]// A survey Procee-

dings of IEEE,1999,87(7):1062~1078.

[6]Ramkumar M,Akansu A N,Capacity estimates for data hiding in compressed

images[J].IEEE Transactions on Image Processing,2001,10(8):1252~1263. [7]Barni M,Bartolinit F,Rosa A D,et al.Capacity of full frame DCT images

watermarks[J].IEEE Transactions on Image Processing,2001,9(8):1450~1455. [8]Bender W.Techniques for data hiding[J].IBM Systems Journal,1996,35(3):

313~336.

[9]Cox I J,Miller M L.The first 50 years of electronic watermarking [C]//EURASIPJ.

of Applied Signal Processing,2002,(2):126~132.

[10]张大奇.信息隐藏技术的研究与应用[D].硕士学位论文.陕西:西北大学,2006,

5~15.

[11]孙容海.大容量信息隐藏算法研究[D].硕士学位论文.广西:广西师范大

学,2009, 7~25.

[12]刘翠香.基于图像的信息隐藏算法研究[D].硕士学位论文.北京:北京邮电大学,

2010,25~42.

[13]丁玮,齐东旭.数字图像变换及信息隐藏与伪装[J].计算机学报,1998,21(9):

85~100.

[14]王炳锡,彭天强.信息隐藏技术[M].北京:国防工业出版社,2007.

[15]李显红.MATLAB7.X界面设计与编译技巧[M].北京:电子工业出版社,2006.

第28页 共29页

中北大学2016届毕业设计说明书

致 谢

首先真心的感谢我的导师***老师。在毕业设计期间,*老师给予了我很大的帮助,使我能够在整个设计过程中不断地提高自己。在这次的毕业设计中我学到了很多东西,培养了我独立思考解决问题的能力。老师对我们提出的疑问,和平时遇到的一些问题都给出了详细的解答。他不断地要求我们,做事情要学会思考,寻求思路,不能盲目的去做。同时也鼓励我们要对自己有信心,要不断的提高动手能力,持之以恒就一定能够克服遇到的困难。尽管我的这个设计还不是很完善,但是我很高兴在这次毕业设计中学到了很多东西。这些宝贵的财富,不仅现在对我很有用,而且会在将来不断地充实着我,督促着我,使我能够朝着自己的目标不断前进,让我终身获益。

还有就是要感谢所有我的代课老师,我会铭记他们的悉心教导。同时也要感谢平时在设计过程中帮助我的同学,使得我可以顺利完成毕业设计,我会怀着感恩和奋斗的心迎接未来的每一天。

第29页 共29页

本文来源:https://www.bwwdw.com/article/ia5p.html

Top