LSB算法水印安全性测试及MATLAB实现

合集下载

基于-小波-变换的数字水印-matlab的-实现

基于-小波-变换的数字水印-matlab的-实现

基于小波变换的数字水印与matlab的实现摘要:通过对数字水印的原理和算法的分析,了解信息隐藏的实现手段与效果。

在信息加载和提取过程中,突破传统的加密技术,用更具专业性的检测手段来保护专属的信息产权。

本文利用了水印良好的鲁棒性和不可感知性,致力于对图像的处理,通过实验与测试证实了数字水印可以达到理想的效果,并且运用恰当的算法可以更加简化操作的复杂性。

在此之外,数字水印还可以应用于声音,视频等领域。

其技术手段的实现的更加完善化会带来其更加广阔的应用前景。

关键字:数字水印;信息隐藏;MATLAB;水印检测与提取;JPEG压缩;1 数字水印技术简介1.1数字水印的发展背景随着数字技术和Internet网络的发展,各种形式的多媒体数字作品(图像、视频、音频等)纷纷以网络形式发表,然而数字作品的便利性和不安全性是并存的,它可以低成本、高速度地被复制和传播,而这些特性也容易被盗版者所利用。

因而,采用多种手段对数字作品进行保护、对侵权者进行惩罚己经成为十分迫切的工作。

数字水印技术的研究就是在这种应用要求下迅速发展起来的。

数字水印(digital watermarking)技术也称为数字指纹技术,它将具有特定意义的水印标记不可感知地嵌入到被保护的数字产品中,在产生版权纠纷时,通过相应的算法提取该水印,用以证明作者对该数字产品的所有权,并可作为鉴证、起诉非法侵权的证据。

数字水印技术基本上应当满足隐蔽性、安全性、鲁棒性和水印容量等几个方面的要求。

研究数字水印技术的最初目的是用于保护数字产品的版权,但随着研究的进一步深入,它在信息安全保护领域的应用越来越广泛,并在广播检测、图像认证、盗版跟踪、数字签名、交易水印、拷贝控制、标题与注释等各个领域产生了许多新的用途。

数字水印从正式提出到现在虽然时间不长,但它与传统的密码学相比有明显的优越性,为解决版权保护和内容完整性认证、来源认证、篡改认证、网上发行、用户跟踪等一系列问题提供了一个崭新的研究方向,因此它在数字产品的知识产权保护、商务交易中的票据防伪、声像数据的隐藏标识和篡改提示、隐蔽通信及其对抗等方面具有十分广阔的应用前景。

基于Matlab的数字水印设计——基于空域的水印实现

基于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数字水印算法及实现和源代码

matlab数字水印算法及实现和源代码

1.数字作品的知识产权保护----数字作品(如电脑美术、扫描图像、数字音乐、视频、三维动画)的版权保护是当前的热点问题。

由于数字作品的拷贝、修改非常容易,而且可以做到与原作完全相同,所以原创者不得不采用一些严重损害作品质量的办法来加上版权标志,而这种明显可见的标志很容易被篡改。

----“数字水印”利用数据隐藏原理使版权标志不可见或不可听,既不损害原作品,又达到了版权保护的目的。

目前,用于版权保护的数字水印技术已经进入了初步实用化阶段,IBM公司在其“数字图书馆”软件中就提供了数字水印功能,Adobe公司也在其著名的Photoshop软件中集成了Digimarc公司的数字水印插件。

然而实事求是地说,目前市场上的数字水印产品在技术上还不成熟,很容易被破坏或破解,距离真正的实用还有很长的路要走。

2.商务交易中的票据防伪----随着高质量图像输入输出设备的发展,特别是精度超过 1200dpi 的彩色喷墨、激光打印机和高精度彩色复印机的出现,使得货币、支票以及其他票据的伪造变得更加容易。

