目录

1设计目的 1

2设计要求 2

3相关知识 3

3.1 数字水印的相关知识数字水印的相关知识 3

3.2 数字水印技术的基本原理 4

3.3数字水印的分类 5

4设计内容 6

4.1 LSB算法介绍 6

4.1.1 LSB算法的基本原理 6

4.1.2 LSB算法基本步骤 6

4.2 LSB算法的实现 6

4.3设计流程图 7

4.3.1水印嵌入的流程图 7

4.3.2水印提取的流程图 8

5程序源代码 9

6仿真结果与分析 12

6.1 嵌入水印后的运行结果 12

6.2 提取水印后的运行结果 13

6.3 结果分析 14

7结论语 15

8参考文献 16

1设计目的

(1)了解数字水印的基本概念,深入理解基于LSB算法的数字水印嵌入与提取方法。

(2)运用MATLAB语言编程实现图像水印的嵌入和提取。

(3)能够显示水印嵌入前后的载体图像,能够显示嵌入与提取的水印。

(4)熟练掌握 MATLAB软件的基本操作。

(5)学会掌握 MATLAB软件的程序编程。

(6)培养独立分析和解决问题的能力,学会撰写课程设计的总结报告。

2设计要求

本设计利用MATLAB进行编程及仿真,仿真内容为基于Matlab的数字水印设计,基于空域的水印实现。拟利用所学数字图象处理技术知识,在MATLAB软件系统上来实现对图像水印的嵌入和提取。

(1)掌握课程设计的相关知识、概念、思路及目的。

(2)程序设计合理、能够正确运行且操作简单,可实施性强。

(3)掌握数字水印技术的基本原理。

(4)掌握基于空域的LSB算法并明确程序操作步骤的先后顺序。

3相关知识

3.1 数字水印的相关知识数字水印的相关知识

数字水印(Digital Watermark)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。数字水印是信息隐藏技术的一个重要研究方向。

在数字水印技术中,水印的数据量和鲁棒性构成了一对基本矛盾。从主观上讲,理想的水印算法应该既能隐藏大量数据,又可以抗各种信道噪声和信号变形。然而在实际中,这两个指标往往不能同时实现,不过这并不会影响数字水印技术的应用,因为实际应用一般只偏重其中的一个方面。如果是为了隐蔽通信,数据量显然是最重要的,由于通信方式极为隐蔽,遭遇敌方篡改攻击的可能性很小,因而对鲁棒性要求不高。但对保证数据安全来说,情况恰恰相反,各种保密的数据随时面临着被盗取和篡改的危险,所以鲁棒性是十分重要的,此时,隐藏数据量的要求居于次要地位。数字水印技术是通过一定的算法将一些标志性信息直接嵌到多媒体内容当中,但不影响原内容的价值和使用,并且不能被人的知觉系统觉察或注意到。水印信息可以是作者的序列号、公司标志、有特殊意义的文本等,可用来识别文件、图像或音乐制品的来源、版本、原作者、拥有者、发行人、合法使用人对数字产品的拥有权。与加密技术不同,数字水印技术并不能阻止盗版活动的发生,但它可以判别对象是否受到保护,监视被保护数据的传播、真伪鉴别和非法拷贝、解决版权纠纷并为法庭提供证据。为了给攻击者增加去除水印的难度,目前大多数水印制作方案都采用密码学中的加密(包括公开密钥、私有密钥)体系来加强,在水印的嵌入、提取时采用一种密钥,甚至几种密钥联合使用。

随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。本文首先介绍了了数字水印技术的原理和分类,接着对LSB算法原理及LSB算法实现进行了介绍,最后使用MATLAB 对其加密过程进行了仿真。

3.2 数字水印技术的基本原理

数字水印的主要目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。数字水印的嵌入和提取过程如图3.1,图3.2所示。

图3.1 数字水印的嵌入过程

图3.2 数字水印的提取过程

图3.1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。根据用途不同,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图3.2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。

3.3数字水印的分类

数字水印算法一般可分为两种空域法和频域法,频域法有以下优点:

(1)嵌入的水印信号能量可以分布到空域的所有像素上,有利于保证水印的不可见 性;

(2)视觉系统(HVS)的某些特性(如频率的掩蔽特性)可以更方便地结合到水印编码过程中;

(3)频域法可与国际数据压缩标准兼容,从而实现在压缩域(compressed domain)内的水印编码。所以我们也以频域法为主介绍MATLAB在数字水印技术中的使用。

按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。而脆弱水印相反,它对攻击敏感,可以根据脆弱水印的状态判断原始信息是否被修改过。

