基于LSB的数字水印算法及MATLAB实现
基于-小波-变换的数字水印-matlab的-实现
基于小波变换的数字水印与matlab的实现摘要:通过对数字水印的原理和算法的分析,了解信息隐藏的实现手段与效果。
在信息加载和提取过程中,突破传统的加密技术,用更具专业性的检测手段来保护专属的信息产权。
本文利用了水印良好的鲁棒性和不可感知性,致力于对图像的处理,通过实验与测试证实了数字水印可以达到理想的效果,并且运用恰当的算法可以更加简化操作的复杂性。
在此之外,数字水印还可以应用于声音,视频等领域。
其技术手段的实现的更加完善化会带来其更加广阔的应用前景。
关键字:数字水印;信息隐藏;MATLAB;水印检测与提取;JPEG压缩;1 数字水印技术简介1.1数字水印的发展背景随着数字技术和Internet网络的发展,各种形式的多媒体数字作品(图像、视频、音频等)纷纷以网络形式发表,然而数字作品的便利性和不安全性是并存的,它可以低成本、高速度地被复制和传播,而这些特性也容易被盗版者所利用。
因而,采用多种手段对数字作品进行保护、对侵权者进行惩罚己经成为十分迫切的工作。
数字水印技术的研究就是在这种应用要求下迅速发展起来的。
数字水印(digital watermarking)技术也称为数字指纹技术,它将具有特定意义的水印标记不可感知地嵌入到被保护的数字产品中,在产生版权纠纷时,通过相应的算法提取该水印,用以证明作者对该数字产品的所有权,并可作为鉴证、起诉非法侵权的证据。
数字水印技术基本上应当满足隐蔽性、安全性、鲁棒性和水印容量等几个方面的要求。
研究数字水印技术的最初目的是用于保护数字产品的版权,但随着研究的进一步深入,它在信息安全保护领域的应用越来越广泛,并在广播检测、图像认证、盗版跟踪、数字签名、交易水印、拷贝控制、标题与注释等各个领域产生了许多新的用途。
数字水印从正式提出到现在虽然时间不长,但它与传统的密码学相比有明显的优越性,为解决版权保护和内容完整性认证、来源认证、篡改认证、网上发行、用户跟踪等一系列问题提供了一个崭新的研究方向,因此它在数字产品的知识产权保护、商务交易中的票据防伪、声像数据的隐藏标识和篡改提示、隐蔽通信及其对抗等方面具有十分广阔的应用前景。
基于LSB的数字水印算法及MATLAB实现
基于LSB的数字水印算法及MATLAB实现
黄仿元
【期刊名称】《现代机械》
【年(卷),期】2008(000)002
【摘要】数字水印技术是近些年提出的一种信息隐藏技术,该技术为多媒体信息的版权保护提供了一种新的方法.本文首先介绍了数字水印技术的原理、特点及分类,然后讨论了基于LSB的数字水印算法,最后利用MATLAB7.0对这一算法进行了仿真.
【总页数】3页(P67-69)
【作者】黄仿元
【作者单位】贵州大学,职业技术学院,贵州,贵阳,550003
【正文语种】中文
【中图分类】TP3
【相关文献】
1.一种基于Wavelet-SVD数字水印算法的MATLAB实现 [J], 马婷
2.基于DCT数字水印算法的Matlab实现 [J], 任晓扬;韩勇
3.基于图像预处理的DCT数字水印算法及其MATLAB实现 [J], 冯战申;贺勤;臧振戎
4.基于LSB数字水印算法的研究与实现 [J], 王东东;王福明
5.基于DCT域的图像数字水印算法及matlab实现 [J], 吴和静;闵昆龙;刘芳;刘兴鹏
因版权原因,仅展示原文概要,查看原文内容请购买。
基于Matlab的数字水印设计——基于空域的水印实现
摘要数字水印(Digital Watermarking)技术是我们生活中经常见到的信息隐藏技术。
它将一些标识信息(即数字水印)直接嵌入数字载体中,但不影响原载体的使用价值,也不容易被人的知觉系统觉察或注意到。
空间数字水印是信息隐藏技术的一个重要研究方向,另一类是频率数字水印。
空间数字水印采用最低有效位(LSB)算法,通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素来表达水印的信息,以达到嵌入水印的目的。
本实验是基于matlab的数字水印设计——基于空域的水印实现。
关键词:信息隐藏技术;空间数字水印; LSB算法;matlab目录1 设计任务与目的 (1)2 MATLAB的简介及应用 (1)2.1 MATLAB简介 (1)2.2 MATLAB应用 (1)3 数字水印技术 (2)3.1 数字水印技术的发展 (2)3.2 水印分类 (2)3.3 数字水印的特点 (3)3.4 数字水印技术的基本原理 (4)4 基于LSB的数字水印算法 (5)4.1 LSB算法原理 (5)4.2 LSB算法的实现 (6)4.2.1 水印嵌入算法 (7)4.2.2 水印提取算法 (9)5 MATLAB软件仿真 (11)5.1 仿真结果 (11)5.1.1 水印嵌入仿真 (11)5.1.2 水印提取仿真 (12)5.2 仿真分析 (13)结论 (14)参考文献 (15)基于Matlab的数字水印设计——基于空域的水印实现1 设计任务与目的(1)通过课程设计把自己在大学中所学的知识应用到实践当中。
(2)在课程设计的过程中掌握程序编译及软件设计的基本方法。
(3)深入了解利用Matlab设计基于Matlab的数字水印设计——基于空域的水印实现。
(4)提高自己对于新知识的学习能力及进行实际操作的能力。
(5)锻炼自己通过网络及各种资料解决实际问题的能力。
2 MATLAB的简介及应用2.1 MATLAB简介MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
一种基于LSB算法的数字水印改进技术
一种基于LSB算法的数字水印改进技术高会军;刘文霞;暴轩;张卫光;胡师【摘要】介绍数字水印技术的基本原理,详细论述基于最低有效位数字水印技术的实现过程,结合实际应用提出改进方案,通过Matlab实验给出同一载体图像嵌入不同容量水印后图像的PSNR值,得出了水印容量和鲁棒性相互制约的重要结论.实验证明了方案的可行性,最后指出这种技术的局限性.【期刊名称】《现代电子技术》【年(卷),期】2009(032)013【总页数】3页(P86-88)【关键词】LSB算法;数字水印;水印容量;PSNR【作者】高会军;刘文霞;暴轩;张卫光;胡师【作者单位】南海舰队指挥所,自动化站网络技术室,广东,湛江,524001;延安大学,物理与电子信息学院,陕西,延安,716000;南海舰队指挥所,数据库室,广东,湛江,524001;南海舰队指挥所,数据库室,广东,湛江,524001;南海舰队指挥所,数据库室,广东,湛江,524001【正文语种】中文【中图分类】TN3090 引言随着通信和计算机技术的发展,信息安全已成为人们普遍关注的问题。
随着因特网的日益普及,多媒体信息的使用已达到了前所未有的深度和广度,其发布形式也愈加丰富,这样就为创造者和使用者提供了很大的便利,但这些特性也容易被盗版者利用,因而,采用多种手段对数字作品进行保护,对侵权者进行惩罚已经成为十分迫切的工作。
版权标识水印是目前研究最多的一类数字水印。
应用数字水印技术,可以辨认媒体所有权信息、媒体合法用户信息。
数字水印与多媒体数据永久地结合在一起。
当该作品被盗版或出现版权纠纷时,所有者即可从盗版作品中获取水印信息作为依据,从而保护所有者的权益。
1 数字水印技术的基本原理1.1 数字水印基本模型[1,2]数字水印处理技术主要包括数字水印的嵌入、提取和检测。
通过的水印模型框架如图1、图2所示。
图1 数字水印嵌入模型图2 数字水印提取模型1.2 数字水印的特性数字水印有很多特性,其中最主要的三个特性是保真度、鲁棒性和容量。
LSB算法水印安全性测试及MATLAB实现
MATLAB - Matlab的优势和特点:(1)友好的工作平台和编程环境MATLAB由一系列工具组成。
这些工具方便用户使用MATLAB的函数和文件,其中许工具采用的是图形用户界面。
包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。
而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。
简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。
(2)简单易用的程序语言Matlab一个高级的距阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。
用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。
新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C+语言极为相似,而且更加简单,更加符合科技人员对数字表达式的书写格式。
使之更利于非计算机专业的科技人员使用。
而且这种语言可移植性好、可拓展性极强,这也是MATLAB之所以能够深入到科学研究及工程计算各个领域的重要原因。
LSB算法水印安全性测试LSB算法水印源码1、嵌入源码clear all;% 保存开始时间start_time=cputime;% 读入原图像file_name='1.jpeg';[cover_object,map]=imread(file_name);% 读入水印图像file_name='2.jpeg';[message,map1]=imread(file_name);message1=message;message=double(message); %%转换为double数message=fix(message./2); %%转换为0,1组成的矩阵message=uint8(message); %%转换为uint8数% 原图的行数与列数Mc=size(cover_object,1); %原图的行数Nc=size(cover_object,2); %原图的列数% 水印的行数与列数Mm=size(message,1); %水印的行数Nm=size(message,2); %水印的列数% 将水印扩展为原图像大小,并写入watermarkfor ii = 1:Mcfor jj = 1:Ncwatermark(ii,jj)=message(mod(ii,Mm)+1,mod(jj,Nm)+1);endend% 将原图的最低有效位值换为水印的值watermarked_image=cover_object;for ii = 1:Mcfor jj = 1:Ncwatermarked_image(ii,jj)=bitset(watermarked_image(ii,jj),1,watermark(ii,jj)); endend% 将嵌入水印图像写入lsb_watermarked.jpegimwrite(watermarked_image,'lsb_watermarked.jpeg','jpeg');% 显示运行时间elapsed_time=cputime-start_time,% 显示嵌入水印图像figure(1)subplot(1,2,1)imshow(watermarked_image,[])title('嵌入水印图像')subplot(1,2,2)imshow(cover_object,[])title('原图像')%%扩展后水印for ii = 1:Mcfor jj = 1:Ncwatermark1(ii,jj)=message1(mod(ii,Mm)+1,mod(jj,Nm)+1);endendfigure(2)imshow(watermark1,[])title('扩展后的水印')figure(3)imshow(message1,[])title('原水印')2、提取源码clear all;% 保存开始时间start_time=cputime;% 读入嵌入水印图像file_name='lsb_watermarked.jpeg ';watermarked_image=imread(file_name);% 嵌入水印图像的行数与列数Mw=size(watermarked_image,1); %嵌入水印图像行数Nw=size(watermarked_image,2); %嵌入水印图像列数%读入原始水印file_name='2.jpeg';orig_watermark=imread(file_name);%%原始水印的行数与列数Mm=size(orig_watermark,1); %水印的行数Nm=size(orig_watermark,1); %水印的列数% 用嵌入水印图像的最低有效位重建水印for ii = 1:Mwfor jj = 1:Nwwatermark(ii,jj)=bitget(watermarked_image(ii,jj),1);endend% 将提取水印变为原始水印大小watermark=2*double(watermark);for ii = 1:Mm-1for jj = 1:Nm-1watermark1(ii+1,jj+1)=watermark(ii,jj);endendwatermark1(1,1)=watermark(Mm,Nm);% 显示运行时间elapsed_time=cputime-start_time,% 显示提取水印与原始水印figure(4)subplot(1,2,1)imshow(watermark1,[])title('提取水印')subplot(1,2,2)imshow(orig_watermark,[])title('原始水印')3、中值滤波处理二维中值滤波器对图像的处理是用一个二维的窗口去依次成块地覆盖图像中的像素,用覆盖的那些像素值的中值去取代窗口正中的那个像素的值。
基于Matlab的数字水印设计基于空域的水印实现
摘要数字水印(Digital Watermarking)技术是我们生活中经常见到的信息隐藏技术。
它将一些标识信息(即数字水印)直接嵌入数字载体中,但不影响原载体的使用价值,也不容易被人的知觉系统觉察或注意到。
空间数字水印是信息隐藏技术的一个重要研究方向,另一类是频率数字水印。
空间数字水印采用最低有效位(LSB)算法,通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素来表达水印的信息,以达到嵌入水印的目的。
本实验是基于matlab的数字水印设计——基于空域的水印实现。
关键词:信息隐藏技术;空间数字水印; LSB算法;matlab目录1 设计任务与目的 (1)2 MATLAB的简介及应用 (1)2.1 MATLAB简介 (1)2.2 MATLAB应用 (1)3 数字水印技术 (2)3.1 数字水印技术的发展 (2)3.2 水印分类 (2)3.3 数字水印的特点 (3)3.4 数字水印技术的基本原理 (4)4 基于LSB的数字水印算法 (5)4.1 LSB算法原理 (5)4.2 LSB算法的实现 (6)4.2.1 水印嵌入算法 (7)4.2.2 水印提取算法 (9)5 MATLAB软件仿真 (11)5.1 仿真结果 (11)5.1.1 水印嵌入仿真 (11)5.1.2 水印提取仿真 (12)5.2 仿真分析 (13)结论 (14)参考文献 (15)基于Matlab的数字水印设计——基于空域的水印实现1 设计任务与目的(1)通过课程设计把自己在大学中所学的知识应用到实践当中。
(2)在课程设计的过程中掌握程序编译及软件设计的基本方法。
(3)深入了解利用Matlab设计基于Matlab的数字水印设计——基于空域的水印实现。
(4)提高自己对于新知识的学习能力及进行实际操作的能力。
(5)锻炼自己通过网络及各种资料解决实际问题的能力。
2 MATLAB的简介及应用2.1 MATLAB简介MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
基于数字水印的安全图像认证算法的Matlab实现
些 被 更 改 区域 的 图 像 尽 可 能地 恢 复 出来 。
基 于 参 数 化 整 数 小 波 变换 的基 本 思路
果 准 确 , 针 对 图 像 却 存 在 效率 不 高 、 能 但 不 指 出 图像 篡 改 区 域 、 全 性 不 高 的弊 端 。 安 数 字水印则弥补 数字签名技 术的这些 不足 ,
此 实现 的 特 点 , 过 为 了保 证 水 印 的 不 可 见 证 了水 印 的 安 全 性 。 外 采 用 基 于 提 升 格 不
1 数字水 印概述
数 字 水 印 依 据 应 用 可 分 为 鲁 棒 水 印 和 脆 弱 水 印 。 棒水 印或 称 稳 健 水 印 , 是指 鲁 它 移 、 转 等 ) 攻 击 下 仍 然 可 被 检 测 出来 , 旋 等
域 法 。 域 法 是 将 水 印 信 息 直 接 嵌 入 到 图 空
同 的 小 波 基 对 图像 进 行 变 换 , 要 确 保 参 只 印 的 嵌 入 算 法 , 难 以 穷 取 出 正 确 的 嵌 入 也 参数 , 而 无 法 实 施 有效 的伪 认证 攻 击 , 从 保
攻 脆 弱 水 印 的 算 法 可 分 为 空 域 法 和 变 换 数 的 取 值 空 间 足 够 大 , 击 者 即 使 知 道 水 像 的 像 素 中 , 法 具 有 嵌 入 速 度 快 及 容 易 该
基于LSB的数字水印算法及MATLAB实现
基于LSB 的数字水印算法及MATLAB 实现加密算法宗岳,王恺山东科技大学 山东,中国 ***************摘要—LSB 是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。
本文首先介绍了LSB 技术的原理和特点,然后讨论了基于LSB 的数字水印算法。
最后利用MATLAB 2010 b2对这一算法的加密过程进行了仿真。
关键词:LSB 数字水印 信息隐藏 MATLABI. 介绍随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。
本文首先介绍了了数字水印技术的原理和分类,接着对LSB 算法原理及LSB 算法实现进行了介绍,最后使用MATLAB 对其加密过程进行了仿真。
II. 数字水印技术的基本原理数字水印的主要 目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。
数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。
数字水印的嵌入和提取过程如图1,图2所示。
图1 数 字水印的嵌入过程图2 数字水印的提取过程图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。
根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。
III. 数字水印的分类数字水印技术可以从不同的角度进行分类,因此有多种分类方法。
按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。
鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。
matlab数字水印算法及实现和源代码
摘要:数字水印技术作为数字媒体版权保护的有效办法,近年来在国内外引起了人们极大的兴趣。
但是由于数字水印技术涉及到的知识面比较广,即使是专业人员有时也感到力不从心,那么如何选择一种有效的编程工具便成为一个亟待解决的问题。
本文从数字水印技术本身的特点、一般模型和典型算法出发,简要地介绍了一种可以快速上手的高效的实用语言——Matlab。
最后,作者给出一个用Matlab实现数字水印实例。
关键词:数字水印Matlab Visual C++6.0 DWT DCT1 引言作为传统加密系统的有效补充办法,从1993年Caronni正式提出数字水印到现在短短几年里,无论是在国内还是在国外对数字水印的研究都引起了人们极大的关注。
但数字水印技术的发展还很不成熟,应用也处于初级阶段。
在我国,知识产权问题是一个敏感的话题,只有深入开展数字水印技术的研究,尽快制定我国的版权保护水印标准,才能使我们在未来可能的国际知识产权纠纷中取得主动权。
那么掌握高效的工具,便成为一个必须解决的问题。
本文就针对数字水印本身的特点,介绍了一种高效的实用工具——MATLAB。
2 数字水印技术2.1 数字水印技术的复杂性数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉感知理论、扩频技术(Spre ad Spectrum)、信号处理(Signal Processing ) 技术、数字图像处理(Digital Image Processing)技术、多媒体(Multimedia)技术、模式识别(Pattern Reorganization)技术、算法设计(Algorithm Design)等理论,用到经典的DFT(Discrete Fourier Transf orm)、DCT(Discrete Cosine Transform)变换和近代最先进的数学工具----小波(Wa velet)。
数字水印又是一个横跨计算机科学、生理学、密码学、数字、数字通信等多门学科,并与I nternet的发展密切相关的交叉科学。
LSB算法的MATLAB实现
LSB算法的MATLAB实现LSB(Least Significant Bit)算法是一种隐写术,用于在图像或音频中隐藏秘密信息。
在这种方法中,最不显著的比特位被用来存储隐藏的数据,这样可以尽量不对原始图像或音频造成明显的变化。
下面是MATLAB中实现LSB算法的步骤:1. 读入原始图像:使用`imread`函数将图像读入到MATLAB中。
例如,`image = imread('original_image.png');`2. 将图像转换为灰度图像:如果原始图像是彩色图像,则需要将其转换为灰度图像。
可以使用`rgb2gray`函数实现。
例如,`gray_image = rgb2gray(image);`3.将隐藏信息转换为二进制:将要隐藏的信息转换为二进制,并将其存储为一个向量或字符串。
4.检查隐藏信息长度:检查隐藏信息的长度是否小于图像中可用的像素数量。
如果隐藏信息过长,可能无法完全嵌入到图像中。
如果需要,可以考虑压缩或加密隐藏信息。
5.将隐藏信息嵌入到图像中:对于每个像素,在最不显著的比特位中存储隐藏信息。
可以使用位操作和移位操作来实现。
例如,如果要将隐藏信息的第一个比特位嵌入到像素的最不显著比特位上,可以使用以下代码:```matlabbit = 1; % 要嵌入的隐藏信息比特pixel = 100; % 图像中的一个像素值new_pixel = bitset(pixel, 1, bit); % 将bit设置为pixel的第一个比特位```6.将修改后的像素重新组装为图像:重复上述步骤,对每个像素进行处理,然后将修改后的像素重新组装为一个新的图像。
7. 保存隐藏信息的图像:使用`imwrite`函数将隐藏信息的图像保存到硬盘上。
例如,`imwrite(new_image, 'hidden_image.png');`8.提取隐藏信息:如果需要,可以使用类似的方法从隐藏信息的图像中提取出隐藏的信息。
基于LSB的图像数字水印实验
基于LSB的图像数字⽔印实验1. 实验类别设计型实验:MATLAB设计并实现基于LSB的图像数字⽔印算法。
2. 实验⽬的了解信息隐藏中最常⽤的LSB算法的特点,掌握LSB算法原理,设计并实现⼀种基于图像的LSB隐藏算法。
条件实验条件3. 实验(1) Windows 2000或Windows Xp以上操作系统;(2) MATLAB 6.5以上版本软件;(3)图像⽂件4. 实验原理基于LSB的图像数字⽔印任何多媒体信息在数字化时都会产⽣物理随机噪声,⽽⼈的感官系统对这些随机噪声并不敏感。
替换技术就是利⽤这个原理,通过使⽤秘密信息⽐特替换随机噪声,从⽽实现信息隐藏⽬的。
图像⾼位平⾯对图像感官质量起主要作⽤,去除图像最低⼏个位平⾯并不会造成画⾯质量的下降。
利⽤这个原理可⽤秘密信息(或称⽔印信息)替代载体图像低位平⾯以实现信息嵌⼊。
LSB算法选⽤最低位平⾯来嵌⼊秘密信息,最低位平⾯对图像的视觉效果影响最轻微,但很容易受噪声影响和攻击,可采⽤冗余嵌⼊的⽅式来增强稳健性加以解决,即在⼀个区域中嵌⼊相同的信息,提取时根据该区域中的所有像素判断。
1.嵌⼊⽔印.m脚本代码:clear all;clc;picpath = input('请输⼊图⽚绝对路径(加单引号):');watermark_path = input('请输⼊⽔印⽂件绝对路径(加单引号):');msgfid = fopen(watermark_path,'r'); % 打开秘密⽂件,读⼊秘密信息[key,count] = fread(msgfid,'ubit1'); % 读取秘密信息,存⼊key,count为成功读⼊了多少位fclose(msgfid); % 关闭⽂件i = imread(picpath);i1 = i(:,:,1); % 提取RGB第1层嵌⼊⽔印[row,col] = size(i1); % x⾏y列contents = row * col; % 图像能嵌⼊⽔印最⼤⽐特数if count > contentsdisp('warning: 当前图⽚容量⽆法通过LSB⽅法嵌⼊所有⽔印信息!按enter退出matlab.');pause;quit;elsedisp(['当前图⽚通过LSB能嵌⼊的最⼤⽔印⽐特数为: ',num2str(contents),' bits']);endkey_counter = 1;round_counter = 0;total_watermark_bits = 0;if mod(count,row) == 0round = floor(count/row);elseround = floor(count/row) + 1;endfor ii=1:1:roundfor jj = 1:1:rowi1(jj,ii) = bitset(i1(jj,ii),1,key(key_counter,1));% bitset函数改变像素值最后⼀位bit为⽔印bit值key_counter = key_counter + 1;total_watermark_bits = total_watermark_bits + 1;if key_counter > countbreak;endend %内层forround_counter = round_counter + 1;disp(['当前嵌⼊轮数: ',num2str(round_counter)]);if key_counter > countdisp(['LSB嵌⼊正常结束!共嵌⼊⽔印⽐特数: ',num2str(total_watermark_bits),' bits']);break;endend %外层fori(:,:,1) = i1;imwrite(i,'E:\new\LSB_watermarked.bmp');figure;subplot(1,2,1);imshow(picpath);title('原始图像');subplot(1,2,2);imshow(i);title('LSB嵌⼊⽔印后的图像');运⾏截图:2.提取⽔印.m脚本代码:clear all;clc;picpath = input('请输⼊待提取LSB⽔印图⽚绝对路径(加单引号):');watermark_bits = input('请输⼊提取的⽔印⽐特数:');i = imread(picpath); % 读取含有⽔印信息的彩⾊图像i1 = i(:,:,1);key = zeros(watermark_bits,1); % 创建⼀个watermark_bits⾏1列的全0矩阵,⽤于存放⽔印⽐特[row,col] = size(i1);key_counter = 1;round = 0;round_counter = 0;total_watermark_bits = 0;if mod(watermark_bits,row) == 0round = floor(watermark_bits/row);elseround = floor(watermark_bits/row) + 1;endfor ii = 1:1:roundfor jj = 1:1:rowkey(key_counter,1) = bitget(i1(jj,ii),1); % 提取图像矩阵的bit⽔印信息key_counter = key_counter + 1;total_watermark_bits = total_watermark_bits + 1;if key_counter > watermark_bitsbreak;endend %内层forround_counter = round_counter + 1;disp(['当前提取轮数: ',num2str(round_counter)]);if key_counter > watermark_bitsdisp(['LSB⽔印提取正常结束!共提取⽔印⽐特数:',num2str(total_watermark_bits),' bits']);break;endend %外层forfobject = fopen('E:\new\LSB_watermark.txt','w'); % 以只写模式打开⼀个名为mark_message.txt的⽂件,不存在则创建之fwrite(fobject,key,'bit1'); % 将key矩阵中的数作为bit写⼊⽂件句柄为fobject的⽂件fclose(fobject); % 关闭⽂件句柄所对应的⽂件运⾏后hidden.txt与LSB_watermark.txt⽂件⽔印内容LSB⽔印实验的要点1.该实验选取的是彩⾊RGB图像,是3维图像,因此要选RGB中的某⼀层进⾏⽔印嵌⼊,可以选第1,2或3层,分别对于R,G,B层,本实验选择R层及第⼀层i1 = i(:,:,1)2.还应对图像所能容纳⽔印⽐特最⼤数进⾏检查,以防⽔印信息太多导致嵌⼊失败.3.嵌⼊完成后,要将选取的RGB层赋给原3维矩阵对应层i(:,:,1) = i14.代码注意if及for与end配对,⼀个if或for配⼀个end上述脚本在matlab6.5能正确运⾏.。
LSB算法的matlab实现
一实验目的1、了解隐显密码学相关的密码算法;2、熟悉不同“位平面"对图像质量的影响;3、掌握基于图像的LSB信息隐藏算法;4、用MATLAB函数实现LSB信息隐藏;5、掌握LSB信息提取算法。
二实验条件1、熟练使用matlab2、掌握LSB算法知识,了解其原理3、安装了matlab的计算机三实验原理1、BMP位图格式BMP文件是一种常见格式图形文件,是隐藏信息的一种好载体。
一副位图是由许多像素点组成,每个像素点用若干二进制位来描述其灰度或颜色;而每个像素点的这些二进制的低位对改点灰度或颜色的影响很小,故改变像素点的低位所引起的图像变化人眼不易发觉。
正因如此,可利用这些低位存储秘密信息以实现信息的隐藏。
BMP图像文件格式,是微软公司为其WINDOWS环境设置的标准图像格式,BMP表示的是将一幅图像分割成栅格,栅格的每一点称为像素,每一个像素具有自己的RGB值,即一幅图像是由一系列像素点构成的点阵.位图文件格式支持4b RLE(行程长度编码)以及8b和24b编码。
位图头文件包含位图文件的类型大小信息和版面信息。
位图信息头包含图像本身的属性,包括位图的宽度、高度、压缩类型等。
2、LSB算法原理对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。
由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。
然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB 算法对这些操作很敏感,其最初是用于脆弱性水印的.LSB算法基本步骤:1)将得到的隐藏有秘密信息的十进制像素值转换为二进制数据;2)用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;3)将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像.四、程序设计1、程序开发平台及工具平台:windows xp软件版本:matlab7。
基于MATLAB的数字图像水印算法研究与应用
基于MATLAB的数字图像水印算法研究与应用数字图像水印技术是一种信息隐藏技术,通过在数字图像中嵌入特定的信息,实现对图像的认证、版权保护、身份验证等功能。
在当今信息爆炸的时代,数字图像水印技术越来越受到人们的关注和重视。
本文将围绕基于MATLAB的数字图像水印算法展开研究与应用探讨。
一、数字图像水印技术概述数字图像水印技术是一种将特定信息嵌入到数字图像中并能够提取出来的技术。
通过在图像中添加水印信息,可以实现对图像的认证、完整性验证、版权保护等功能。
数字图像水印技术主要包括空域水印和频域水印两种类型,其中频域水印技术又包括离散余弦变换(DCT)域水印和小波变换域水印等。
二、MATLAB在数字图像处理中的应用MATLAB是一种强大的科学计算软件,广泛应用于数字图像处理领域。
其丰富的工具箱和便捷的编程环境使得MATLAB成为研究者和工程师首选的工具之一。
在数字图像处理中,MATLAB提供了丰富的函数和工具,可以实现图像的读取、显示、处理、分析等操作,为数字图像水印算法的研究与实现提供了便利。
三、数字图像水印算法原理1. 空域水印算法空域水印算法是将水印信息直接嵌入到原始图像的像素值中。
常见的空域水印算法包括LSB替换算法、LSB匹配算法等。
LSB替换算法是将水印信息嵌入到原始图像的最低有效位中,以保证对原始图像影响最小;LSB匹配算法则是通过调整像素值使得其最低有效位与水印信息相匹配。
2. 频域水印算法频域水印算法是将水印信息嵌入到原始图像的频域表示中,常见的频域水印算法包括DCT域水印和小波变换域水印。
DCT域水印是将水印信息嵌入到原始图像的DCT系数中,利用DCT变换的性质实现对原始图像的保护;小波变换域水印则是将水印信息嵌入到原始图像的小波系数中,具有更好的鲁棒性和安全性。
四、基于MATLAB的数字图像水印算法实现在MATLAB环境下,可以通过编写相应的代码实现数字图像水印算法。
首先需要读取原始图像和水印信息,然后根据所选的算法进行水印嵌入和提取操作。
基于Matlab的数字图像水印技术
基于Matlab 的数字图像水印技术**********摘要:数字水印技术涉及到许多图像处理算法以及数学计算工具等,如果用普通编程工具实现上述算法,需要要花费大量的时间,MathWorks公司推出的一种简单、高效、功能极强的高级语言——MATLAB语言,它具有高性能数值计算能力,可视化计算环境。
只需短短的几行代码就可在MATLAB中解决许多复杂的计算问题。
关键字:图像处理,数字水印, MATLAB0 引言随着Internet的普及,信息的安全保护问题越来越备受关注。
如何有效地防止数据的非法复制以及鉴别数字媒体的知识产权,成为急需解决的问题。
Caronni在1993年提出了数字水印,并将其应用于数字图像,后来,将数字水印的概念扩展到电视图像等领域,数字水印技术是一种版权保护的重要手段,得到了广泛的研究和应用。
本文简要介绍一下基于Matlab的数字图像水印技术。
介绍数字水印的原理以及使用方法,探索了基于离散余弦变换(DCT)的数字图像水印算法,并借助MATLAB,实现数字水印的嵌入、提取以及攻击测试。
1 数字水印技术1.1 数字水印数字水印(Digital Watermarking)技术是将一些标识信息(即数字水印)直接嵌入数字载体当中,例如包括多媒体、文档、软件等,但不影响原载体的使用价值,也不容易被人的知觉系统,如视觉或听觉系统觉察到。
通过这些隐藏在载体中的信息,可以确认内容创建者、购买者、传送隐秘信息或者判断载体是否被篡改等。
数字水印是信息隐藏技术的重要研究方向之一。
从信号处理的角度看,在载体图像中嵌入数字水印,可以视为在强背景(即原始公开图像)下叠加一个视觉上看不到的弱信号(即水印图像),由于人的视觉系统(Human VisualSystem,HVS)[1]分辨率受到一定的限制,只要保证叠加信号的幅度低于HVS的对比度门限,HVS就感觉不到信号的存在,因此,通过对载体对象作一定的调整变换,就有可能在不引起人感知的情况下嵌入一些信息。
基于LSB算法的可逆水印
基于LSB算法的可逆水印LSB是Least Singificant Bit的缩写,意思是最不重要比特位。
LSB算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,对图像信息产生的影响非常小以至于人眼的视觉感知系统往往不能察觉。
以一幅256灰度的图像为例,256灰度共需要8个位来表示,但其中每一个位的作用是不一样的,越高位对图像的影响越大,反之越低的位影响越小,甚至不能被感知。
LSB算法实现较为简单,嵌入水印步骤如下:①将原始载体图像的时/空域像素值由十进制转换到二进制表示,下面以大小的块图像为例。
②用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位,假设待嵌入的二进制秘密信息序列为[ 0 1 1 0 0 0 1 0 0 ],则替换过程如图所示。
③将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像,如图所示。
LSB算法提取水印步骤如下:○1将得到的隐藏有秘密信息的十进制像素值转换为二进制数据,如图所示。
○2将二进制数据的最低有效位提取出来,即为秘密信息序列[ 0 1 1 0 0 0 1 0 0 ]。
如图所示。
但是,对于上述思路,一个八位的二进制水印信息就需要载体作品用八个像素值空间去存储。
如果盲目照搬上述思路来进行水印嵌入,不仅在有限的作品容量中嵌入的信息量小,而且当嵌入的水印数据量多时,计算机的计算量会很大,也可能载体作品的容量不够或为了使作品能够存储水印信息而将作品高位也进行数据置换,从而带来严重的失真。
因此,必须在上述思路的基础上另辟蹊径。
本作业中,我是将一副灰度图片嵌入到一副偏蓝的RGB图片中。
这里我在嵌入前先将图片进行了裁剪,使得载体图片的R、G、B任何一个通道矩阵的行、列大小都大于的嵌入的灰度图片矩阵的行、列大小。
由于图片偏蓝,因此为了使得嵌入水印后,图片失真较小,我选择用色彩非常弱的红色通道嵌入灰度图片。
程序算法如下:1、取出RGB图片的红色通道,然后用mod这个函数将该通道与灰度图片矩阵大小相等的部分的各个像素取模2值,那么像素值为奇数的就会余1,像素值为偶数的就为0,将取模余数用一个和灰度图片矩阵等大小的矩阵存储起来,然后将红色通道被模2的像素与其对应余数相减。
(完整word版)LSB数字水印算法
一.数字水印数字水印技术数字水印技术(Digital Watermark):技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到。
目前主要有两类数字水印,一类是空间数字水印,另一类是频率数字水印。
空间数字水印的典型代表是最低有效位(LSB)算法,其原理是通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素来表达水印的信息,以达到嵌入水印的目的。
频率数字水印的典型代表是扩展频谱算法,其原理是通过时频分析,根据扩展频谱特性,在数字图像的频率域上选择那些对视觉最敏感的部分,使修改后的系数隐含数字水印的信息。
可视密码技术二.可视密码技术:可视密码技术是Naor和Shamir于1994年首次提出的,其主要特点是恢复秘密图像时不需要任何复杂的密码学计算,而是以人的视觉即可将秘密图像辨别出来。
其做法是产生n张不具有任何意义的胶片,任取其中t张胶片叠合在一起即可还原出隐藏在其中的秘密信息。
其后,人们又对该方案进行了改进和发展。
主要的改进办法办法有:使产生的n张胶片都有一定的意义,这样做更具有迷惑性;改进了相关集合的造方法;将针对黑白图像的可视秘密共享扩展到基于灰度和彩色图像的可视秘密共享。
三.数字水印(Digital Watermark或称Steganography)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。
数字水印是信息隐藏技术的一个重要研究方向。
数字水印技术源于开放的网络环境下保护多媒体版权的新型技术,它可验证数字产品的版权拥有者、识别销售商、购买者或提供关于数字产品内容的其他附加信息,并将这些信息以人眼不可见的形式嵌入在数字图像或视频序列中,用于确认数字产品的所有权和跟踪侵权行为。
除此之外,它在证据篡改鉴定,数字的分级访问,数据产品的跟踪和检测,商业视频广播和因特网数字媒体的服务付费,电子商务的认证鉴定,商务活动中的杜撰防伪等方面也具有十分广阔的应用前景。
基于Matlab的数字图像水印算法设计设计
基于Matlab的数字图像水印算法设计设计1、绪论本章主要介绍信息隐藏技术的背景和研究意义、国内外信息隐藏技术研究现状,并给出全文的结构安排。
1.1信息隐藏技术的背景和研究意义从二十世纪九十年代开始,网络信息技术在全世界范围内取得了迅猛发展,它极大方便了人们之间的通信和交流。
借助计算机网络所提供的强大的多媒体通信功能,人们可以方便、快速地将数字信息(数字音乐、图像、影视等方面作品)传到世界各地,一份电子邮件可以瞬息间传遍全球[1-7]。
但在同时计算机网络也成为犯罪集团、非法组织和有恶意的个人利用的工具。
从恶意传播计算机病毒,到非法入侵重要部门信息系统,窃取重要机密甚至可使系统瘫痪;从用计算机进行金融犯罪,到利用表面无害的多媒体资料传递隐蔽的有害信息,对计算机信息系统进行恶意攻击的手段可谓是层出不穷。
信息隐藏技术在保密通信、版权保护等领域中都具有相当广泛的应用价值,根据不同应用背景,信息隐藏技术可以分为两个重要分支隐写术(Stegano Graphy)和数字水印[8](Digital Watermarking)。
数字水印主要是为了保护知识产权的,通过在原始媒体数据中嵌入信息来证实该媒体的所有权归属问题。
数字水印的主要目的不是限制对媒体访问,而是确保媒体中水印不被篡改或消除。
因此稳健性是数字水印最基本要求之一。
数字水印中的稳健性是指水印图像经过一些常见改变后,水印仍具有较好可检测性。
这些改变包括常见的图像处理手段(如数据压缩、低通滤波、图像增强、一次抽样、二次量化、A/D和D/A转换等等)、几何变换和几何失真、噪声干扰、多重水印(Multiple Watermarking)的重叠等。
对不同应用场合,要求具有不同的稳健性。
但需要指出的是,存在另一种与稳健水印性质相反的水印,被称为易损水印(Fragile Watermarks),它们被用来证实原始媒体是否被改动过。
稳健性在整个水印系统设计中具有很重要的分量,这也是将隐写术和数字水印分别对待的原因之一。
数字水印技术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,。
基于LSB算法的数字水印实现
像各 R B字节的最低位 , G 相当于在 目标 图像 上叠 加 了一个能量微 弱的信号 , 而随机颜色的 R B值 G 增 减 变化 在 1—3之 内 , 在视 觉上 很 难 被 察 觉 。 这
主程序模块名称 表 1 程序调用 DB类封装函数一览表 I B类封装 函数功能 读取位图文件
基 于 L B算 法 的数 字 水 印 实 现 S
龙 菲
( 安徽理工学校 电子信 息工程教研 室, 安微 安庆 2 6O ) 4 OO
摘
要 :应用 V C一 实现一种 简单 易行的 L B算法 , S 该算法将水印图像的二值数据嵌入 目标图像 的最 低有效 位, 从
而达到隐藏信息 、 标记图片的作用 。同时文 中还简要分析 了 B P M 文件格式 , 并着重讲 解 了 L B算法 的核心思想 。最后 , S 对应用算法实现的程序进行 了测试 , 测试结果表明该算法具有 良好 的隐蔽性和高保真性 。 关键词 :图像 ; 数字水印 ;S L B算法
显示图像原始大小 : 该模块读取的位 图文件 , 绘制在窗口中, 显示原始大小 的图像。 拉伸图像适应窗 口: 该模块读取位图文件 , 根据窗 口实际大小对图像进行拉伸或压缩 , 绘制成与窗
口大 小相适 应 的 图像 并显 示 。
2 程序 设 计与 实现 2 1 程 序 设计框 架 .
1 2 主 要 函 数 模 块 .
系统 主要 函数 功能 如下 :
打开位图文件 : 该模块首先读取位 图文件 , 将其按照序列载人 内存 , 然后判 断该图是否 已经含有隐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于LSB 的数字水印算法及MATLAB 实现加密算法宗岳,王恺山东科技大学 山东,中国 ***************摘要—LSB 是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。
本文首先介绍了LSB 技术的原理和特点,然后讨论了基于LSB 的数字水印算法。
最后利用MATLAB 2010 b2对这一算法的加密过程进行了仿真。
关键词:LSB 数字水印 信息隐藏 MATLABI. 介绍随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。
本文首先介绍了了数字水印技术的原理和分类,接着对LSB 算法原理及LSB 算法实现进行了介绍,最后使用MATLAB 对其加密过程进行了仿真。
II. 数字水印技术的基本原理数字水印的主要 目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。
数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。
数字水印的嵌入和提取过程如图1,图2所示。
图1 数 字水印的嵌入过程图2 数字水印的提取过程图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。
根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。
III. 数字水印的分类数字水印技术可以从不同的角度进行分类,因此有多种分类方法。
按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。
鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。
而脆弱水印相反,它对攻击敏感,可以根据脆弱水印的状态判断原始信息是否被修改过。
按数字水印所附载的媒体可分为图像水印、音频水印、视频水印和文本水印等。
每一种数字化的媒体都有相应的水印算法,这也造成了数字水印算法的复杂性。
按数字水印隐藏的位置划分可以分为空 (时)域数字水印、频域数字水印、时/频域数字水印和时间/度数字水印。
原始信息通常在空域或者时域上表示,根据信号处理理论有多种变换将信号变化到另外的域上,每一种域上都可以嵌入数字水印,也就产生了相应的数字水印算法。
·按数字水印的可见性可以分为可见数字水印和非可见数字水印。
可见数字水印通常是将公司表示叠加到原始图像上,算法比较简单,也有相应的应用软件,如Undreamt Marking Technologies公司的Photo Watermark。
而不可见数字水印要求嵌入的水印是不能被人的视觉系统感知的,其算法相对复杂。
关于数字水印算法的分类还有很多不同的分类方法,比如按用途划分,按检测过程划分等,限于篇幅,本文仅介绍了较为常见的几种分类。
IV.基于LSB的数字水印算法LSB是Least Singificant Bit的缩写,意思是最不重要比特位。
LSB数字水印算法按照上文介绍的四种数字水印分类方法分别属于:鲁棒性数字水印、图像数字水印、空域数字水印、不可见数字水印。
LSB算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,对图像信息产生的影响非常小人眼的视觉感知系统往往不能察觉。
以一幅256灰度的图像为例,256灰度共需要8个位来表示,但其中每一个位的作用是不一样的,越高位对影像的影响越大,反之越低的位影响越小,甚至不能感知。
V.L SB算法的实现LSB算法实现较为简单,首先,需要考虑嵌入的数字水印的数据量,如果嵌入最低的1位,则可以嵌入的信息量是原始图像信息量的1/8,如果适用最低两位则可以嵌入的信息量是1/4。
但是嵌入的数字水印的信息量越大,同时对图像的视觉效果影响也越大。
在这里要嵌入一个二值的图像。
然后,适当调整数字水印图像的大小和比特位数,以适应数字水印图像数据量的要求。
最后,对原始图像中要使用的最低位置0,再将数字水印数据放人原始图像的最低位即可。
下面通过MATLAB 2010b2实现这一算法这里选用一幅300×400像素,256灰度的图像,数字水印用“山东科技大学”的字样的二值图像。
置0的方法是调用模2函数mod(a,2),将得到的数值与原水印相减,从而得到最低位为0的图片。
(使用两位最低有效位的话则用模4函数mod(a,4)然后相减)。
因为这里加入了噪声干扰,所以对水印和原始图片进行了重编码,首先将原图片扩大两倍,并且使用两位最低有效位然后图片相加得到加入水印的图像。
然后对图片加入噪声得到输出图像。
程序如下:得到的图形如下所示:图3 原始图片图4 水印图片图5 加入水印后的图片LSB 算法简单,实现容易,同时可以保证数字水印的不可见性,由于可以在最低位的每个像素上都插人数字水印信息,因此有较大的信息嵌入量。
LSB 算法一般嵌入图像的最低一位或者两位,如果嵌入的位数太多,则会被人眼察觉到。
但是由于数字水印位于图像的不重要像素位上,因此很容易被图像过滤、量化和几何型变等操作破坏,以致无法恢复数字水印。
针对基本的LSB 算法的缺点,一些研究 者也提出了一些改进的算法,如奇偶标识位隐藏算法、索引数据链隐藏算法等,这些算 法能增强数字水印的隐蔽性。
VI. 结束语数字水印技术是近年来兴起的一门较前沿的技术,还处在发展阶段,没有统一的国际标准,缺乏完善的软件系统。
但是数字水印技术作为信息加密技术的分支,在知识产权的保护方面有着广泛的应用前景。
LSB 数字水印算法作为最早提出的数字水印算法,特点是原理简单,实现容易,掌握这以算法对于深入研究学习数字水印技术很有必要。
ma(2*i,2*j) = imgread(i,j); mb(2*i-1,2*j-1) = mbt(i,j); mb(2*i,2*j-1) = mbt(i,j); mb(2*i-1,2*j) = mbt(i,j); mb(2*i,2*j) = mbt(i,j); end endma = ma+mb*3;%======================= % attack%======================= noise = normrnd(0,0.3,2*maa,2*mab); ma = double(ma); ma = ma+ noise; ma = uint8(ma); figure(1);subplot(2,2,1);imshow(imgread); subplot(2,2,2);imshow(mbt,[0,1]); subplot(2,2,3);imshow(ma);附带全部代码:clear allclose all%=========================% read image%=========================mat = imread('1.jpg');mbt = imread('2.bmp');imgread = rgb2gray(mat);mbt = uint8(mbt);[maa,mab] = size(imgread);%[mba,mbb] = size(mbt);md = ones(maa,mab);ma = zeros(2*maa,2*mab);ma = im2uint8(ma);%========================% progress the image%========================for i=1:1:maafor j=1:1:mabimgread(i,j)=imgread(i,j)-mod(imgread(i,j),4);endend%========================%enlarge image%=======================for j=1:1:mabfor i=1:1:maama(2*i-1,2*j-1) = imgread(i,j);ma(2*i,2*j-1) = imgread(i,j);ma(2*i-1,2*j) = imgread(i,j);ma(2*i,2*j) = imgread(i,j);mb(2*i-1,2*j-1) = mbt(i,j);mb(2*i,2*j-1) = mbt(i,j);mb(2*i-1,2*j) = mbt(i,j);mb(2*i,2*j) = mbt(i,j);endendma = ma+mb*3;%=======================% attack%=======================noise = normrnd(0,0.2,2*maa,2*mab); % Gaussian, uniform,% laplace,salt-pepperma = double(ma);ma = ma+ noise;ma = uint8(ma);figure(1);subplot(2,2,1);imshow(imgread);subplot(2,2,2);imshow(mbt,[0,1]); subplot(2,2,3);imshow(ma);%subplot(2,2,1);imshow(mb,[0,1]);subplot( 2,2,2);imshow(ma);subplot(2,2,3);imshow(mc );%=======================% watermark extraction%=======================for i=1:1:maafor j=1:1:maba=mod(ma(2*i-1,2*j-1),2)+mod(ma(2*i,2*j-1), 2)+mod(ma(2*i-1,2*j),2)+mod(ma(2*i,2*j),2);a=(-a+mod(ma(2*i-1,2*j-1),4)+mod(ma(2*i,2* j-1),4)+mod(ma(2*i-1,2*j),4)+mod(ma(2*i,2*j ),4))/2;if a<4md(i,j)=0;endendendmd = uint8(md);figure(2);imshow(md,[0,1]);。