----另一方面,在从传统商务向电子商务转化的过程中,会出现大量过度性的电子文件,如各种纸质票据的扫描图像等。

即使在网络安全技术成熟以后,各种电子票据也还需要一些非密码的认证方式。

数字水印技术可以为各种票据提供不可见的认证标志,从而大大增加了伪造的难度。

3.证件真伪鉴别----信息隐藏技术可以应用的范围很广,作为证件来讲,每个人需要不只一个证件,证明个人身份的有:身份证、护照、驾驶证、出入证等;证明某种能力的有:各种学历证书、资格证书等。

国内目前在证件防伪领域面临巨大的商机,由于缺少有效的措施,使得“造假”、“买假”、“用假”成风,已经严重地干扰了正常的经济秩序,对国家的形像也有不良影响。

通过水印技术可以确认该证件的真伪,使得该证件无法仿制和复制。

4.声像数据的隐藏标识和篡改提示----数据的标识信息往往比数据本身更具有保密价值,如遥感图像的拍摄日期、经/纬度等。

基于Matlab的数字水印技术在版权保护中的应用研究

基于Matlab的数字水印技术在版权保护中的应用研究

基于Matlab的数字水印技术在版权保护中的应用研究数字水印技术是一种将信息嵌入到数字媒体中的技术,以实现版权保护、身份认证、内容完整性验证等功能。

在当今信息爆炸的时代,数字媒体的传播和复制变得异常容易,这也给版权保护带来了极大的挑战。

数字水印技术通过在数字媒体中隐藏特定信息的方式,可以有效地解决这一问题。

而Matlab作为一种强大的科学计算软件,在数字水印领域有着广泛的应用。

本文将探讨基于Matlab的数字水印技术在版权保护中的应用研究。

数字水印技术概述数字水印技术是一种将特定信息嵌入到数字媒体中的技术,使得这些信息对于普通用户来说是不可见的。

数字水印可以分为空域水印和频域水印两种类型。

空域水印是将信息直接嵌入到原始数据中,而频域水印则是通过对原始数据进行变换,将信息嵌入到变换域中。

数字水印技术具有不可见性、鲁棒性、安全性等特点,可以在不影响原始数据质量的情况下实现信息隐藏和提取。

Matlab在数字水印中的应用Matlab作为一种功能强大的科学计算软件,提供了丰富的工具箱和函数,可以方便地实现各种数字水印算法。

在数字水印领域,Matlab常用于图像、音频和视频等多媒体数据的处理和分析。

通过Matlab提供的图像处理工具箱、信号处理工具箱等,可以快速实现数字水印算法的设计、仿真和评估。

基于Matlab的数字水印算法空域水印算法空域水印算法是将信息直接嵌入到原始数据中,常见的算法包括LSB替换、扩频水印等。

在Matlab中,可以通过对图像进行像素级操作实现LSB替换算法,也可以利用乘法运算实现扩频水印算法。

这些算法在版权保护中有着广泛的应用。

频域水印算法频域水印算法是通过对原始数据进行变换,将信息嵌入到变换域中。

常见的频域水印算法包括DCT变换、DWT变换等。

在Matlab中,可以利用信号处理工具箱提供的函数实现这些变换,并将信息嵌入到相应的频域系数中。

这些算法通常具有更好的鲁棒性和安全性。

数字水印在版权保护中的应用数字水印技术在版权保护领域有着广泛的应用。

LSB算法水印安全性测试及MATLAB实现

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的数字水印设计基于空域的水印实现

基于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的数字水印算法及MATLAB实现

基于LSB的数字水印算法及MATLAB实现

基于LSB 的数字水印算法及MATLAB 实现加密算法宗岳,王恺山东科技大学 山东,中国 ***************摘要—LSB 是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。

本文首先介绍了LSB 技术的原理和特点,然后讨论了基于LSB 的数字水印算法。

最后利用MATLAB 2010 b2对这一算法的加密过程进行了仿真。