按数字水印所附载的媒体可分为图像水印、音频水印、视频水印和文本水印等。每一种数字化的媒体都有相应的水印算法,这也造成了数字水印算法的复杂性。

按数字水印隐藏的位置划分可以分为空 (时)域数字水印、频域数字水印、时/频域数字水印和时间/度数字水印。原始信息通常在空域或者时域上表示,根据信号处理理论有多种变换将信号变化到另外的域上,每一种域上都可以嵌入数字水 印,也就产生了相应的数字水印算法。

按数字水印的可见性可以分为可见数字水印和非可见数字水印。可见数字水印通常是将公司表示叠加到原始图像上,算法比较简单,也有相应的应用软件,如Undreamt Marking Technologies公司的Photo Watermark。而不可见数字水印要求嵌入的水印是不能被人的视觉系统感知的,其算法相对复杂。

关于数字水印算法的分类还有很多不同的分类方法,比如按用途划分,按检测过程划分等,限于篇幅,本文仅介绍了较为常见的基于空域的LSB算法。

4设计内容

4.1 LSB算法介绍

LSB是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。本文首先介绍了LSB技术的原理和特点,然后讨论了基于LSB的数字水印算法。最后利用MATLAB 2009 b对这一算法的加密过程进行了仿真。

4.1.1 LSB算法的基本原理

对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。因此LSB算法最初是用于脆弱性水印的。

4.1.2 LSB算法基本步骤

(1) 将得到的隐藏有秘密信息的十进制像素值转换为二进制数据.

(2) 用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位.

(3)将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像.

4.2 LSB算法的实现

LSB算法实现较为简单,首先,需要考虑嵌入的数字水印的数据量,如果嵌入最低的1位,则可以嵌入的信息量是原始图像信息量的1/8,如果适用最低两位则可以嵌入的信息量是1/4。但是嵌入的数字水印的信息量越大,同时对图像的视觉效果影响也越大。在这里要嵌入一个二值的图像。然后,适当调整数字水印图像的大小和比特位数,以适应数字水印图像数据量的要求。最后,对原始图像中要使用的最低位置0,再将数字水印数据放人原始图像的最低位即可。下面通过MATLAB 2009 b2实现这一算法。

这里选用一幅3264*2448像素,256灰度的图像,数字水印用“万泉公园”的字样的二值图像。

置0的方法是调用模2函数mod(a,2),将得到的数值与原水印相减,从而得到最低位为0的图片。(使用两位最低有效位的话则用模4函数mod(a,4)然后相减)。LSB算法简单,实现容易,同时可以保证数字水印的不可见性,由于可以在最低位的每个像素上都插人数字水印信息,因此有较大的信息嵌入量。LSB算法一般嵌入图像的最低一位或者两位,如果嵌入的位数太多,则会被人眼察觉到。但是由于数字水印位于图像的不重要像素位上,因此很容易被图像过滤、量化和几何型变等操作破坏,以致无法恢复数字水印。针对基本的LSB算法的缺点,一些研究者也提出了一些改进的算法,如奇偶标识位隐藏算法、索引数据链隐藏算法等,这些算法能增强数字水印的隐蔽性。

4.3设计流程图

4.3.1水印嵌入的流程图

图4.1 水印嵌入的流程图

4.3.2水印提取的流程图

读取带有水印的图像和水印图像

得到嵌入的水印

图4.2水印提取的流程图

5程序源代码

  1. 嵌入水印代码

clear all;

% 保存开始时间

start_time=cputime;

% 读入原图像

file_name='E:\1.BMP;

[cover_object,map]=imread(file_name);

% 读入水印图像

file_name='E:\2.BMP';

[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);

% 用mod函数进行求余处理

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));

% 用bitset函数将原图的最低有效位值换为水印的值

end

end

% 将嵌入水印图像写入lsb_watermarked.bmp

imwrite(watermarked_image,'lsb_watermarked.bmp','bmp');

% 显示运行时间

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);

%用mod函数对水印进行扩展

end

end

%显示结果

figure(2);subplot(1,2,1);

imshow(watermark1,[]);

title('扩展后的水印');

figure(2);subplot(1,2,2);

imshow(message1,[]);

title('原水印');

(2) 水印的提取过程

clear all;

% 保存开始时间

start_time=cputime;

% 读入嵌入水印图像

file_name='lsb_watermarked.bmp';

watermarked_image=imread(file_name);

% 嵌入水印图像的行数与列数

Mw=size(watermarked_image,1);%嵌入水印图像行数

Nw=size(watermarked_image,2);%嵌入水印图像列数

%读入原始水印

file_name='E:\2.BMP';

orig_watermark=imread(file_name);

%%原始水印的行数与列数

