基于LSB的数字水印算法及MATLAB实现
(完整word版)数字图像水印matlab实现
论文独创性声明本人所呈交的论文,是指导教师的指导下,独立进行研究和开发工作所取得的成果。
除文中已特别加以注明引用的内容外,论文中不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的工作做出重要贡献的个人和集体,均已在文中以明确方式标明并致谢。
本人完全意识到本声明的法律结果由本人承担.特此声明。
论文作者(签名):20 年月日摘要随着计算机网络的迅速发展,包括数字图像在内的数字媒体得到了广泛的应用,数字媒体的数据逐渐成为人们获取信息的重要来源,但随之而来出现了一系列如随意复制、编辑、非法传播数字图像的信息安全问题,数字媒体的版权保护问题变的日益突出,数字图像水印技术由此应用而生,已成为信息安全领域的一个研究热点.本文比较系统地研究了数字水印技术在静止图像中的应用问题。
首先介绍了数字水印技术的发展背景,然后对数字水印的原理、特点、分类、典型算法、应用领域以及评价标准等等进行了简要的分析。
其次,本文主要是针对目前现有数字图像水印算法实现过程比较复杂,其中重点讨论关于DCT的数字图像水印技术的嵌入,提取和水印的攻击测试等.最后对数字图像水印的特征进行分析总结。
最终通过Matlab这一工具来实现其具体的过程.通过实验对比分析得到该种算法具有一定的可行性以及较好的鲁棒性。
关键词:数字图像水印,信息安全,DCT算法,Matlab.AbstractWith the rapid development of computer network,digital media, including digital image has been widely used,digital media data gradually become an important source of obtaining information,but there's a series of such as free to copy, edit,illegal dissemination of digital image information security,copyright protection of digital media has become increasingly outstanding, digital image watermarking technology and the application, has become a research hotspot in the field of information security。
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';。
matlab数字水印嵌入与提取代码
数字水印技术是一种用于保护数字信息安全和保护知识产权的重要技术手段。
Matlab作为一种强大的数学计算软件,具有丰富的数字信号处理和图像处理工具包,能够很好地支持数字水印的嵌入和提取。
本文将介绍如何使用Matlab进行数字水印的嵌入和提取,并给出相应的代码实现。
1. 数字水印嵌入数字水印嵌入是将一段隐藏的信息嵌入到载体中,使得这段信息对于一般观察者来说是不可察觉的。
在Matlab中,可以使用一些图像处理工具进行数字水印的嵌入。
需要读入载体图像和待嵌入的数字水印。
载体图像可以使用Matlab 中的imread函数进行读取,得到一个包含图像像素信息的矩阵。
待嵌入的数字水印可以是一段文本、一幅小型图像或者一段音频信号。
接下来,可以选择合适的嵌入算法进行数字水印的嵌入。
常用的算法包括LSB替换算法、DCT变换算法以及扩频水印算法等。
这些算法都可以在Matlab中找到相应的实现。
将得到的嵌入水印后的图像保存起来,成为带有数字水印的图像。
可以使用Matlab中的imwrite函数将处理后的图像保存到本地。
2. 数字水印提取数字水印提取是将嵌入在载体中的数字水印提取出来,还原成原始的水印信息。
在Matlab中,可以利用数字信号处理和图像处理工具进行数字水印的提取。
需要读入带有数字水印的载体图像。
同样可以使用Matlab中的imread函数进行读取。
接下来,根据数字水印嵌入时所采用的算法,使用相应的提取算法进行数字水印的提取。
提取算法通常与嵌入算法是对应的,可以在Matlab中找到相应的实现。
将提取得到的数字水印展示出来,可以是一段文本、一张图像或者一段音频信号。
在Matlab中可以利用文本处理工具、图像处理工具和音频处理工具展示提取得到的数字水印信息。
3. 示例代码以下是一个简单的示例代码,演示了如何在Matlab中进行数字水印的嵌入和提取:数字水印嵌入image = imread('carrier_image.jpg'); 读入载体图像watermark = imread('watermark_image.jpg'); 读入待嵌入的数字水印watermarked_image = embed_watermark(image, watermark); 使用embed_watermark函数进行数字水印的嵌入imwrite(watermarked_image, 'watermarked_image.jpg'); 保存带有数字水印的图像数字水印提取watermarked_image = imread('watermarked_image.jpg'); 读入带有数字水印的载体图像extracted_watermark = extract_watermark(watermarked_image); 使用extract_watermark函数进行数字水印的提取imshow(extracted_watermark); 展示提取得到的数字水印信息以上代码中,embed_watermark和extract_watermark分别是数字水印的嵌入和提取函数。
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两大部分。
基于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作为一个功能强大的科学计算软件,提供了丰富的工具和函数来实现数字水印的嵌入和提取。
本文将介绍Matlab中数字水印技术的基本原理,并通过实例演示嵌入和提取过程。
一、数字水印的基本原理数字水印技术利用数字信号的统计特性,将水印信息嵌入到原始信号中,形成一个带有隐藏信息的新信号。
在嵌入和提取过程中,必须保证水印对原始信号的影响尽可能小,以保持信号的质量和可辨识度。
数字水印的嵌入过程主要包括以下几个步骤:1. 选择合适的水印信息:水印信息可以是文字、图像、音频等形式,需要根据应用需求进行选取。
2. 将水印信息与原始信号进行编码和调制:通过编码和调制技术,将水印信息嵌入到原始信号的特定位置,使其与原始信号融为一体。
3. 保证水印的安全性:为了抵抗攻击和伪造,需要对水印进行加密和鲁棒性处理,以保证水印的可靠性和可提取性。
数字水印的提取过程主要包括以下几个步骤:1. 对带水印信号进行预处理:包括噪声滤波、增强对比度等,以提高水印的可提取性。
2. 提取水印信息:通过解调和解码技术,从带水印信号中还原出水印信息。
3. 验证水印的完整性和准确性:对提取出的水印进行验证和比对,以确定提取的水印是否与原始水印一致。
二、Matlab实现数字水印嵌入与提取Matlab提供了强大的图像处理工具箱和信号处理工具箱,可以方便地实现数字水印的嵌入和提取。
以下将以图像水印为例,介绍Matlab中数字水印的嵌入和提取过程。
1. 数字水印的嵌入a. 选择水印图像和原始图像:从计算机中选择一张水印图像和一张原始图像,作为嵌入水印的输入。
b. 对原始图像进行预处理:包括图像的大小调整、对比度增强等操作,以提高水印的嵌入效果。
c. 对水印图像进行处理:通过调整水印图像的大小和位置,使其适应于原始图像的特定区域。
基于LSB的时域音频水印改进算法的软件实现
Ab t a t T e a d o wae ma k n c e fL B w s i r v d a mi g a s e s p r t n a d i we sr c : h u i t r r i g s h me o S a mp o e i n ti a y o e a i n t l r t o so o u t e s T e i r v d L B w tr r i g s h me h ih e s t e L B ly r n n u e h i d t rb sn s . h mp o e S ae a k n c e e g t n h S a e s a d e s r s t e l i i m mp y tr u h t e c a g ft e c n g o s c d s a d n i h p n .F o t e w o g b t ae r p r c iv d b h o g h h n e o o t u u o e n os s a i g r m r n i r t e o t a h e e y h i e h s e lt n s f r ,t e n w S t r r k n c e a e b t rr b sn s . mua o o t e h e L B wae ma i g s h me h st et u t e s i wa h e o
视频等媒体上 , 法分开 -. 无 l 这样就 可以一直跟 踪 J
音视频媒体的使用情况 , 保护数 字产 品的版权 , 证
明产品的真实可靠性或者提供 产品的附加信息. 水 印通常是不可见或不可察觉的 , 它与原始数据紧密 结合并 隐藏其 中, 成为与原始数据不可分离的一部 分, 并可以经受一些攻击操作. 目 前对于数字水 印的研究 , 以数字 图像水印的
基于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], 王东东;王福明因版权原因,仅展示原文概要,查看原文内容请购买。
基于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的像素与其对应余数相减。
数字水印技术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 主 要 函 数 模 块 .
系统 主要 函数 功能 如下 :
打开位图文件 : 该模块首先读取位 图文件 , 将其按照序列载人 内存 , 然后判 断该图是否 已经含有隐
基于LSB的遥感影像数字水印的实现
E — ma i l : e d u f @d n z s . n e t . c n h t t p : / / ww w. d n z s . n e t . a n T e l : + 8 6 — 5 5 1 — 6 5 6 9 0 9 6 3 6 5 6 9 0 9 6 4
Ex p e ime r n t s h a v e s h o w n t h a t t h e L S B lg a o i r t h m p r o p o s e d i n t h i s p a p e r h a s g o o d i n v i s i b i l i t y , e a s y r e a l i z a t i o n . An d i t h a s a c e r t a i n
的鲁棒 性。 关键词 : L S B ; 数字水印 ; 遥感影像
中圈分类号 : T P 7 5
文献标识码 : A
文章编号 : 1 0 0 9 - 3 0 4 4 ( 2 0 1 5 ) 1 3 - 0 1 7 3 - 0 2
Th e I mp l e me n t a t i o n o f Re mo t e S e n s i n g I ma g e Wa t e r ma r k Ba s e d o n LS B
J I A N G We n - j u a n , C HI B i — x i a 2 , ME N G B i n ( 1 . S c h o o l o f I n f o r m a t i o n S c i e n c e a n d T e c h n o l o g y , Ha i n a n N o ma r l U n i v e r s i t y , Ha i k o u 5 7 1 1 5 8 , C h i n a ; 2 . F u j i a n L o v e a n d G o o d
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文章编号:1002-6886(2008)02-0067-03基于L SB 的数字水印算法及M AT LAB 实现黄仿元(贵州大学职业技术学院,贵州 贵阳 550003) 作者简介:黄仿元(1980—),男,助教,现于贵州大学攻读电子与通信工程专业工程硕士,主要研究方向:数字图像处理、信号与信息系统。
收稿日期:2008-1-2摘要:数字水印技术是近些年提出的一种信息隐藏技术,该技术为多媒体信息的版权保护提供了一种新的方法。
本文首先介绍了数字水印技术的原理、特点及分类,然后讨论了基于LS B 的数字水印算法,最后利用MAT LAB7.0对这一算法进行了仿真。
关键词:数字水印 信息隐藏 LS B MAT LABD i g it a lW a ter mark i n g Ba sed on L SB and I m ple m en t a ti on of M AT LABHUANG FangyuanAbstract:D igitalW ater marking is a kind of advanced technol ogy of infor mati on hiding appeared in recent years .W e p r ovided s ome ne w ways of copyright p r otecti on for the multi m edia infor mati on with this technol ogy .I n this paper,we intr oduced digital water marking technol ogy p rinci p les,characteristics and classificati on firstly,then discussed the p rinci p le of digital water marking based on LS B ,and si m ulated the algorith m with MAT LAB7.0finally .Key words:water mark;i m f or mati on hiding;LS B;MAT LAB0 前言随着计算机的普及、网络技术的发展、媒体信息的数字化,音乐、图像、视频等多媒体信息的传播变得越来越方便,但同时也给版权侵犯行为带来了可乘之机。
诸如非法拷贝、传播、篡改等侵权行为变得越来越容易、快速和隐蔽,同时难以取证,这使得数字媒体的所有者和发行者蒙受了巨大的经济损失。
为有效保护知识产权,人们发明了一种将公司标识、特定数字等放入多媒体信息中的方法,以此来标识公司信息或者媒体所有权等信息,这一技术就是信息隐藏技术中的一个分支———数字水印技术。
本文首先介绍了数字水印技术的产生和发展,接着对数字水印的分类做了介绍,然后讨论了一种基于LS B 的数字图像水印算法,最后利用MAT LAB7.0对这一算法进行了实现。
1 数字水印技术的产生和发展现在的版权保护系统可以采用密码认证技术,但是传统的加密方式对多媒体信息的保护有一定的局限性,不能够完全保证信息的安全性。
一旦密码被破解,多媒体信息就可以被任意复制、篡改,并且在法庭上很难取证。
数字水印技术可以做为加密技术的补充,增强对多媒体信息的版权保护。
数字水印技术最早是在1994年的国际图像处理会议上由shcnydel 等人提出的,这一技术在当时的学术界引起广泛的关注,并且迅速成为信息安全和图像处理领域的研究热点。
此后,很多高校、研究机构、企业和公司都展开了对数字水印技术的研究,并取得了一定的成果。
我国的数字水印技术研究也得到了国家相关部门的重视,并有一些研究成果逐步走向实用化。
2 数字水印技术的基本原理数字水印的主要目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。
数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。
数字水印的嵌入和提取或检测的通用模型如图1,图2所示。
图1是数字水印的嵌入过程,通过密钥可以提高数字水印的隐蔽性、抗攻击性,并非必须的输入。
根据不同的・76・计算机应用 用途,嵌入的水印有些是需要还原的,而有些则需要验证水印的存在性,前者需要数字水印的提取算法,而后者需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。
3 数字水印的分类数字水印技术可以从不同的角度进行分类,因此有多种分类方法。
・按数字水印的特性可分为鲁棒数字水印和脆弱数字水印。
鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。
而脆弱水印相反,它对攻击敏感,可以根据脆弱水印的状态判断原始信息是否被修改过。
・按数字水印所附载的媒体可分为图像水印、音频水印、视频水印和文本水印等。
每一种数字化的媒体都有相应的水印算法,这也造成了数字水印算法的复杂性。
・按数字水印隐藏的位置划分可以分为空(时)域数字水印、频域数字水印、时/频域数字水印和时间/尺度数字水印。
原始信息通常在空域或者时域上表示,根据信号处理理论有多种变换将信号变化到另外的域上,每一种域上都可以嵌入数字水印,也就产生了相应的数字水印算法。
・按数字水印的可见性可以分为可见数字水印和非可见数字水印。
可见数字水印通常是将公司表示叠加到原始图像上,算法比较简单,也有相应的应用软件,如Uni D rea m Marking Technol ogies公司的Phot o W ater mark。
而不可见数字水印要求嵌入的水印是不能被人的视觉系统感知的,其算法相对复杂,目前还没有较成熟的应用软件。
关于数字水印算法的分类还有很多不同的分类方法,比如按用途划分,按检测过程划分等,限于篇幅,本文仅介绍了较为常见的几种分类。
4 基于LS B的数字水印算法4.1LS B算法的原理LS B是Least Singificant B it的缩写,意思是最不重要比特位。
LS B数字水印算法按照上文介绍的四种数字水印分类方法分别属于:鲁棒性数字水印、图像数字水印、空域数字水印、不可见数字水印。
LS B算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,对图像信息产生的影响非常小,人眼的视觉感知系统往往不能察觉。
以一幅256灰度的图像为例,256灰度共需要8个位来表示,但其中每一个位的作用是不一样的,越高位对图像的影响越大,反之越低的位影响越小,甚至不能感知。
图3显示了一幅256灰度的图像的8个位平面。
图3中第1张是原始图像,256灰度的图片,后面依次是从高到低的位平面。
从几个位平面图中可以看出,较高的位平面反映的图像的轮廓等主要信息,而较低的位平面反映的是图像的细节信息,最低的2个位平面看上去和图像几乎没有相关性,像是噪声。
图4显示了原始图像和将原始图像最低位平面置0后的图像,两幅图像的差别是非常小的,人眼的视觉感知系统很难感知。
基于这个原理,如果将最低位替换成数字水印的数据,人眼也难以察觉加入数字水印前后的图像的变化,这样就能够实现数字水印的不可感知性。
4.2LS B算法的实现LS B算法实现较为简单,首先,需要考虑嵌入的数字水印的数据量,如果嵌入最低的1位,则可以嵌入的信息量是原始图像信息量的1/8,如果适用最低两位则可以嵌入的信息量是1/4,以此类推。
适用的最低位越多,嵌入的数字水印的信息量越大,同时对图像的视觉效果影响也越大。
然后,适当调整数字水印图像的大小和比特位数,以适应数字水印图像数据量的要求。
最后,对原始图像中要使用的最低位置0,再将数字水印数据放入原始图像的最低位即可。
下面通过MAT LAB7.0来实现这一算法。
MAT LAB是Math Works公司推出的一套高性能的数值计算和可视化工具软件,利用MAT LAB只需要几个函数和十来行语句就可以实现基本的LS B算法,而如果用C 语言等程序语言来实现则可能需要上百行的语句。
这里选用一幅256×256像素,256灰度的图像,数字水印用贵・86・现代机械 2008年第2期 州大学校徽。
MAT LAB 中可以用bitset ()函数实现位平面置0,和嵌入数字水印数据。
置0的方法是调用函数bitset (A,bit )。
A 表示要置0的图像,bit 表示要对哪一位置0。
若要对最低位置0,则可以写为:bitset (A,1)。
嵌入水印的方法是:w_i (ii,jj )=bitset (w_i (ii,jj ),1,w (ii,jj )),w_i 表示要嵌入水印的图像,1表示在最低位嵌入,2表示在第二个位平面嵌入,以此类推,w 表示水印图像。
水印图像、原始图像、嵌入水印之后的图像如图5所示。
由于是在最低位嵌入数字水印图像,因此左边嵌入前的图像和右边嵌入后的图像没有明显的差别,数字水印得到了很好的隐藏。
MAT LAB 程序如下(其中guida_2.b mp 是二值数字水印图像文件,gear .b mp 是原始图像文件,lsb _w .b mp 是嵌入水印之后的图像文件)。
[C,map ]=i m read (‘gear .b mp ’);[m,map1]=i m read (‘guida_2.b mp ’);Mc =size (C,1);Nc =size (C,2);Mm =size (m,1);Nm =size (m,2);w_i =C;f or ii =1:Mcf or jj =1:Ncw_i (ii,jj )=bitset (w_i (ii,jj ),1,m (ii,jj ));endendi m write (w_i,‘lsb_w .b mp ’,‘b mp ’);figure (1)i m show (w_i,[])title (‘嵌入水印后’)figure (2) i m show (C,[])title (‘嵌入水印前’)figure (3)i m show (m,[])title (‘水印图片’)LS B 算法简单,实现容易,同时可以保证数字水印的不可见性,由于可以在最低位的每个像素上都插入数字水印信息,因此有较大的信息嵌入量。
LS B 算法一般嵌入图像的最低一位或者两位,如果嵌入的位数太多,则会被人眼察觉到。
但是由于数字水印位于图像的不重要像素位上,因此很容易被图像过滤、量化和几何型变等操作破坏,以致无法恢复数字水印。
针对基本的LS B 算法的缺点,一些研究者也提出了一些改进的算法,如奇偶标识位隐藏算法、索引数据链隐藏算法等,这些算法能增强数字水印的隐蔽性。