关键词:LSB 数字水印 信息隐藏 MATLABI. 介绍随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。

本文首先介绍了了数字水印技术的原理和分类,接着对LSB 算法原理及LSB 算法实现进行了介绍,最后使用MATLAB 对其加密过程进行了仿真。

II. 数字水印技术的基本原理数字水印的主要 目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。

数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。

数字水印的嵌入和提取过程如图1,图2所示。

图1 数 字水印的嵌入过程图2 数字水印的提取过程图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。

根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。

III. 数字水印的分类数字水印技术可以从不同的角度进行分类,因此有多种分类方法。

按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。

鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。

完整word版,LSB算法实现

完整word版,LSB算法实现

LSB算法实现实验报告一、实验环境1、计算机一台;2、Windows XP操作系统、MATLAB7.5二、实验内容与原理LSB(Least Significant Bit)算法是将秘密信息嵌入到载体图像像素值的最低有效位,也称最不显著位,改变这一位置对载体图像的品质影响最小。

LSB算法的基本原理:对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。

由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。

然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。

因此LSB算法最初是用于脆弱性水印的。

LSB算法基本步骤:1、将得到的隐藏有秘密信息的十进制像素值转换为二进制数据;2 、用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;3、将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。

图1. LSB原理示意图三、实验步骤3.1信息嵌入Picture=imread(‘c:\\test.tif’); %读入载体图像Double_Picture=Picture;Double_Picture=double(Double_Picture);%将图像转换为二进制‘c:\\test.txt’_id=fopen(‘c:\\test.txt’,'r'); %读取秘密信息文件[msg,len]=fread(‘c:\\test.txt’_id,'ubit1');[m,n]=size(Double_Picture);p=1; %p 为秘密信息的位计数器for f2=1:nfor f1=1:mDouble_Picture(f1,f2)=Double_Picture(f1,f2)-mod(Double_Picture(f1,f2),2)+msg(p,1);%将秘密信息按位隐藏入连续的像素中if p==lenbreak;endp=p+1;endif p==lenbreak;endendDouble_Picture=uint8(Double_Picture);imwrite(Double_Picture,‘c:\\result.tif’); %生成秘密信息subplot(121);imshow(Picture);title(' 未嵌入信息的图片');subplot(122);imshow(Double_Picture);title(' 嵌入信息的图片');图2. 嵌入信息前后结果图3.2 信息提取Picture=imread(‘c:\\result.tif’); %读入隐秘信息的图像Picture=double(Picture);[m,n]=size(Picture);frr=fopen(‘c:\\result.txt’,'a');len=8; %设定隐秘信息长度p=1;for f2=1:nfor f1=1:mif bitand(Picture(f1,f2),1)==1%顺序提取图像相应像素LSB 的秘密信息fwrite(frr,1,'bit1');result(p,1)=1;elsefwrite(frr,0,'bit1');result(p,1)=0;endif p==len %判断秘密信息是否读完break;endp=p+1;endif p==lenbreak;endendfclose(frr);图 3 提取结果四、结论基于Matlab 实现了图像的LSB 信息隐藏算法,并讨论了两种图像像素选择算法,通过比较可以发现,使用随机选择算法会将秘密信息均匀地嵌入到整个图像中,增强了秘密信息的不可见性和破解的难度,而顺序选择算法则容易受到视觉攻击。

LSB算法的MATLAB实现

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的图像数字水印实验

基于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能正确运⾏.。

基于Matlab的数字图像水印技术

基于Matlab的数字图像水印技术

基于Matlab 的数字图像水印技术**********摘要:数字水印技术涉及到许多图像处理算法以及数学计算工具等,如果用普通编程工具实现上述算法,需要要花费大量的时间,MathWorks公司推出的一种简单、高效、功能极强的高级语言——MATLAB语言,它具有高性能数值计算能力,可视化计算环境。

