精华内容
下载资源
问答
  • 提出了一种应用于医学图像认证的基于Weber准则的脆弱盲水印技术,基于Weber准则选择图像中的像素并插入脆弱水印。由于这种水印技术只选择和改变图像中的暗像素,因此不会造成图像的明显改变。这种水印技术能够鉴定...
  • 目录1设计目的 12设计要求 23相关知识 33.1 数字水印的相关知识数字水印的相关知识 33.2 数字水印技术的基本原理 43.3数字水印的分类 54设计内容 64.1 LSB算法介绍 64.1.1 LSB算法的基本原理 64.1.2 LSB算法基本步骤...

    目录

    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



    v2-4cbacf2b34a3ba592e9c03a3b32d723c_b.jpg

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











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



    v2-7fbfbff15e8364caea2dee76d6639285_b.jpg

    图6.2 原水印的图像

    6.2 提取水印后的运行结果

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



    v2-a426b4e172054f238e0a8fd7b7dd96e2_b.jpg

    图6.3 嵌入水印的图像


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


    v2-ad63f7f9efadee8ef0b6bc1bb12443ee_b.jpg

    图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

    展开全文
  • 数字水印技术概述 41.1 数字水印技术提出的背景 41.2 数字水印的基本特点 41.3 数字水印的应用 51.MATLAB软件的介绍 72.1 MATLAB研究数字水印的优点 72.2 MATLAB函数介绍 83.傅立叶域水印理论基础 103.1 傅立叶变换...

    目 录

    摘 要 2

    ABSTRACT 3

    1.数字水印技术概述 4

    1.1 数字水印技术提出的背景 4

    1.2 数字水印的基本特点 4

    1.3 数字水印的应用 5

    1.MATLAB软件的介绍 7

    2.1 MATLAB研究数字水印的优点 7

    2.2 MATLAB函数介绍 8

    3.傅立叶域水印理论基础 10

    3.1 傅立叶变换简述 10

    3.1.1 一维离散傅立叶变换DFT 10

    3.1.2 快速傅立叶变换 FFT 11

    3.1.3 二维离散傅立叶变换 12

    3.2 傅立叶变换性质 13

    3.2.1 空间域平移性 13

    3.2.2 旋转不变性 14

    3.2.3 比例缩放性 14

    4.基于傅立叶域相关性检测的半盲水印 15

    4.1 引言 15

    4.2 基于Arnold 变换的图像置乱算法 15

    4.3 水印算法 17

    4.3.1 算法原理 17

    4.3.2 算法的matlab 实现步骤 20

    4.4 算法的matlab 实现及结果分析 21

    5.总结与心得体会 26

    6.参考文献 27

    附录 28

    摘 要

    随着计算机及网络技术的飞速发展,数字作品传播和拷贝变得越来越方便,同时使得数字作品的信息安全保护和版权保护也成为迫切需要解决的实际问题。数字水印是近年来在信息安全领域兴起的保护知识产权的新方法。它通过在原始数据中嵌入一些重要信息为受到版权保护的媒体数据的完整性和所有权归属提供完全和可靠的证据,以此达到防止数字产品的盗版和篡改目的。本文提出了一种基于傅立叶域的有意义水印算法,主要做了如下工作:

    (1)为了提高水印的安全性,在嵌入水印之前首先对水印信息利用Arnold变换进行置乱。

    (2)为了提高传统相关性检测方法的准确率,嵌入水印时采用嵌入两个不相关伪随机序列的方法,大大提高了检测的准确率。

    (3)低频部分集中图像的大部分能量,修改这里容易引起失真,所以本文采用修改中高频部分的方法进行嵌入。

    (4)本文水印的检测方法为半盲检测,只需要原始水印的部分信息的参与,所以具有重要的现实意义。

    关键字:数字水印;傅立叶变换;图像处理;信息安全


    ABSTRACT

    Along with the computer and network technology rapid development, and dissemination of digital works have become increasingly easy to copy, simultaneously allow digital works to protect the security of information and copyright protection has become an urgent need to address the real issues. In recent years, digital watermarking is in the field of information security emerging intellectual property protection method. It passed in the original data embedded in some important information protected by copyright for the data integrity of media ownership and attribution mention for complete and reliable evidence, thereby to prevent the piracy of digital products and tampering with purpose.This paper presents a Fourier-domain based on the meaningful watermarking algorithm, mainly in the following:

    (1) To enhance the security watermark, before the watermark embedded watermark on the first use of Arnold transform scrambling.

    (2) To improve the traditional detection methods related to the accuracy, used embedded watermark embedding two are not related to the pseudo-random sequence, greatly improve the detection accuracy.

    (3) low-frequency part of the image most concentrated energy; changes here easily lead to distortion, therefore this paper, revising part of the high-frequency method for embedding.

    (4) This watermark detection method for the semi-blind testing, only part of the original image information in, therefore have important practical significance.

    Key Words:Digital watermarking;Fourier transform;Image processing;

    Information security


    1.数字水印技术概述

    1.1 数字水印技术提出的背景

    二十一世纪是数字时代,通信技术的迅速发展和计算机网络的普遍运用,使人们可以通过互联网收发信息,可以随时上传自己创作的数字图象、音乐、视频等作品,可以进行学术交流。

    然而,也正是由于网络的这种便捷性、传播迅速的优点使其很容易被非法拷贝,导致数字产品的版权、完整性、有效性得不到保证,严重损害了创作者的利益。而一些具有特殊意义的数字信息,如涉及司法诉讼、政府机要等信息,更是遭到了不法分子地恶意攻击和随意篡改等,这一系列问题给当今科学家带来了巨大挑战。

    基于以上类似问题,数字水印技术可以说是信息时代的特有产物,是一种可以在开放网络环境下保护版权和认证来源及保障信息完整性的新型技术,在音频、图像、视频制品中迅速得到广泛的研究和发展。

    1.2 数字水印的基本特点

    数字水印是加在数字图象、音频或视频中的微弱信号,这个信号是人们能够建立产品所有权、辨认购买者或提供数字产品的一些额外信息。具体说来,它们都具有以下共同的特征:

    1. 不可感知性

    对于数字水印的嵌入,应该对观察者没有视觉障碍,理想情况应该是水印图像与原始图像没有丝毫差别。

    2. 鲁棒性

    鲁棒性是指一个数字水印能够承受攻击的能力,一般来说数字水印方法是针对特定的攻击进行设计。

    3. 安全性

    水印技术的安全性是其最重要的特性,由于它的商业性,其算法必须公开,算法的安全性完全取决于密钥,而不对算法进行保密。

    4. 计算复杂度

    不同应用中,对于水印的嵌入算法和提取算法的计算复杂度要求是不同的,复杂度直接与水印系统的实时性相关。

    5. 水印容量

    水印容量是指载体数据字中可嵌入水印信息位的多少,可以从几兆到几个比特不等。

    1.3 数字水印的应用

    数字水印是以不可感知的方式嵌入到数字信息中的,总体来说它有以下应用:

    数字产品产权保护

    这是数字水印最广泛的应用,将秘密的数字信号嵌入到有价值的数字文件中,这些数字信号是产权的标识,在不破坏数字文件的情况下不能被盗版者出去,起到了保护产权的作用。

    1. 数据库标识

    有时一些文件中提示数据的标识信息往往比文件本身更重要或者一些音像文件需要将说明注释(如字幕等)与音像本身结合起来,这就可以通过数字水印技术加以解决。

    2. 文件内容鉴定

    水印技术在鉴定数据建立者和鉴别数据内容有着特殊的运用,目的是检测数据是否被修改过或是否经过特殊的处理。

    3. 系统升级

    日常生活中常常涉及到旧装系统升级情况,这可以通过将“增强层”嵌入到所发送的数据中来给传统的信号发射系统升级。

    4. 商务交易中的票据防伪

    随着高质量图像输入输出设备的发展,使得货币、支票以及其他票据的伪造变得更加容易。目前,美国、日本以及荷兰都已开始研究用于票据防伪的数字水印技术。

    5. 媒体侦破

    这一运用的目的是提取对原始信号进行处理过的信息。例如,鉴定方法可以发现一幅图像被篡改过,但无法发现是怎样篡改的。媒体侦破技术就可以指出图像的哪部分被篡改了,指出被插入到原图像中的新对象等等。


    2.MATLAB软件的介绍

    MATLAB语言是一种非常强大的工程语言,被广泛应用于包括信号与图象处理、控制系统设计、通信、系统仿真等诸多领域。

    2.1 MATLAB研究数字水印的优点

    MATLAB语言有不同于其他高级语言特点,它在研究数字水印有如下特点:

    1. 编程效率高

    MATLAB语言是用数学形式的语言编写程序,用MATLAB编写程序犹如在演算纸上排列公式与求解问题。由于它编写简单,所以编程效率高,易学易懂。

    2.用户使用方便

    与其他语言相比,MATLAB能在同一画面上进行灵活操作,快速排除输入程序中的书写错误、语法错误甚至语意错误,从而加快了用户编写、修改和调试程序的速度,便于操作。

    3. 扩充能力强,交互性好

    MATLAB语言库函数丰富,用户还可以根据自己的需要方便地建立和扩充新的库函数,提高MATLAB使用效率和扩充功能。良好的交互性使程序员可以使用以前编写过的程序,减少重复性工作。

    4. 移植性好,开放性好

    MATLAB是用C语言编写的,而C语言的可移植性很好。于是MATLAB可以很方便地移植到能运行C语言的操作平台上。

    5. 语言简单,内涵丰富

    MATLAB语言中最基本最重要的成分是函数,同一函数名,不同数目的输入变量及不同数目的输出变量,代表着不同的含义。这不仅使MATLAB的库函数功能更丰富,而且大大减少了需要的磁盘空间,使得MATLAB编写的M文件简单、短小而高效。

    6. 方便的绘图功能

    MATLAB软件中有一系列绘图函数,在运用MATLAB软件时只需要调用不同的绘图函数,即可在图上标出图题、XY轴标注。

    7. 功能强大的工具箱是MATLAB的另一特色。

    MATLAB工具箱中的信号处理、控制系统、神经网络、图象处理、鲁棒控制、非线性系统控制设计、系统辨识、最优化、模糊逻辑、小波、通信、统计(statistics等工具箱),这些工具箱给各个领域的研究和工程应用提供了有力的工具。

    8. MATLAB的缺点

    它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。

    2.2 MATLAB函数介绍

    在研究水印技术时,我们处理的图像数据是二维信号,而声音是一维信号,所以在这里,我门只简单介绍与水印有关的函数。

    1. 数据输入输出函数

    imread()和imwrite():可以读写bmp, jpg/jpeg, tif/tiff, png, hdf, pcx, wxd格式文件。读索引文件时,还可以得到相应的调色板数据。

    2. 图象显示

    imshow():显示一幅图像;imfinfo():可以得到读入图像的信息。如文件的大小、格式、格式版本号、图像的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等。

    3. 变换域函数

    对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB中的一维信号和二维信号分别提供了各种变换和逆变换函数。

    1) 离散余弦变换(DCT)

    (1) dct(),dct2():分别实现一维信号和二维信号的DCT(离散余弦变换);

    (2) idct(),idct2():分别实现一维信号和二维信号的IDCT(逆离散余弦变换);

    2) 离散傅立叶变换(DFT)

    (1) fft(),fft2():分别实现一维信号和二维信号的DFT(离散傅立叶变换);

    (2) ifft(),ifft2():分别实现一维信号和二维信号的IDFT(逆离散傅立叶变换);

    4. 攻击函数

    对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算法必须经过各种攻击测试才能对之做出客观的评价。

    MATLAB中的许多函数可以直接用来做攻击测试:

    1)剪裁:imcrop()可以按精确定位的各点坐标进行剪裁;

    2)加各种噪声:imnoise()可以对图像加入各种噪声,如白噪声、椒盐噪声等。


    3.傅立叶域水印理论基础

    3.1 傅立叶变换简述


    v2-dadb85fcee5b46a034c8db9d9946dc1f_b.jpg

    傅立叶变换(Fourier Transform)是研究信号的频谱方法,它架起了时域和频域之间的桥梁。打个比方来说,傅立叶变换就好比描述函数的第二种语言,能讲两种语言的人常常会发现,在表达某些观点时,一种语言会比另一种语言优越。类似地,图像处理者在解决某一问题时会在空域和频域之间来回切换。傅立叶变换把一个时域信号函数分解为众多的频率成分,这些频率成分又以准确地重构成原来的时域信号,这种变换是可逆的且保持能量不变。下面两个公式(3.1)、(3.2)给出了傅立叶变换及其逆变换:

    从时域到频域称为Fourier 变换,从频域到时域称为逆Fourier 变换,信号函数f (t)和它的

    Fourier变换F(ϖ )是同一能量信号的两种不同表现形式。

    Fourier 分析理论十分完善,既可以处理连续的信号也可以处理离散的信号。计算机只能处

    理离散的信号,于是离散Fourier 变换(DFT)成为计算机实现Fourier 变换的第一种形式。下面我

    们仅讨论一维离散傅立叶变换和二维离散傅立叶变换。


    3.1.1 一维离散傅立叶变换DFT

    对一个连续函数f (t)等间隔采样得到一个离散序列。设共采样N 个数据。则这个离散序列

    可表示为{f (0), f (1),L, f (N −1)},并令n为离散时域变量,k为离散频域变量,则可将傅立叶变


    v2-a15f730fb3e83d6f8564f5fd6f7c4f64_b.jpg

    换对定义如下:

    一般地, f (n)是实函数,F(k)是复函数,可以写成:


    v2-d799725d24bcfd830b03c56ae809d777_b.jpg

    v2-f6692c19e79b0a34968a00f78cd70e14_b.jpg

    其中,R(k)、I (k)分别为复数的实部和虚部。下式为幅度函数,称为f (n)的傅立叶谱:


    ϕ(k)称为相位函数:


    v2-3a07f2e79ee8500063de733e3575ac02_b.jpg



    既可以在幅度函数F(k) 上嵌入水印,也可以在相位函数ϕ (k)上嵌入水印。DFT中,如果f (n)为实函数,则一共需要N × N 次实数与复数的乘法,N × (N −1)次复数加法,一次实数与复数乘法需要两次实数乘法,一次复数加法需要两次实数加法,所以总共需要2N^2 次实数乘法,2N × (N −1)次实数加法,因此时间复杂度为O(N^2 ),当n很大时,计算机是无法接受的。因此人们想出了快速傅立叶变换。


    3.1.2 快速傅立叶变换 FFT

    1965 年,美国的两位工程师Cooley 和Tukey 提出了快速傅立叶变换(FFT)。FFT 的基本思想是:

    令序列f (n)的长度N N = 2^M ,如果不满足,在尾部补零,没有任何影响。按n 的奇偶把f (n)分解为两个N / 2点的子序列:




    v2-ecbf44bbf79c9262d82b5b89bb20ffb0_b.jpg

    v2-9746acdd5d1cdeded35b0dff76a0ad9e_b.jpg

    那么,


    v2-2d4cdfa77da67ea66b67fe39b71d921b_b.jpg

    将(3.7)和(3.8)代入上式整理得:


    v2-b6481d343f81eb3c6b1a1097f2905f04_b.jpg

    上式右边的两部分恰好是长度(周期)为N / 2的g1(m),h1(m)的傅立叶变换G1(k),H1(k)所以:

    (3.12)和(3.13)可简记为图3.1 的蝶式运算:


    v2-2f3a85bd86e169172bc0792ee8419292_b.jpg





    图 3.1 蝶式算法

    这样一个长度为N 的DFT 就分解为两个长度为N / 2的DFT,然后进行N / 2次复数的蝶式运算,再运用分解-递归的思想,分解M = log N次,每一次均有N / 2个蝶形运算,一个蝶形运算包含一次复数乘法和两次复数加法,所以FFT的时间复杂度为O(N log N)。



    3.1.3 二维离散傅立叶变换

    在数字图像处理中,图像信号是二维的,所以下面我们讨论二维离散傅立叶变换。只要考虑两个变量,就很容易将一维离散傅立叶变换推广到二维。二维离散傅立叶变换对如下:

    二维离散傅立叶变换的傅立叶谱、相位、功率谱与一维的类似,分别如下:


    v2-bfff21e39ba1f49489c91dcaafe0ad47_b.jpg


    v2-be5b208d9323e6e79019cb49d0403e87_b.jpg

    傅立叶谱:


    v2-83493509e4f98ccc86dc1db30a62f12d_b.jpg

    相位:


    v2-8d1a6dd41d3389560a806bd08ec635ac_b.jpg

    功率谱:


    式(3.14)可分离为:


    v2-b0953d1280f25052a39f7dcf61f65183_b.jpg

    v2-8c648a6a23c364c50b4a3cf33a0c388f_b.jpg

    式(3.15)可分离为:

    可见,一个二维傅立叶变换或反变换都可分解为二步进行,其中每一步都是一个一维傅立叶变换或反变换,也即先对图像进行一维行傅立叶变换(或列傅立叶变换),然后再进行一维列傅立叶变换(行傅立叶变换)。

    3.2 傅立叶变换性质

    傅立叶变换的典型性质有下列三种:

    3.2.1 空间域平移性


    v2-9dbba7b4826ed2403a9e39bf19807206_b.jpg

    空间域内的图像f (x, y)的原点平移到点(a,b)时,其对应的频谱变换关系为:


    v2-73af3412744b4a2a632d4a9e84501f8b_b.jpg

    即频谱乘上一个负的指数项,造成相位平移,而幅度不改变。因为

    这表明图像在空间域的平移不改变傅立叶域的幅度谱,仅对相位角有影响。

    3.2.2 旋转不变性


    v2-1d85d283f6b0ae467bb86c407e014fe1_b.jpg

    在空间域中以极坐标r,θ 取代x,y;在变换域以w ,Φ代替u,v,使得:


    v2-5f60397b229374cd077fbf3d7d2e8477_b.jpg

    显然,在DFT 变换前图像为f (r,θ ),DFT变换后为F(ϖ ,Φ) .可以证明存在以下变换对:

    这表明,图像阵列f (r,θ )在空间域中旋转了0 θ 角度后,变换系数矩阵在频率域中也旋转同样的角度。同样的,如果变换域系数阵列在频率域中旋转0 θ 角度后,则反变换后获得的空间域图像f (r,θ )必然旋转0 θ 角度。

    3.2.3 比例缩放性


    v2-ef5d12375e8424eb7e86f93bf5d8a0e6_b.jpg

    函数 f (x, y)的尺寸缩放到f (ax,by)时,其对应的频谱关系为:

    这表明图像在空域按比例缩放,其傅立叶频域反方向缩放相同比例。

    傅立叶变换的这三种典型性质在构造抵抗几何攻击的水印算法时十分有利。


    4.基于傅立叶域相关性检测的半盲水印

    4.1 引言

    目前,图像水印技术的研究对于水印鲁棒性的要求比较高,有相当一部分算法采用伪随机噪声来构造水印,与之相应,采用相关性检验来检测被检测图像中是否含有水印。当被检测图像中所提取的待测序列与原始水印具有较强的相关性时,表示该被检测图像中含有水印,否则,不含有水印。然而在另外一些情况下,对嵌入图像中的水印信息要求比较高。比如要求所嵌入的信息是可读的或可视的,如有意义的信息(文字,图像等)。这种有意义的水印具有无意义水印无可比拟的优点。因此,本章结合伪随机序列与有意义水印,提出了基于傅立叶域相关性检测的水印算法。为了提高水印的安全性,在嵌入水印前用Aronld 变换对水印图像进行了置乱,下面先介绍Aronld 变换。


    4.2 基于Arnold 变换的图像置乱算法


    v2-e49efa700874f3e846e291f7bc636444_b.jpg

    Arnold 变换,又称“猫脸”变换,是Arnold 在研究遍历理论过程中提出的一种变换。假设图像为S = [0,1]×[0,1],(x, y) ⊂ S。令

    这就是单位正方形上的Arnold 变换。实际上,可以令离散图像的像素坐标扩展到一幅图像上,对于一幅大小为N×N 的图像,有下述的Arnold 变换


    v2-d86f3bb3f46835786800e143020b3299_b.jpg

    v2-9e3c37cb2b7ab5972731c560b345501d_b.jpg

    由此做迭代变换,记


    v2-16e2ccdbdeb31eb241249e178093405e_b.jpg

    考虑其反馈,有

    通过离散点的置换,同时把图像信息移植过来,当遍历了原图象的所有点之后,便产生了一副新的图像。

    对于数字图像而言,我们所说的位置移动其实是对应点的灰度值或RGB 颜色值的移动 ,即原来点(x, y)处象素对应的灰度值或RGB值移动至变换后的点 (x′, y′)处。如果我们对一个数字图像迭代地使用离散化的Arnold 变换,即将左端输出作为下一次Arnold 变换的输入,可以重复这个过程一直下去。当迭代到某一步时,如果出现的图像符合我们对图像的“杂乱无章”标准的要求,这即是一幅基于Arnold 变换的置乱图像。

    注意到(4.2)式定义的Arnold 变换实际上是一种点的位置移动,且这种变换是一一对应的。此外,这种变换可以迭代地做下去。类似的变换还有面包师变换。需要注意的是,Arnold 变换具有周期性,即当迭代到某一步时,将重新得到原始图像。Dyson 和Falk 分析了离散Arnold 变换的周期性,给出了对于任意N>2,Arnold变换的周期T N^ 2 / 2。


    v2-1846d1d4e8252b9fcdd8b2ece1c68907_b.jpg

    本算法采用的水印图像尺寸为40× 40 ,变换周期为30。即迭代的进行30 次Arnold 置乱后,水印图像将恢复原来面目。下表为不同阶数N 下,二维数字图像的Arnold 变换周期。

    表 4.1 Arnold 变换周期









    4.3 水印算法

    4.3.1 算法原理

    v2-56f9bc661446e7c6fe4baa39def1a0b3_b.jpg

    4.3.1.1 嵌入算法原理

    图 4.1 水印嵌入流程图


    图4.1 是嵌入算法流程图。为了提高传统相关性检测方法的准确率,本算法采取嵌入两个不相关伪随机序列的方法,有效的提高了提取的准确率。首先将原始图像划分子块,对每一图像块进行DFT变换,将二值水印图像用Arnold变换置乱。产生两个伪随机序列。置乱水印矩阵值为0时用一个伪随机序列与原始图像的幅度谱进行乘性叠加,矩阵值为1时,用另一个伪随机序列与原始图像幅度谱进行乘性叠加。

    1.子块划分


    v2-9054e6781274cf30f1da3ec74cf63ccf_b.jpg

    将原始图像分成8×8的图像子块



    2.对每一图像块进行DFT变换

    然后做FFT平移,对于二维矩阵将一、三象限与二、四象限互换,使得直流分量位于中间。

    v2-7f06d7abff075e8e5b1c0295c55a2aca_b.jpg


    3.将二值水印用Arnold变换置乱

    4.产生两个不相关的伪随机序列

    5.修改相应幅度谱值


    v2-fd89c47148bb97fac9aea38ce3f782be_b.jpg

    由于DFT域的幅度谱具有对称性,为了水印嵌入后保持这种对称性不变,也为了确保恢复图像像素值为实数,嵌入水印时采用对称嵌入,即:

    式中Amplotude()为取复数的幅度,δ 为嵌入信息。嵌入规则为当水印矩阵元素为‘0’时,将一个伪随机序列与幅度谱对应元素进行乘性叠加。当水印元素为‘1’时,用另一个伪随机序列与幅度谱对应元素进行乘性叠加。嵌入时以滤波矩阵选择嵌入块中的位置。

    6.对每一图像块进行DFT 逆变换,得到含水印图像


    v2-b2dd5f67f879fdedb09c6b43bfeb0b41_b.jpg










    v2-22123324e99b719a64f4d324bbbf695b_b.jpg

    4.3.1.2 提取算法原理


    图 4.2 水印提取流程图

    水印提取算法是嵌入算法的逆过程

    1.子块划分


    v2-471884b79f171da2fc2bf6ef2936dc6a_b.jpg

    将嵌入水印图像分成8×8的图像子块:


    v2-c83f6606c0b505b6d630b6c4d5676a00_b.jpg

    2.对每一图像块进行DFT变换

    3.产生两个不相关的伪随机序列。

    4.计算嵌入水印幅度谱与伪随机序列的相关性,并按照嵌入时的规则产生水印矩阵。

    5.将水印矩阵用Arnold 变换进行置乱得到提取水印。





    4.3.2 算法的matlab 实现步骤

    4.3.2.1 嵌入算法步骤

    Step0.设置嵌入强度系数,滤波矩阵,分块大小并保存开始时间。

    Step1.读入原始图像cover_object,并读出其尺寸为Mc × Nc

    Step2.读入水印图像message,并读出其尺寸为Mm× Nm

    Step3.对message进行Arnold置乱,并将置乱后水印图像重新排列为向量message_vector。

    Step4.检查水印信息是否过大,如果水印信息过大返回错误信息,“水印信息过大”。

    Step5.设置伪随机密钥key,并按照滤波矩阵的1 的个数,生成两个不相关的伪随机序列pn_sequence_one,pn_sequence_zero。

    Steo6.对原始图像进行8×8 分块,并对每一分块进行二维傅立叶变换。将低频部分移至中间,计算幅值与相位。如果水印向量元素为零,则pn_sequence_zero 嵌入滤波矩阵为1 处所对应的幅值。如果水印向量元素为零,则pn_sequence_one 嵌入滤波矩阵为1 处所对应的幅值。

    Step7.对每一分块进行二维傅立叶逆变换,将图像变换回空域。

    Step8.将嵌入水印图像保存,计算运行时间,计算psnr 值,显示水印、嵌入水印图像与原始图像。

    4.3.2.2 提取算法步骤

    水印提取算法不需要原始图像,但需要原始水印的部分信息(原始水印的尺寸)

    Step0.设置滤波矩阵,分块大小并保存开始时间。

    Step1.读入嵌入水印图像watermarked_image,并读出其尺寸为Mw× Nw

    Step2.读入原始水印图像orig_watermark,并读出其尺寸为Mo × No

    Step3.设置与嵌入算法中相同的伪随机密钥key,并按照滤波矩阵的1 的个数,生成两个不相关的伪随机序列pn_sequence_one,pn_sequence_zero。

    Step4.对嵌入水印图像进行8×8 分块,并对每一块进行二维傅立叶变换.将低频部分移至中间,计算幅值。

    Step5.分别计算pn_sequence_one,pn_sequence_zero 与幅值的相关性,如果pn_sequence_zero 与幅值的相关性大于pn_sequece_one 与幅值的相关性,那么将提取水印向量message_vector 赋‘0’,反之赋‘1’。

    Step6.将提取水印向量进行Arnold 置乱,并按原始水印尺寸排列。

    Step7.计算运行时间,显示提取水印与原始水印。

    4.4 算法的matlab 实现及结果分析

    程序见附录

    原始宿主图像是384*384*8b 的lena 灰度测试图像,见图4.3


    v2-26446049de63673819a1d25ba677777e_b.jpg



    图 4.3 原始图像


    而水印图像是一幅40*40*1b 的二值图像,见图4.4,水印检测不需要原始图像.但需要原始水印图像的尺寸信息。


    v2-fd2ebbd672b56e4b48624caef2f7b784_b.jpg


    图 4.4 水印图像

    下图是用Matlab 软件进行试验的结果:

    图 4.5

    水印置乱

    v2-0e1fc79245c2f767302d1bfca9dfbdac_b.jpg

    图4.6 嵌入水印图像与原始图像

    图4.7 没有受到攻击的图像和直接提取的水印图像

    图4.8 剪切后的图像及提取的水印图像

    图4.9 加入白噪声后的图像、原始水印图像及提取的水印图像

    图4.10 缩放后的图像及提取的水印图像

    图4.11 压缩后的图像及提取的水印图像

    从以上结果可以看出,从没有遭受攻击的图像中提取出来的水印与原始水印的相关性最好,为0.99601,接近于1,满足设计要求。当对图像分别进行剪切攻击、噪声攻击、缩放攻击与压缩攻击后,提取出来的水印与原始水印的相关性依次降低,同时峰值信噪比也依次降低。特别是进行了压缩攻击后提取水印与原始水印相关性NC为0.83534,基本上分辨不出来了,峰值信噪比也大幅度降低。因此,可以看出,基于DFT域的数字水印算法抗剪切攻击能力比较强,其次为抗噪声攻击能力与抗缩放攻击能力,而抗压缩攻击能力较差。

    5.总结与心得体会

    随着信息技术的飞速发展,数字产品的大众化及网络的普及,数字化产品的产权保护成为急需解决的问题。在此背景下产生的数字水印技术作为一种新的有效产权保护手段,必将具有广阔的应用前景和使用价值。

    本课程设计首先针对数字水印技术的提出的背景与基本特点进行了讨论;然后引入傅立叶变换基本理论,作为实现数字水印算法的算法理论基础;接着提出了一种基于傅立叶域相关性检测的水印算法。本算法结合了Arnold 置乱方法、经典相关性检测方法和傅立叶域特性,并在嵌入时采用嵌入两个不相关伪随机序列的方法,有效的提高了水印的安全性和相关性检测的准确率,是对经典相关性检测方法的一种改进。

    结果表明,通过离散傅里叶变换可以实现数字水印的嵌入,提取与检测,同时通过不同的攻击方法对水印图像加以处理,测试了在保护信息产权的稳定性和可靠性。噪声攻击,剪切攻击,缩放攻击后还是能过提取出能过很好辨识的水印,但是压缩攻击后提取出来的水印图像无法识别,故其抗压缩攻击能力差。

    在此次的设计中,我查阅了大量的资料并进行收集,通过本次设计,我初步掌握了基于傅里叶变换的数字水印算法,为学习更加复杂的水印算法打下了基础,同时进一步熟练了MATLAB的操作。

    6.参考文献

    [1] 施建平,图像数字水印算法的研究,西北工业大学学报,2016,(1):27~28

    [2] 陈莉娜,数字水印算法研究,电子科技大学硕士学位论文,2015,3~5

    [3] Ingemar J. Cox,数字水印,电子工业出版社,2003,1

    [4] 曾满红,傅立叶明文水印及零水印算法的研究,燕山大学硕士学位论文,2015,16~17

    [5] Rafael C.Gonzalez,Richad E.Woods.数字图像处理(阮秋琦,阮宇智等译)[M]. -北京:电子工业出版社,2013

    [6]飞思科技产品研发中心.MATLAB 6.5辅助图象处理[M] .-北京:电子工业出版社,2013



    附录

    水印嵌入源码

    %基于傅立叶域的数字水印
    %注意:水印必须为40*40的二值图像 
    %因为40阶的二维arnold置乱周期为30,所以嵌入时置乱8次,提取时置乱22.可以根据自己的需要更改.
    %嵌入源码
    clc
    clear all;
    % 保存开始时间
    start_time=cputime;
    iTimes=8;      %置乱次数
    k=1.1;                           % 设置嵌入强度系数
    blocksize=8;                    % 块的大小
    filter_m=[  1,1,1,1,1,1,1,1;    % 滤波矩阵
                1,1,1,1,1,1,1,1;
                1,1,0,0,0,0,1,1;
                1,1,0,0,0,0,1,1;
                0,0,0,0,0,0,0,0;
                0,0,0,0,0,0,0,0;
                0,0,0,0,0,0,0,0;
                0,0,0,0,0,0,0,0;];
    % 读入原始图像
    file_name='lena.bmp';
    cover_object=double(imread(file_name))/255;
    % 原始图像矩阵的行数与列数
    Mc=size(cover_object,1);	        
    Nc=size(cover_object,2);	       
    % 最大嵌入信息量
    max_message=Mc*Nc/(blocksize^2);
    % 读入水印图像
    file_name='watermark.bmp';
    message=double(imread(file_name));
    %水印图像矩阵的行数与列数
    Mm=size(message,1);	                
        error('必须为40*40大小,或者修改置乱次数');
    end
    tempImg=message;
    for n=1:iTimes % 置乱次数
        for u=1:Mm
            for v=1:Nm
              temp=tempImg(u,v);
              ax=mod(u+v,Mm)+1;
              ay=mod(u+2*v,Nm)+1;
              outImg(ax,ay)=temp;
            end
        end
      tempImg=outImg;
    end
    message_vector=reshape(outImg,1,Mm*Nm)
    % 将cover_object(原图矩阵)写入watermarked_image
    watermarked_image=cover_object;
    %置随机数发生器的状态为1100
    key=1100;
    rand('state',key);
    % 产生伪随机序列
    pn_sequence_zero=round(2*(rand(1,sum(sum(filter_m)))-0.5));
    pn_sequence_one=round(2*(rand(1,sum(sum(filter_m)))-0.5));   
    % 将图像分块
    x=1;
    y=1;
    h=waitbar(0,'嵌入水印,请等待');
    for (kk = 1:length(message_vector))
        % 做傅立叶变换
        fft_block=fft2(cover_object(y:y+blocksize-1,x:x+blocksize-1));
        %计算幅值
        abs_block=fftshift(abs(fft_block));
        %计算相位
        angle_block=angle(fft_block);
        % 当message_vector=0且filter_m=1时用伪随机序列pn_sequence_zero叠加abs_block
        % 当message_vector=1且filter_m=1时用伪随机序列pn_sequence_one叠加abs_block
        ll=1;
        if (message_vector(kk)==0)
      abs_block(blocksize-ii+1,blocksize-jj+1)=abs_block(blocksize-ii+1,blocksize-jj+1)+…
    abs_block(ii,jj)-abs_block_o;
                        ll=ll+1;
                    end
                end
            end
        else                                     
            for ii=1:blocksize                    
                for jj=1:blocksize
                    if (filter_m(ii,jj)==1)
                        abs_block_o=abs_block(ii,jj);
                        abs_block(ii,jj)=abs_block(ii,jj)*(1+k*pn_sequence_one(ll));
      abs_block(blocksize-ii+1,blocksize-jj+1)=abs_block(blocksize-ii+1,blocksize-jj+1)+…
    abs_block(ii,jj)-abs_block_o;
                        ll=ll+1;
                    end
                end
            end
        end
     
        % 进行傅立叶逆变换
        abs_block=fftshift(abs_block);
        watermarked_image(y:y+blocksize-1,x:x+blocksize-1)=…
    abs(ifft2(abs_block.*exp(i*angle_block)));    
        % 移动到下一块
        if (x+blocksize) >= Nc
            x=1;
            y=y+blocksize;
        else
            x=x+blocksize;
        end
        waitbar(kk/length(message_vector),h);
    end
    close(h);
    % 转换为uint8,并写入
    watermarked_image_int=uint8(watermarked_image*255);
    imwrite(watermarked_image_int,'dft2_watermarked.bmp','bmp');
    % 计算运行时间
    elapsed_time=cputime-start_time,
    % 计算psnr
    psnr=psnr(cover_object,watermarked_image),
    % 显示水印,嵌入水印图像与原始图像
    figure(1)
    subplot(1,2,1)
    imshow(message,[]);
    title('原始水印');
    subplot(1,2,2);
    imshow(tempImg,[]);
    title('置乱水印');
    figure(2)
    subplot(1,2,1)
    imshow(watermarked_image,[]);
    name='嵌入水印图像';
    title(strcat(num2str(name),'   k=',num2str(k),'   psnr=',num2str(psnr)));
    subplot(1,2,2)
    imshow(cover_object,[])
    title('原始图像');
    %%%%%%%%%%%%%% 进行攻击测试 %%%%%%%%%%%
    disp(‘1-->加入白噪声’);
    disp(‘2-->剪切图像’);
    disp(‘3-->直接检测’)
    begin=input(‘请选择攻击(1-3):’)
    switch begin
    %%%%%%% 加入白噪声 %%%%%%%%
    case 1
    figure(3)
    Aimage1=wimage;
    Wnoise=0.01*randn(size(Aimage1));
    Aimage1=Aimage1+Wnoise;
    subplot(1,3,1),imshow(Aimage1,[]),title(‘加入白噪声后的图象’);
    att=Aimage1;
    imwrite(att,'chulihouimage.bmp');
    %%%%%%%% 剪切攻击 %%%%%%%%
    case 2
    figure(3)
    
    Aimage3=wimage;
    Aimage3(1:128,1:128)=256;
    subplot(1,3,1),imshow(Aimage3,[]),title(‘剪切后的图象’);
    att=Aimage3;
    imwrite(att,'chulihouimage.bmp');
    %%%%%%% 没有受到攻击 %%%%%%%
    case 3
    figure(3)
    subplot(1,3,1),imshow(wimage,[]),title(‘未遭到攻击的图像’);
    att=wimage;
    imwrite(att,'chulihouimage.bmp');
    end
    
    水印提取源码
    %提取源码
    clc
    clear all;
    % 保存开始时间
    start_time=cputime;
    iTimes=22;              %置乱次数
    blocksize=8;                    % 设置块的大小
    filter_m=[  1,1,1,1,1,1,1,1;    % 滤波矩阵
                1,1,1,1,1,1,1,1;
                1,1,0,0,0,0,1,1;
                1,1,0,0,0,0,1,1;
                0,0,0,0,0,0,0,0;
                0,0,0,0,0,0,0,0;
                0,0,0,0,0,0,0,0;
                0,0,0,0,0,0,0,0;];
    % 读入嵌入水印图像
    file_name='chulihouimage.bmp';
    watermarked_image=double(imread(file_name))/255;
    % 嵌入水印图像矩阵的行数与列数
    Mw=size(watermarked_image,1);	       
    Nw=size(watermarked_image,2);	        
    % 最大可嵌入信息量
    max_message=Mw*Nw/(blocksize^2);
    % 读入原始水印
    file_name='watermark.bmp';
    orig_watermark=double(imread(file_name));
    % 原始水印矩阵的行数与列数
    Mo=size(orig_watermark,1);	
    No=size(orig_watermark,2);	
    %置随机数发生器的状态为1100
    key=1100;
    rand('state',key);
    % 产生伪随机序列
    pn_sequence_zero=round(2*(rand(1,sum(sum(filter_m)))-0.5));
    pn_sequence_one=round(2*(rand(1,sum(sum(filter_m)))-0.5));              
    % 将图像分块
    x=1;
    y=1;
    h=waitbar(0,'提取水印,请等待');
    for (kk = 1:max_message)
        % 傅立叶变换
        fft_block_w=fft2(watermarked_image(y:y+blocksize-1,x:x+blocksize-1));
        abs_block_w=abs(fftshift(fft_block_w));
        ll=1;
        for ii=1:blocksize
            for jj=1:blocksize
                if (filter_m(ii,jj)==1)
                    sequence(ll)=abs_block_w(ii,jj); 
                    ll=ll+1;
                end
            end
        end
        % 计算sequence与pn_sequence_zero和pn_sequence_one的相关系数
       correlation_zero(kk)=corr2(pn_sequence_zero,sequence);
       correlation_one(kk)=corr2(pn_sequence_one,sequence);               
        % 移动到下一块
        if (x+blocksize) >= Nw
            x=1;
            y=y+blocksize;
        else
            x=x+blocksize;
        end
        waitbar(kk/max_message,h);
    end
    close(h);
    % 如果correlation_zero>correlation_one,那么message_vector=0,反之为1.
    for (kk=1:Mo*No)
        if correlation_zero(kk)>correlation_one(kk)
            message_vector(kk)=0;
        else
            message_vector(kk)=1;
        end
    end
    % Arnold置乱
    tempImg=reshape(message_vector(1:Mo*No),Mo,No);
    message_arnold=tempImg;
    for n=1:iTimes % 次数
        for u=1:Mo
            for v=1:No
              temp=tempImg(u,v);
              ax=mod(u+v,Mo)+1;
              ay=mod(u+2*v,No)+1;
              outImg(ax,ay)=temp;
            end
        end
      tempImg=outImg;
    end
    message=outImg;
    % 计算运行时间
    elapsed_time=cputime-start_time,
    %计算NC(归一化相关系数)
    NC=nc(message,orig_watermark)
    %计算 psnr
    psnr=psnr(message,orig_watermark);
    % 显示提取水印与原始水印
    figure(3)
    subplot(1,3,2);
    imshow(message,[]);
    name='提取水印';
    title(strcat(num2str(name),'   NC=',num2str(NC), '   psnr=',num2str(psnr)
    ));
    subplot(1,3,3)
    imshow(orig_watermark,[])
    title('原始水印');
    
    
    
    
    
    
    
    
    
    
    PSNR(峰值信噪比)函数 
    %计算 PSNR (峰值信噪比)
    function dPSNR = psnr(ImageA,ImageB)
    if size(ImageA) ~= size(ImageB)
        error('错误:两个输入图像大小不一致!');
        dPSNR = 0;
        return ;
    end
    ImageA=double(ImageA);
    ImageB=double(ImageB);
    M = size(ImageA,1);
    N = size(ImageA,2);
    d = 0 ;
    for i = 1:M
        for j = 1:N
            d = d + (ImageA(i,j) - ImageB(i,j)).^2 ;
        end
    end
    dPSNR = 10*log10((M*N*max(max(ImageA.^2)))/d) ;
    return
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    NC(归一化相关系数) 
    %计算nc(归一化相关系数)
    function dNC = nc(ImageA,ImageB)
    if size(ImageA)~=size(ImageB)
        error('错误:两个输入图像大小不一致!');
        dNC = 0;
        return ;
    end
    ImageA=double(ImageA);
    ImageB=double(ImageB);
    M = size(ImageA,1);
    N = size(ImageA,2);
    d1=0 ;
    d2=0;
    for i = 1:M
        for j = 1:N
            d1=d1+ImageA(i,j)*ImageB(i,j) ;
            d2=d2+ImageA(i,j)*ImageA(i,j) ;
        end
    end
    dNC=d1/d2;

    展开全文
  • 基于Matlab的数字水印技术研究

    千次阅读 2015-05-15 09:58:21
    ----- 数字水印技术作为数字媒体版权保护的有效办法,近年来在国内外引起了人们极大的兴趣。但是由于数字水印技术涉及到的知识面比较广,即使是专业人员有时也感到力不从心,那么如何选择一种有效的编程工具便成为一...
    摘要:
    
    ----- 数字水印技术作为数字媒体版权保护的有效办法,近年来在国内外引起了人们极大的兴趣。但是由于数字水印技术涉及到的知识面比较广,即使是专业人员有时也感到力不从心,那么如何选择一种有效的编程工具便成为一个亟待解决的问题。本文从数字水印技术本身的特点、一般模型和典型算法出发,简要地介绍了一种可以快速上手的高效的实用语言——Matlab。最后,作者给出一个用Matlab实现数字水印实例。
    关键词:数字水印  Matlab Visual C++6.0 DWT  DCT

    1 引言
    ---- 作为传统加密系统的有效补充办法,从1993年Caronni正式提出数字水印到现在短短几年里,无论是在国内还是在国外对数字水印的研究都引起了人们极大的关注。但数字水印技术的发展还很不成熟,应用也处于初级阶段。在我国,知识产权问题是一个敏感的话题,只有深入开展数字水印技术的研究,尽快制定我国的版权保护水印标准,才能使我们在未来可能的国际知识产权纠纷中取得主动权。那么掌握高效的工具,便成为一个必须解决的问题。本文就针对数字水印本身的特点,介绍了一种高效的实用工具——MATLAB。

    2 数字水印技术
    2.1 数字水印技术的复杂性
    数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉感知理论、扩频技术(Spread Spectrum)、信号处理(Signal Processing ) 技术、数字图像处理(Digital Image Processing)技术、多媒体(Multimedia)技术、模式识别(Pattern Reorganization)技术、算法设计(Algorithm Design)等理论,用到经典的DFT(Discrete Fourier Transform)、DCT(Discrete Cosine Transform)变换和近代最先进的数学工具----小波(Wavelet)。
    数字水印又是一个横跨计算机科学、生理学、密码学、数字、数字通信等多门学科,并与Internet的发展密切相关的交叉科学。数字水印的多学科性导致数字水印技术研究的难度和复杂性。所以,针对数字水印技术本身的跨学科特点,找出一种合适的编程工具,往往可以起到事半功倍的效果。下面我们从数字水印的一般模型出发,来逐步介绍MATLAB。
    2.2数字水印的一般模型
    数字水印的一般模型如图1所示:

    频域法加入数字水印的原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有DWT、DCT、DFT、WP和分形。然后,对加入了水印信息的信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息的信号。

    频域法检测水印的原理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算,得出水印信息。如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印的检测有两个结束点。
    2.3数字水印技术的常用算法
    数字水印算法一般可分为两种空域法和频域法,频域法有以下优点:1)嵌入的水印信号能量可以分布到空域的所有像素上,有利于保证水印的不可见性;2)视觉系统(HVS)的某些特性(如频率的掩蔽特性)可以更方便地结合到水印编码过程中;3)频域法可与国际数据压缩标准兼容,从而实现在压缩域(compressed domain)内的水印编码。所以我们也以频域法为主介绍MATLAB在数字水印技术中的使用。
     DCT法(Discreste Cosine Transformation)
    对原始信号做DCT的算法:Cox 和Piva 等人提出的DCT技术的经典之作。Cox利用随机数发生器产生标准正态序列作为水印信息对图像进行整体DCT变换后,选取除去DC系数之外部分较低频率系数叠加水印信息;Piva则修改整幅图像的中频部分。
    对原始信号分块后,再作DCT的算法:Hsu和Wu 把图像进行8*8分块,将一个二进制序列作为水印放入DCT的中频区;有些学者则计算整个图像的DCT,把一个实数序列嵌入DCT的中频系数上。选择中频区的好处是一方面尽量减少嵌入信息对图像主观视觉的影响;同时,尽量避免有损压缩对水印信息可能带来的损失。
    还有一种DCT方法就是把水印信息嵌入到高频系数上,但是采用这种方法,抗压缩性非常差。
     DFT法(Discrete Fourier Transformation)
    Swanson 等利用时域小波变换和频率掩蔽特性结合,实现多分辨率视频水印;Kundur和Hatzinakos 把水印植入灰度图像的小波变换域。
     其它变换域还有Fourier-mellin 域 、Fourier 变换域、分形 或WP(Wavelet Package)等。
    以上的变换域算法计算量都非常大,编程实现这些变换和逆变换也需要好好下一番功夫,由此造成研究人员把大量的时间和精力浪费在与水印算法研究无关的问题上。

    3 可实现数字水印技术的高效实用工具——Matlab 
    3.1Matlab简介
    Matlab是当前在国内外十分流行的工程设计和系统仿真软件包。它是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一人方便的、界面友好的用户环境。
    Matlab的推出得到了各个领域专家、学者的广泛关注,其强大的扩展功能为各个领域的应用提供了基础。由各个专家学者相继推出了MATLAB工具箱,其中的信号处理(signal processing)、控制系统(control system)、神经网络(neural network)、图像处理(image processing)、鲁棒控制(robust control)、非线性系统控制设计(nonlinear system control design)、系统辨识(system identification)、最优化(optimization)、模糊逻辑(fuzzy logic)、小波(wavelet)、通信(communication)、统计(statistics)等工具箱,这些工具箱给各个领域的研究和工程应用提供了有力的工具,借助于这些“巨人肩上的工具”,各个层次的研究人员可直观、方便地进行分析、计算及设计工作,从而大大地节省了时间。
    3.2用Matlab研究数字水印的优点
     集成了DCT、DWT等函数有丰富的小波函数和处理函数,这不仅方便了研究人员,而且使源程序简洁明了、易实现。
     强大的数学运算功能。能够方便、高效地实现音频、视频中的大量矩阵运算。
     提供了图像处理工具箱、小波分析工具箱、数字信号处理工具箱。用来编制跨数字图像处理技术、数字信号处理等多学科的数字水印技术是非常好的选择。
     MATLAB与目前最强大的编程工具——Visual C++具有良好的接口。
    3.3Matlab函数介绍(以MATLAB5.3为例)
    在介绍函数之前,我们必须明确一点:作水印程序时,处理的图像数据是二维信号,而声音信号是一维信号。这里,我们仅仅简单介绍与水印有关的函数,具体函数的用法请读者参考文献[2]。
     数据输入输出函数
    imread()和imwrite():可以读写bmp,jpg/jpeg, tif/tiff, png, hdf, pcx, wxd格式文件。读索引文件时,还可以得到相应的调色板数据。
    auread()、auwrite()、wavread()和wavwrite():可以方便地读写au和wav文件,并可控制其中的位及频率。
     图像显示与声音播放
    imshow():显示一幅图像;
    imfinfo():可以得到读入图像的信息。如文件的大小、格式、格式版本号、图像的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等
    wavplay():播放wav声音文件。当然,也可以把处理后的wav文件保存后再用其它工具播放。
    wavrecord():可以对处理后的wav文件进行录音。
     变换频函数
    对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB中对一维信号和二维信号分别提供了各种变换和逆变换函数。
     离散余弦变换(DCT)
    dct(),dct2():分别实现一维信号和二维信号的DCT(离散余弦变换);
    idct(),idct2():分别实现一维信号和二维信号的IDCT(逆向离散余弦变换);
     离散傅里叶变换(DFT)
    fft(),fft2():分别实现一维信号和二维信号的DFT(离散傅里叶变换);
    ifft(),ifft2():分别实现一维信号和二维信号的IDFT(逆向离散傅里叶变换);
     离散小波变换(DWT)
    dwt(),dwt2():分别实现一维信号和二维信号的DWT(离散小波变换);
    idwt(),idwt2():分别实现一维信号和二维信号的IDWT(离散小波变换);
    Wavedec2():多级二维小波分解函数;
    Waveinfo():提供小波包中所有的小波信息;
    另外,MATLAB中还有丰富的小波包处理函数,有兴趣的读者可参考文献[2]。
     攻击函数
    对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算法必须经过各种攻击测试才能对之做出客观的评价。MATLAB中的许多函数可以直接用来做的攻击测试。
    旋转:rotate()可以对图像进行任意角度的旋转;
    剪裁:imcrop()可以按精确定位的各点坐标进行剪裁;
    滤波:filter()和filter2()可实现对一维信号和二维信号的滤波;
    抖动:dither()对图像进行抖动;抖动攻击考验水印鲁棒性的一个很好的攻击;
    jpeg压缩:imwrite()中jpg和quality参数能对图像进行可控jpg压缩;
    加各种噪声:imnoise()可以对图像加入各种噪声,如白噪声、椒盐噪声等,加入噪声是对水印鲁棒性考验的一种常见的攻击;
    放大/缩小:imresize()可以以指定的插值方法来对图像进行放大和缩小。
    3.4一个用MATLAB编写的数字水印算法实例
    为证明MATLAB的高效性与实现简便性,我们以文献[1]的算法为例,给出在Windows98环境下MATLAB5.3中调试通过的完整源程序。
     嵌入水印
    %定义常量
    size=256;block=8;blockno=size/block;LENGTH=size*size/64;
    Alpha1=0.02;  Alpha2=0.1; T1=3; I=zeros(size,size); D=zeros(size,size); BW=zeros(size,size); block_dct1=zeros(block,block);
    %产生高斯水印,并显示水印信息;
    randn('seed',10);mark=randn(1,LENGTH);
    subplot(2,2,1);plot(mark);title('watermarc:Gaussian noise');
     

    %显示原图
    subplot(2,2,2);I=imread('lena264_264','bmp');    
    imshow(I);title('origine image:I');
    %显示prewitt为算子的边缘图
    BW=edge(I,'prewitt');subplot(2,2,3);imshow(BW);
    title('edge of origine image');
    %嵌入水印
    k=1;
    for m=1:blockno
       for n=1:blockno
          x=(m-1)*block+1;      y=(n-1)*block+1;
            block_dct1=I(x:x+block-1,y:y+block-1);
            block_dct1=dct2(block_dct1);
        BW_8_8=BW(x:x+block-1,y:y+block-1);
          if m<=1|n<=1
             T=0;
          else
             T=sum(BW_8_8);    T=sum(T);
          end
          if T>T1
             Alpha=Alpha2

    else
             Alpha=Alpha1;
    end
    block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k));     block_dct1=idct2(block_dct1);
    D(x:x+block-1,y:y+block-1)=block_dct1;  
          k=k+1;
       end
    end
    %显示嵌入水印后的图像
    subplot(2,2,4);imshow(D,[]);title('embeded image:D'); 
    由些可以看到用MATLAB的编写一个完整的水印嵌入算法只需几十条语句便可以完成,而这些程序如果用C语言或其它高级语言编写程序至少在100行以上。这个例子充分证明了MATLAB在数字水印技术处理中的方便性和高效性。

    4 MATLAB与VC++6.0的接口
    用MATLAB编写数字水印程序的主要优点是语言本身适合水印技术所需的大量的函数库。并且MATLAB本身具有可扩展性、易学易用性和高效性的优点。除此之外,MATLAB还与VC++6.0有着良好的编程接口,必要时,可以采用MATLAB与VC6.0++的混合编程。有兴趣的读者可参考文献[3]。

    5 结束语
    数字水印软件作为数据安全领域中的新生事物,具有很高的技术含量和很强的生命力,同时也孕育着巨大的商机。我们有理由相信,有了一个高效实用的研究工具能起到事半功倍的效果,会有越来越多的有识之士投入到数字水印技术的研究和产业化进程中来。
    参考文献
    [1]黄继武 YunQ.SHI 程卫东 DCT域图像水印:嵌入对策和算法 电子学报 2000 vol.28 No.4 pp.57~60
    [2]伯晓晨 李涛 刘路等编著 《Matlab工具箱应用掼——信息工程篇》 电子工业出版社 2000年4月第1版
    [3]陶虹 周良柱 袁金荣 MATLAB与Visual C++混合编程的实现 计算机工程与应用 2000,10,pp.100-101,104
    [4] Cox I J,Killian J,Leighton T,.Shamoon T.Secure spread spectrum watermarking for images ,audio and video.In: Pro.IEEE ICIP(Int.Conf.on Image Processing),Lausane,Switzerland,1996,3,pp.243-246
    [5] Cox I J,Killian J,Leighton F T,etal.Secure spread spectrum watermarking for multimedia.In :IEEE Trans Image Processing,1997,6(12),pp.1673-1687.
    [6] Piva A.DCT-based watermark recovering without resorting to the uncorrupted original images.In:Proc of ICIP’97,1:520-523.
    [7] Hsu C-T,Wu J-L.Hidder signature in images.In :Proc of ICIP,1996,3,pp.223-226.
    [8] Swanson M D,Zhu B,Tewfik A H.Multiresolution scene-based video watermarking using perceptual models[J].In:IEEE Journal on Selected Areas in Communications,1998,16(4),pp.540-550.
    [9] O’Ruanaidh J,Pun T.Rotation,scale and translation invariant spread spectrum digital image watermarking[J].In:Signal Processing,1998,66(3),pp.303-317.
    [10] O’Ruanaidh J,Dowling W,Boland F.Phase watermarking of digital images[A].In:Proc of ICIP[C].1996,3,pp.239-242.
    [11] Bas P,Chassery J M,Davoiine f.Self-similarity based image watermarking[A].In:Proc of EUSIPCO[C], 1998, pp. 2277-2280.  
    [12] Kundur D,Hatzinakos D.Digital watermarking based on multiresolution wavelet data fusion. In: Proc. ICIP[C]. 1997, 1, pp. 544-547.
    E-mail:tianhp@263.net

     

    展开全文
  • 基于MATLAB的数字水印技术研究

    千次阅读 2018-11-10 07:10:08
    基于MATLAB的数字水印技术研究

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                    摘要:数字水印技术作为数字媒体版权保护的有效办法,近年来在国内外引起了人们极大的兴趣。但是由于数字水印技术涉及到的知识面比较广,即使是专业人员有时也感到力不从心,那么如何选择一种有效的编程工具便成为一个亟待解决的问题。本文从数字水印技术本身的特点、一般模型和典型算法出发,简要地介绍了一种可以快速上手的高效的实用语言——Matlab。最后,作者给出一个用Matlab实现数字水印实例。
    关键词:数字水印  Matlab Visual C++6.0 DWT  DCT

    1 引言
    作为传统加密系统的有效补充办法,从1993年Caronni正式提出数字水印到现在短短几年里,无论是在国内还是在国外对数字水印的研究都引起了人们极大的关注。但数字水印技术的发展还很不成熟,应用也处于初级阶段。在我国,知识产权问题是一个敏感的话题,只有深入开展数字水印技术的研究,尽快制定我国的版权保护水印标准,才能使我们在未来可能的国际知识产权纠纷中取得主动权。那么掌握高效的工具,便成为一个必须解决的问题。本文就针对数字水印本身的特点,介绍了一种高效的实用工具——MATLAB。
    2 数字水印技术
    2.1 数字水印技术的复杂性
    数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉感知理论、扩频技术(Spread Spectrum)、信号处理(Signal Processing ) 技术、数字图像处理(Digital Image Processing)技术、多媒体(Multimedia)技术、模式识别(Pattern Reorganization)技术、算法设计(Algorithm Design)等理论,用到经典的DFT(Discrete Fourier Transform)、DCT(Discrete Cosine Transform)变换和近代最先进的数学工具----小波(Wavelet)。
    数字水印又是一个横跨计算机科学、生理学、密码学、数字、数字通信等多门学科,并与Internet的发展密切相关的交叉科学。数字水印的多学科性导致数字水印技术研究的难度和复杂性。所以,针对数字水印技术本身的跨学科特点,找出一种合适的编程工具,往往可以起到事半功倍的效果。下面我们从数字水印的一般模型出发,来逐步介绍MATLAB。
    2.2数字水印的一般模型
    数字水印的一般模型如图1所示:

    频域法加入数字水印的原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有DWT、DCT、DFT、WP和分形。然后,对加入了水印信息的信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息的信号。

    频域法检测水印的原理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算,得出水印信息。如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印的检测有两个结束点。
    2.3数字水印技术的常用算法
    数字水印算法一般可分为两种空域法和频域法,频域法有以下优点:1)嵌入的水印信号能量可以分布到空域的所有像素上,有利于保证水印的不可见性;2)视觉系统(HVS)的某些特性(如频率的掩蔽特性)可以更方便地结合到水印编码过程中;3)频域法可与国际数据压缩标准兼容,从而实现在压缩域(compressed domain)内的水印编码。所以我们也以频域法为主介绍MATLAB在数字水印技术中的使用。
     DCT法(Discreste Cosine Transformation)
    对原始信号做DCT的算法:Cox 和Piva 等人提出的DCT技术的经典之作。Cox利用随机数发生器产生标准正态序列作为水印信息对图像进行整体DCT变换后,选取除去DC系数之外部分较低频率系数叠加水印信息;Piva则修改整幅图像的中频部分。
    对原始信号分块后,再作DCT的算法:Hsu和Wu 把图像进行8*8分块,将一个二进制序列作为水印放入DCT的中频区;有些学者则计算整个图像的DCT,把一个实数序列嵌入DCT的中频系数上。选择中频区的好处是一方面尽量减少嵌入信息对图像主观视觉的影响;同时,尽量避免有损压缩对水印信息可能带来的损失。
    还有一种DCT方法就是把水印信息嵌入到高频系数上,但是采用这种方法,抗压缩性非常差。
     DFT法(Discrete Fourier Transformation)
    Swanson 等利用时域小波变换和频率掩蔽特性结合,实现多分辨率视频水印;Kundur和Hatzinakos 把水印植入灰度图像的小波变换域。
     其它变换域还有Fourier-mellin 域 、Fourier 变换域、分形 或WP(Wavelet Package)等。
    以上的变换域算法计算量都非常大,编程实现这些变换和逆变换也需要好好下一番功夫,由此造成研究人员把大量的时间和精力浪费在与水印算法研究无关的问题上。
    3 可实现数字水印技术的高效实用工具——Matlab
    3.1Matlab简介
    Matlab是当前在国内外十分流行的工程设计和系统仿真软件包。它是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一人方便的、界面友好的用户环境。
    Matlab的推出得到了各个领域专家、学者的广泛关注,其强大的扩展功能为各个领域的应用提供了基础。由各个专家学者相继推出了MATLAB工具箱,其中的信号处理(signal processing)、控制系统(control system)、神经网络(neural network)、图像处理(image processing)、鲁棒控制(robust control)、非线性系统控制设计(nonlinear system control design)、系统辨识(system identification)、最优化(optimization)、模糊逻辑(fuzzy logic)、小波(wavelet)、通信(communication)、统计(statistics)等工具箱,这些工具箱给各个领域的研究和工程应用提供了有力的工具,借助于这些“巨人肩上的工具”,各个层次的研究人员可直观、方便地进行分析、计算及设计工作,从而大大地节省了时间。
    3.2用Matlab研究数字水印的优点
     集成了DCT、DWT等函数有丰富的小波函数和处理函数,这不仅方便了研究人员,而且使源程序简洁明了、易实现。
     强大的数学运算功能。能够方便、高效地实现音频、视频中的大量矩阵运算。
     提供了图像处理工具箱、小波分析工具箱、数字信号处理工具箱。用来编制跨数字图像处理技术、数字信号处理等多学科的数字水印技术是非常好的选择。
     MATLAB与目前最强大的编程工具——Visual C++具有良好的接口。
    3.3Matlab函数介绍(以MATLAB5.3为例)
    在介绍函数之前,我们必须明确一点:作水印程序时,处理的图像数据是二维信号,而声音信号是一维信号。这里,我们仅仅简单介绍与水印有关的函数,具体函数的用法请读者参考文献[2]。
     数据输入输出函数
    imread()和imwrite():可以读写bmp,jpg/jpeg, tif/tiff, png, hdf, pcx, wxd格式文件。读索引文件时,还可以得到相应的调色板数据。
    auread()、auwrite()、wavread()和wavwrite():可以方便地读写au和wav文件,并可控制其中的位及频率。
     图像显示与声音播放
    imshow():显示一幅图像;
    imfinfo():可以得到读入图像的信息。如文件的大小、格式、格式版本号、图像的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等
    wavplay():播放wav声音文件。当然,也可以把处理后的wav文件保存后再用其它工具播放。
    wavrecord():可以对处理后的wav文件进行录音。
     变换频函数
    对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB中对一维信号和二维信号分别提供了各种变换和逆变换函数。
     离散余弦变换(DCT)
    dct(),dct2():分别实现一维信号和二维信号的DCT(离散余弦变换);
    idct(),idct2():分别实现一维信号和二维信号的IDCT(逆向离散余弦变换);
     离散傅里叶变换(DFT)
    fft(),fft2():分别实现一维信号和二维信号的DFT(离散傅里叶变换);
    ifft(),ifft2():分别实现一维信号和二维信号的IDFT(逆向离散傅里叶变换);
     离散小波变换(DWT)
    dwt(),dwt2():分别实现一维信号和二维信号的DWT(离散小波变换);
    idwt(),idwt2():分别实现一维信号和二维信号的IDWT(离散小波变换);
    Wavedec2():多级二维小波分解函数;
    Waveinfo():提供小波包中所有的小波信息;
    另外,MATLAB中还有丰富的小波包处理函数,有兴趣的读者可参考文献[2]。
     攻击函数
    对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算法必须经过各种攻击测试才能对之做出客观的评价。MATLAB中的许多函数可以直接用来做的攻击测试。
    旋转:rotate()可以对图像进行任意角度的旋转;
    剪裁:imcrop()可以按精确定位的各点坐标进行剪裁;
    滤波:filter()和filter2()可实现对一维信号和二维信号的滤波;
    抖动:dither()对图像进行抖动;抖动攻击考验水印鲁棒性的一个很好的攻击;
    jpeg压缩:imwrite()中jpg和quality参数能对图像进行可控jpg压缩;
    加各种噪声:imnoise()可以对图像加入各种噪声,如白噪声、椒盐噪声等,加入噪声是对水印鲁棒性考验的一种常见的攻击;
    放大/缩小:imresize()可以以指定的插值方法来对图像进行放大和缩小。
    3.4一个用MATLAB编写的数字水印算法实例
    为证明MATLAB的高效性与实现简便性,我们以文献[1]的算法为例,给出在Windows98环境下MATLAB5.3中调试通过的完整源程序。
     嵌入水印
    %定义常量
    size=256;block=8;blockno=size/block;LENGTH=size*size/64;
    Alpha1=0.02;  Alpha2=0.1; T1=3; I=zeros(size,size); D=zeros(size,size); BW=zeros(size,size); block_dct1=zeros(block,block);
    %产生高斯水印,并显示水印信息;
    randn('seed',10);mark=randn(1,LENGTH);
    subplot(2,2,1);plot(mark);title('watermarc:Gaussian noise');
     

    %显示原图
    subplot(2,2,2);I=imread('lena264_264','bmp');   
    imshow(I);title('origine image:I');
    %显示prewitt为算子的边缘图
    BW=edge(I,'prewitt');subplot(2,2,3);imshow(BW);
    title('edge of origine image');
    %嵌入水印
    k=1;
    for m=1:blockno
       for n=1:blockno
          x=(m-1)*block+1;      y=(n-1)*block+1;
            block_dct1=I(x:x+block-1,y:y+block-1);
            block_dct1=dct2(block_dct1);
        BW_8_8=BW(x:x+block-1,y:y+block-1);
          if m<=1|n<=1
             T=0;
          else
             T=sum(BW_8_8);    T=sum(T);
          end
          if T>T1
             Alpha=Alpha2

    else
             Alpha=Alpha1;
    end
    block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k));     block_dct1=idct2(block_dct1);
    D(x:x+block-1,y:y+block-1)=block_dct1; 
          k=k+1;
       end
    end
    %显示嵌入水印后的图像
    subplot(2,2,4);imshow(D,[]);title('embeded image:D');
    由些可以看到用MATLAB的编写一个完整的水印嵌入算法只需几十条语句便可以完成,而这些程序如果用C语言或其它高级语言编写程序至少在100行以上。这个例子充分证明了MATLAB在数字水印技术处理中的方便性和高效性。
    4 MATLAB与VC++6.0的接口
    用MATLAB编写数字水印程序的主要优点是语言本身适合水印技术所需的大量的函数库。并且MATLAB本身具有可扩展性、易学易用性和高效性的优点。除此之外,MATLAB还与VC++6.0有着良好的编程接口,必要时,可以采用MATLAB与VC6.0++的混合编程。有兴趣的读者可参考文献[3]。
    5 结束语
    数字水印软件作为数据安全领域中的新生事物,具有很高的技术含量和很强的生命力,同时也孕育着巨大的商机。我们有理由相信,有了一个高效实用的研究工具能起到事半功倍的效果,会有越来越多的有识之士投入到数字水印技术的研究和产业化进程中来。
    参考文献
    [1]黄继武 YunQ.SHI 程卫东 DCT域图像水印:嵌入对策和算法 电子学报 2000 vol.28 No.4 pp.57~60
    [2]伯晓晨 李涛 刘路等编著 《Matlab工具箱应用掼——信息工程篇》 电子工业出版社 2000年4月第1版
    [3]陶虹 周良柱 袁金荣 MATLAB与Visual C++混合编程的实现 计算机工程与应用 2000,10,pp.100-101,104
    [4] Cox I J,Killian J,Leighton T,.Shamoon T.Secure spread spectrum watermarking for images ,audio and video.In: Pro.IEEE ICIP(Int.Conf.on Image Processing),Lausane,Switzerland,1996,3,pp.243-246
    [5] Cox I J,Killian J,Leighton F T,etal.Secure spread spectrum watermarking for multimedia.In :IEEE Trans Image Processing,1997,6(12),pp.1673-1687.
    [6] Piva A.DCT-based watermark recovering without resorting to the uncorrupted original images.In:Proc of ICIP’97,1:520-523.
    [7] Hsu C-T,Wu J-L.Hidder signature in images.In :Proc of ICIP,1996,3,pp.223-226.
    [8] Swanson M D,Zhu B,Tewfik A H.Multiresolution scene-based video watermarking using perceptual models[J].In:IEEE Journal on Selected Areas in Communications,1998,16(4),pp.540-550.
    [9] O’Ruanaidh J,Pun T.Rotation,scale and translation invariant spread spectrum digital image watermarking[J].In:Signal Processing,1998,66(3),pp.303-317.
    [10] O’Ruanaidh J,Dowling W,Boland F.Phase watermarking of digital images[A].In:Proc of ICIP[C].1996,3,pp.239-242.
    [11] Bas P,Chassery J M,Davoiine f.Self-similarity based image watermarking[A].In:Proc of EUSIPCO[C], 1998, pp. 2277-2280. 
    [12] Kundur D,Hatzinakos D.Digital watermarking based on multiresolution wavelet data fusion. In: Proc. ICIP[C]. 1997, 1, pp. 544-547.
    E-mail:tianhp@263.net

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 为了解决奇异值最高位在几何攻击下易敏感性和零水印抗几何攻击性能差的问题,提出一种基于改进奇异值和子块映射的图像零水印技术。首先,对载体图像进行Arnold置乱处理,消除像素间的相关性。然后,进行Curvelet变换、...
  • 数字水印技术的基本概念和现状

    万次阅读 2018-11-12 19:49:48
    数字水印技术的基本概念和现状
  • 为了验证图像的真实性和完整性,提出了一种基于像素点灰度值奇偶性的脆弱水印技术。选取一些像素点,通过判断并调整这些像素点的灰度值奇偶性达到嵌入水印图像位信息的目的。根据提取的水印图像可以验证被检测图像...
  • 概述 数字水印,是指将特定的信息嵌入数字信号中,数字信号可能是音频、图片或是视频等。数字水印可分为浮现式和...数字水印技术是一门新兴的多学科交叉的应用技术,它涉及不同学科领域的理论和技术,如信号处理、图
  • 图片水印技术实践

    2016-05-03 11:27:00
    封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。 Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb); // 设定分辨率 bmPhoto.SetResolution(imgPhoto....
  • 基于小波变换的数字水印技术

    万次阅读 2018-02-28 23:36:44
    1、数字水印介绍 现代许多应用与服务通过计算机网络提供,包括视频图像、电子数据交换等,然而网络在提供这些服务的同时却存在严重问题:数据作品的版权无法得到有效保护,有恶意的个人或团体可以在未得到版权所有...
  • 息值修改二维码图像的像素值,实现水印信息的嵌入和提取。实验结果表明,相比同类算法,根据本文提出的方法嵌入 水印后的图像具有更高的质量和更大的水印容量。同时,该方法具有较好的抗JPEG压缩和抗打印扫描的鲁棒...
  • 通过将水印嵌入点的宿主图像的像素值更改为其近邻像素值的均值,而实现“盲水印”的提取。数值计算结果表明:该水印计算法对像素变换攻击具有很强的鲁棒性,如图像亮度、对比度和灰度曲线的调整;能抵抗JPEG有损压缩、...
  • 利用BMP图片水印技术写入加密信息

    千次阅读 2013-12-04 17:02:54
    本文主要和大家讨论一下BMP图片水印技术。其实BMP图片水印技术就是在BMP图片中写入编码后的数据,但写入数据后的图片在外观上和原始图片没有区别(只有文件哈希值改变),并能用特定的程序将写入的信息还原出来。 ...
  • 随着二值图像多媒体产品的广泛应用, 针对二值图像保护和认证的数字水印技术也越来越受到重视, 但由于随 意修改二值图像的像素值容易引起图像质量的明显下降, 所以大多数在灰度图像和彩色图像中的水印嵌入方法不能直 ...
  • 该算法先对图像进行预量化与预截断抵抗JPEG20000的压缩攻击,根据原始图像像素的邻域特性形成水印,再使用量化嵌入算法,嵌入水印,提取时不需要原始图像甚至不需要原始水印的对比。实验效果表明,该算法对抵抗JPEG...
  • 摘要数字水印(Digital Watermarking)技术是我们生活中经常见到的信息隐藏技术。...空间数字水印采用最低有效位(LSB)算法,通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素来表达...
  • 提出了一种新的基于DCT域的鲁棒水印技术.算法充分考虑了数字图像局部像素之间的相关性及人类视觉系统(HSV)的特性,通过调制各DCT分块低频系数值并比较非零DCT系数个数,选择合适的DCT分块以完成水印嵌入.嵌入过程...
  • 数字水印是一种将标识信息嵌入到载体当中,且不影响载体使用的一种技术,主要分为时域水印嵌入算法(将水印嵌入到时域采样数据中)和变换域水印嵌入算法(先对音频做变换,将水印嵌入到变换域系数中)。本文主要介绍...
  • 基于小波变换的数字水印技术研究

    千次阅读 多人点赞 2014-04-13 18:50:58
    通过对这些块的平均值进行量化来嵌入水印;提取时也依赖于相应块的平均值,所以不需要原始图像参与。算法对有损压缩、小波压缩、噪声、中值滤波和剪裁等操作有较好的鲁棒性。  关键词:信息隐藏;数字水印;小波...
  • 使用vb.net代码实现图像水印技术

    千次阅读 2006-12-15 17:02:00
    使用vb.net代码实现图像水印技术 作者: Builder.com.cn 2006-11-23 10:5 AM  水印技术是一门用于商标
  • MATLAB数字水印处理技术的实现第一章 摘要本文首先介绍了数字水印技术的原理和分类所谓的信息隐藏是利用媒体信息普遍存在的冗余特性,将秘密信息隐藏在其他媒体信息中。其首要目标就是使加入隐藏信息后的媒体目标的...
  • 一、问题背景为了防止信息泄露或知识产权被侵犯,在web的世界里,对于页面和图片等增加水印处理是十分有必要的,水印的添加根据环境可以分为两大类,前端浏览器环境添加和后端服务环境添加,简单对比...
  • 数字水印的关键技术

    千次阅读 2007-01-17 21:09:00
    数字水印的关键技术出处:——伯晓晨 沈林成 常文森---- 作为感觉器官的眼睛和耳朵并不是完美无缺的,它们有许多可以被数字水印技术利用的缺陷。近年来,认知科学的飞速发展为数字水印技术奠定了生理学基础,人眼的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,266
精华内容 906
关键字:

像素水印技术