Mm=size(orig_watermark,1); %水印的行数

Nm=size(orig_watermark,2); %水印的列数

% 用嵌入水印图像的最低有效位重建水印

for ii = 1:Mw

for jj = 1:Nw

watermark(ii,jj)=bitget(watermarked_image(ii,jj),1);

% 用bitget函数重建水印

end

end

% 将提取水印变为原始水印大小

watermark=2*double(watermark);

for ii = 1:Mm-1

for jj = 1:Nm-1

watermark1(ii+1,jj+1)=watermark(ii,jj);

end

end

watermark1(1,1)=watermark(Mm,Nm);

% 显示运行时间

elapsed_time=cputime-start_time,

% 显示嵌入水印图像,提取水印以及原始水印

figure(1);

subplot(1,2,1);

imshow(watermarked_image,[]);

title('嵌入水印图像');

figure(2);

subplot(1,2,1);

imshow(watermark1,[]);

title('提取水印');

figure(2);

subplot(1,2,2);

imshow(orig_watermark,[]);

title('原始水印');

6仿真结果与分析

6.1 嵌入水印后的运行结果

(1) 根据水印嵌入算法及显示函数,得出原图像和嵌入水印后的图像,如图6.1

图6.1 原图像和嵌入水印后的图像

(2) 将要嵌入到图像中的水印显示出来,如图6.2

图6.2 原水印的图像

6.2 提取水印后的运行结果

(1) 将水印通过嵌入算法嵌入到图像中,并将嵌入水印的图像写入到temp.jpg中,嵌入水印的图像如图6.3

图6.3 嵌入水印的图像

(2)通过提取水印的过程算法将水印从原图像中提取出来,如图6.4

图6.4 原水印与提取的水印图像

6.3 结果分析

(1)嵌入水印后的运行结果

结果图如上图6.1和图6.2,图6.1表示的是原图像和嵌入水印后的结果图像,图 6.2表示的是原水印和扩展后的水印的结果图像。通过图示显示,可知LSB算法的实现简单和保证水印的不可见性.

(2)提取水印后的运行结果

结果图如上图6.3和图6.4,图6.3表示的是嵌入水印的原图像,图6.4 表示的是原水印与提取的水印的图像。通过图示显示,正确的提取中水印,但是水印有一定的模糊性.

7结论语

通过本次的设计,理解到了水印的嵌入和提取的过程,了解到水印的用处和价值,在以后的实际生活中也可以采用LSB算法实现水印的嵌入.可以起到图像版权或者防止篡改的保护性.

本设计采用的是基于空域的水印实现,通过LSB算法实现起来比较简单,同时可以保证数字水印的不可见性.

但是在实践的课程中,发现如果嵌入的位数太多,则会被人眼察觉到。但是由于数字水印位于图像的不重要像素位上,因此很容易被图像过滤、量化和几何型变等操作破坏,以致无法恢复数字水印.所以通常可采用一些增强数字水印的隐蔽性的算法.如奇偶标识位隐藏算法、索引数据链隐藏算法等,从而使水印的隐蔽性更高.

8参考文献

[1] 林福宗.多媒体技术基础(第2版)课程设计与学习指导[M]. 北京:清华大学出版社, 2006

[2] 姚敏.数字图像处理[M]. 北京:机械工业出版社,2006

[3] 容观澳.计算机图像处理. 北京:清华大学出版社,2000

[4] 周新伦.数字图像处理. 北京:国防工业出版社,2006

[5] 吴健康.数字图像处理. 北京:邮电大学出版社,1989

[6] 王积分.计算机图像识别. 北京:中国铁道出版社,1988

[7] 贾永红.计算机图像处理与分析. 武汉:武汉大学出版社,2001

[8] 陈桂明.应用MATLAB语言处理数信号与图像处理.北京:科学出版社,2000

[9] 徐建华.图像处理与分析. 上海:上海交通大学出版社,1990

[10] 王润生.图像理解. 北京:国防科技大学出版社,1995

[11] 姚敏.数字图像处理. 北京:机械工业出版社,2006