只需短短的几行代码就可在MATLAB中解决许多复杂的计算问题。

关键字:图像处理,数字水印, MATLAB0 引言随着Internet的普及,信息的安全保护问题越来越备受关注。

如何有效地防止数据的非法复制以及鉴别数字媒体的知识产权,成为急需解决的问题。

Caronni在1993年提出了数字水印,并将其应用于数字图像,后来,将数字水印的概念扩展到电视图像等领域,数字水印技术是一种版权保护的重要手段,得到了广泛的研究和应用。

本文简要介绍一下基于Matlab的数字图像水印技术。

介绍数字水印的原理以及使用方法,探索了基于离散余弦变换(DCT)的数字图像水印算法,并借助MATLAB,实现数字水印的嵌入、提取以及攻击测试。

1 数字水印技术1.1 数字水印数字水印(Digital Watermarking)技术是将一些标识信息(即数字水印)直接嵌入数字载体当中,例如包括多媒体、文档、软件等,但不影响原载体的使用价值,也不容易被人的知觉系统,如视觉或听觉系统觉察到。

通过这些隐藏在载体中的信息,可以确认内容创建者、购买者、传送隐秘信息或者判断载体是否被篡改等。

数字水印是信息隐藏技术的重要研究方向之一。

从信号处理的角度看,在载体图像中嵌入数字水印,可以视为在强背景(即原始公开图像)下叠加一个视觉上看不到的弱信号(即水印图像),由于人的视觉系统(Human VisualSystem,HVS)[1]分辨率受到一定的限制,只要保证叠加信号的幅度低于HVS的对比度门限,HVS就感觉不到信号的存在,因此,通过对载体对象作一定的调整变换,就有可能在不引起人感知的情况下嵌入一些信息。

信息隐藏与数字水印实验教程课程设计

信息隐藏与数字水印实验教程课程设计

信息隐藏与数字水印实验教程课程设计课程设计简介信息隐藏和数字水印是一类在数字媒体内容中嵌入一些“隐蔽”的信息的可逆技术,其中信息隐藏以隐藏为目标,数字水印以鉴别为目标。

本课程设计是一款针对信息隐藏和数字水印技术的实验教程,旨在让学生了解信息隐藏和数字水印的基本概念、算法流程及实验操作。

实验教程实验1:LSB信息隐藏LSB信息隐藏是一种较为简单的信息隐藏技术,利用了图像或音频信号中的最低有效位(LSB)来储存信息。

本实验将让学生了解LSB信息隐藏的基本思路和实现流程。

实验步骤:1.安装Python编程环境和必要的库(numpy、pillow等);2.编写Python代码实现将信息隐藏到图像中的最低有效位;3.对图像进行解密,将隐藏的信息提取出来并显示。

实验要求:1.能够了解LSB信息隐藏的原理;2.能够独立完成Python代码的编写和调试;3.能够对嵌入信息后的图像进行正确解密。

实验2:DCT数字水印DCT数字水印是一种在频域中实现数字水印嵌入到图像或视频信号中的可逆算法,其中DCT(离散余弦变换)是一种常见的频域转换方式。

本实验将让学生了解DCT数字水印的基本原理和实现方法。

实验步骤:1.安装MATLAB编程环境和必要的工具箱(image processing等);2.编写MATLAB代码实现将数字水印嵌入图像中的DCT系数;3.对嵌入数字水印后的图像进行攻击,如JPEG压缩、调整亮度等;4.对加入攻击后的图像进行解密,将数字水印提取出来并验证。

实验要求:1.能够了解DCT数字水印的基本原理;2.能够独立完成MATLAB代码的编写和调试;3.能够对加入攻击后的图像进行正确解密和验证。

实验结论通过本次课程设计,学生能够了解信息隐藏和数字水印的基本概念,并通过实验了解LSB信息隐藏和DCT数字水印的基本算法和实现方式。

同时,学生也能够了解到数字水印的鲁棒性和对攻击的抵抗能力,以及对数字媒体内容可信度的提升。

数字水印技术LSB算法MATLAB源代码

数字水印技术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算法的数字水印实现

基于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 主 要 函 数 模 块 .
系统 主要 函数 功能 如下 :
打开位图文件 : 该模块首先读取位 图文件 , 将其按照序列载人 内存 , 然后判 断该图是否 已经含有隐

基于LSB的数字水印算法及MATLAB实现

基于LSB的数字水印算法及MATLAB实现

基于LSB 的数字水印算法及MATLAB 实现加密算法宗岳,王恺山东科技大学 山东,中国 ***************摘要—LSB 是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。

本文首先介绍了LSB 技术的原理和特点,然后讨论了基于LSB 的数字水印算法。

最后利用MATLAB 2010 b2对这一算法的加密过程进行了仿真。

关键词:LSB 数字水印 信息隐藏 MATLABI. 介绍随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。

本文首先介绍了了数字水印技术的原理和分类,接着对LSB 算法原理及LSB 算法实现进行了介绍,最后使用MATLAB 对其加密过程进行了仿真。

II. 数字水印技术的基本原理数字水印的主要 目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。

数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。

数字水印的嵌入和提取过程如图1,图2所示。

图1 数 字水印的嵌入过程图2 数字水印的提取过程图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。

根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。

III. 数字水印的分类数字水印技术可以从不同的角度进行分类,因此有多种分类方法。

按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。

鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。

LSB算法的matlab实现

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。

基于LSB算法的数字水印实现

基于LSB算法的数字水印实现

基于LSB算法的数字水印实现龙菲【期刊名称】《安庆师范学院学报(自然科学版)》【年(卷),期】2011(017)003【摘要】In the article a very practical and easy LSB algorithm is realized by VC++,embedding the binary data of a image into the least significant bits of a target-image,attaining a function of concealing the information and marking image.And in this article the format of bitmap file is analysed,the main content of LSB is emphasised.At the end,I have tested the program based on the algorithm,and the resut represents a hiden and high-fidelity character.%应用VC++实现一种简单易行的LSB算法,该算法将水印图像的二值数据嵌入目标图像的最低有效位,从而达到隐藏信息、标记图片的作用。

同时文中还简要分析了BMP文件格式,并着重讲解了LSB算法的核心思想。

最后,对应用算法实现的程序进行了测试,测试结果表明该算法具有良好的隐蔽性和高保真性。

【总页数】6页(P64-69)【作者】龙菲【作者单位】安徽理工学校电子信息工程教研室,安微安庆246000【正文语种】中文【中图分类】TP309【相关文献】1.基于LSB的QR码数字水印算法研究 [J], 朱本威;万武南;陈运2.基于LSB的数字水印算法及MATLAB实现 [J], 黄仿元3.基于不同图层的LSB自适应数字水印隐藏算法研究 [J], 宫海梅4.利用Delphi实现数字水印LSB算法 [J], 戚利娜5.基于LSB数字水印算法的研究与实现 [J], 王东东;王福明因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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); %水印的列数
% 将水印扩展为原图像大小,并写入watermark
for ii = 1:Mc
for jj = 1:Nc
watermark(ii,jj)=message(mod(ii,Mm)+1,mod(jj,Nm)+1);
end
end
% 将原图的最低有效位值换为水印的值
watermarked_image=cover_object;
for ii = 1:Mc
for jj = 1:Nc
watermarked_image(ii,jj)=bitset(watermarked_image(ii,jj),1,watermark(ii,jj)); end
end
% 将嵌入水印图像写入lsb_watermarked.jpeg
imwrite(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:Mc
for jj = 1:Nc
watermark1(ii,jj)=message1(mod(ii,Mm)+1,mod(jj,Nm)+1);
end
end
figure(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';。

相关文档
最新文档