MATLAB数字水印技术实现相关推荐

  1. 基于matlab的数字水印技术研究,MATLAB在数字水印技术研究中的应用

    MATLAB在数字水印技术研究中的应用 随着网络技术和数字技术的发展,数字水印技术在版权保护.数据鉴别.数字产品认证等领域有着广泛的应用前景.因而数字水印日益成为一个非常活跃 (本文共4页) 阅读全文 ...

  2. 基于Matlab的数字水印技术研究

    摘要: ----- 数字水印技术作为数字媒体版权保护的有效办法,近年来在国内外引起了人们极大的兴趣.但是由于数字水印技术涉及到的知识面比较广,即使是专业人员有时也感到力不从心,那么如何选择一种有效的编 ...

  3. MATLAB数字水印实现

    目 录 摘 要 2 ABSTRACT 3 1.数字水印技术概述 4 1.1 数字水印技术提出的背景 4 1.2 数字水印的基本特点 4 1.3 数字水印的应用 5 1.MATLAB软件的介绍 7 2. ...

  4. 基于小波变换的数字水印技术研究

    摘要:算法基于Haar小波变换,把小波系数分块,并计算每个块的平均值.在一系列信号处理之后,这些块(尤其是大的块)的平均值不会有很大改变,否则,重构的图像就与原始图像有很大差别.通过对这些块的平均值进 ...

  5. MATLAB数字水印算法设计

    MATLAB数字水印算法设计 一.课题背景 数字水印技术是目前信息安全技术领域的一个新方向,是一种可以在开放的网络环境下保护版权和认证来源及完整性的新型技术.它是信息隐藏学的一个重要分支,它用信号处理 ...

  6. “程序设计与算法训练”课程设计“二值图像数字水印技术的实践”

    数据结果课程设计(题目抄袭自某牛逼985高校). github项目地址(含报告等) 课程编号:0521733B                                              ...

  7. matlab数据接口技术,matlab接口技术与应用

    matlab接口技术与应用 来源:mamingkeda 作者:华仔 浏览:1070 时间:2016-08-10 14:18 标签: 摘要: matlab接口技术与应用应用程序接口的使用方法.全书分为1 ...

  8. matlab与专业应用,MATLAB应用技术--在电气工程与自动化专业中的应用

    第1章 MATLAB基本知识. 1.1 MATLAB简介 1.1.1 概述 1.1.2 MATLAB安装与运行 1.2 MATLAB的基本操作 1.2.1 MATLAB语言结构 1.2.2 MATLA ...

  9. matlab针对电阻和电源电动势为r1,第三章 电力电子与MATLAB应用技术

    <第三章 电力电子与MATLAB应用技术>由会员分享,可在线阅读,更多相关<第三章 电力电子与MATLAB应用技术(49页珍藏版)>请在人人文库网上搜索. 1.电力电子与MAT ...

  10. 数字水印技术研究综述

    数字水印技术研究综述 引言 信息媒体的数字化为信息的存取提供了极大的便利性,同时也显著提高了信息表达的效率和准确性.特别是随着计算机网络通讯技术的发展,数据的交换和传输变成了一个相对简单的过程,人们借 ...

最新文章

  1. OpenCV中resize函数五种插值算法的实现过程
  2. 【每日一算法】整数反转
  3. 在ActivMQ中添加jmx监控
  4. iOS中正则表达式的使用
  5. 强化学习(五)---基于模型的强化学习实战
  6. C++morse code 摩尔斯电码算法(附完整源码)
  7. python类的继承与多态_python类的继承和多态
  8. matplotlib(四)核心模式以及注意事项
  9. 每日一题(50)—— 各类型与零值的比较
  10. dorado 刷新_dorado7常用内容
  11. shell for循环两个变量并列_从Go汇编角度解释for循环的两个疑点
  12. JAVA基础--toString, equals方法
  13. sessionStorage第一次进入页面显示弹窗
  14. 网站的工作原理:网络开发新手(或任何人)入门
  15. 钢琴 |《小汤普森简易钢琴教程》第一册
  16. Python编码、解码的理解(GBK,UTF-8,Unicode)
  17. 无MAC法安装genymotion的解决办法_Invalid reply from server..
  18. linux如何查看无线密码是多少个,在 Linux 中查看连接过的 WiFi 密码
  19. Delphi中文帮助[1]Delphi7的新特性
  20. 【Educational CF Round 86 (Rated for Div. 2) / 1342 A + B】- A. Road To Zero + B. Binary Perio - 水题

热门文章

  1. 21世纪需要的七种人才—李开复
  2. 网站地图在线生成html,sitemap_网站地图_站点地图_在线生成_专注在线服务工具开发与同步部署 - sitemap 生成器...
  3. redis实现周边景点由近到远排序
  4. 简单控制台项目:电影购票系统
  5. 再生核希尔伯特空间:Hilbert Space与RKHS基础
  6. 新浪微博从 Kafka 到 Pulsar 的演变
  7. 思维的基本过程与解决问题
  8. 计算机自带的命令提示符,Windows 10上有十种打开命令提示符的方法,你知道多少...
  9. win10前置耳机插孔没声音_win10头戴式耳机麦克风没声音怎么办
  10. 思科ASDM导入与实战配置经验总结-操作系统版本V842