摘 要
数字水印(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 设计任务与目的
- 通过课程设计把自己在大学中所学的知识应用到实践当中。
- 在课程设计的过程中掌握程序编译及软件设计的基本方法。
- 深入了解利用Matlab设计基于Matlab的数字水印设计——基于空域的水印实现。
- 提高自己对于新知识的学习能力及进行实际操作的能力。
- 锻炼自己通过网络及各种资料解决实际问题的能力。
2 MATLAB的简介及应用
2.1 MATLAB简介
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
2.2 MATLAB应用
MATLAB 产品族可以用来进行以下各种工作:
- 数值分析
- 数值和符号计算
- 工程与科学绘图
- 控制系统的设计与仿真
- 数字图像处理 技术
- 数字信号处理 技术
- 通讯系统设计与仿真
- 财务与金融工程
MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。
3 数字水印技术
3.1 数字水印技术的发展
数字水印是一个崭新的信息隐藏技术,首次提出这个概念至今也不到20年。由于还处在学术研究的高峰阶段,仅有少数应用研究和应用案例,所以还没有形成国际标准、国家标准和行业标准,目前发现除了"国际知名的五家电脑及消费型电子产品主流公司,包括IBM及索尼等已就数字"水印"技术的共同标准达成协议"的报道外,仅发现有成都宇飞信息工程有限责任公司起草并获得国家标准化部门备案的两个企业标准《印刷打印数字水印软件》(备案号:1104-2002)和《基于内容的、非密码机制的计算机与移动存储设备信息安全系统》企业标准(备案号:400-2010)。所以,学术界对数字水印技术的概念也没有统一的表述和界定。
3.2 水印分类
数字水印技术可以从不同角度进行分类,因此有多种分类方法。
- 按特性划分
按水印的特性可以将数字水印分为鲁棒数字水印和易损数字水印两类。
- 按水印所附载的媒体划分
按水印所附载的媒体,我们可以将数字水印划分为图像水印、音频水印、视频水印、文本水印以及用于三维网格模型的网格水印等。
- 按内容划分
按数字水印的内容可以将水印划分为有意义水印和无意义水印。
- 按用途划分
按水印的用途,我们可以将数字水印划分为票证防伪水印、版权保护水印、篡改提示水印和隐蔽标识水印。
- 按水印隐藏的位置划分
按数字水印的隐藏位置,我们可以将其划分为时(空)域数字水印、频域数字水印、时/频域数字水印和时间/尺度域数字水印。时(空)域数字水印是直接在信号空间上叠加水印信息,而频域数字水印、时/频域数字水印和时间/尺度域数字水印则分别是在DCT变换域、时/ 频变换域和小波变换域上隐藏水印。随着数字水印技术的发展,各种水印算法层出不穷,水印的隐藏位置也不再局限于上述四种。应该说,只要构成一种信号变换,就有可能在其变换空间上隐藏水印。本实验重点研究基于空域的数字水印技术。
3.3 数字水印的特点
作为数字水印技术基本上具有下面几个方面的特点。
1)安全性:数字水印的信息应是安全的,难以篡改或伪造,同时,应当有较低的误检测率,当原内容发生变化时,数字水印应当发生变化,从而可以检测原始数据的变更;当然数字水印同样对重复添加有很强的抵抗性
2)隐蔽性:数字水印应是不可知觉的,而且应不影响被保护数据的正常使用;不会降质;
3)鲁棒性:是指在经历多种无意或有意的信号处理过程后,数字水印仍能保持部分完整性并能被准确鉴别。可能的信号处理过程包括信道噪声、滤波、数/模与模/数转换、重采样、剪切、位移、尺度变化以及有损压缩编码等。主要用于版权保护的数字水印易损水印(Fragile Watermarking),主要用于完整性保护。当内容发生改变时,这些水印信息会发生相应的改变,从而可以鉴定原始数据是否被篡改。
4)水印容量:是指载体在不发生形变的前提下可嵌入的水印信息量。嵌入的水印信息必须足以表示多媒体内容的创建者或所有者的标志信息,或购买者的序列号,这样有利于解决版权纠纷,保护数字产权合法拥有者的利益。尤其是隐蔽通信领域的特殊性,对水印的容量需求很大。
3.4 数字水印技术的基本原理
数字水印技术(Digital Watermark):技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到。目前主要有两类数字水印,一类是空间数字水印,另一类是频率数字水印。空间数字水印的典型代表是最低有效位(LSB)算法,其原理是通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素来表达水印的信息,以达到嵌入水印的目的。
数字水印的主要目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。数字水印的嵌入和提取或检测的通用模型如图3.1、图3.2所示。
图3.1 数字水印的嵌入过程
图3.2 数字水印的提取或检测过程
图3.1是数字水印的嵌入过程,通过密钥可以提高数字水印的隐藏性、抗攻击性,并非必须的输入。根据不同的用途,嵌入的水印有些是需要还原的,而有些则需要验证水印的存在性,前者需要数字水印的提取算法,而后者需要数字水印的检测算法,根据具体的水印算法,嵌入或提取过程可能有所不同。
数字水印技术是从信息隐藏技术发展而来的,是数字信号处理,图像处理,密码学应用,算法设计等学科的交叉领域。数字水印最早在1993年由Tirkel等人提出,在国际学术会议上发表题为”Electronicwatermark”的第一篇有关水印的文章,提出了数字水印的概念及可能的应用,并针对灰度图像提出了两种向图像最低有效位中嵌入水印的算法。1996年在英国剑桥牛顿研究所召开了第一届国际信息隐藏学术研讨会,标志着信息隐藏学的诞生。
4 基于LSB的数字水印算法
4.1 LSB算法原理
最低有效位方法是最早提出来的最基础的空域图像信息隐藏方法,其他的许多空域算法都是从它的基本原理进行改进扩展得到的,使得LSB方法成为使用最广泛的隐藏技术之一。现在有一些简单信息隐藏软件大多是运用LSB和调色板调整等相关技术将信息隐藏在24bit图像或256色图像之中,如:Hide and Seek,Stego-Dos,White Noise S-tools等经典信息隐藏软件。
最低有效位( least significant bit,LSB)指的是一个二进制数字中的第0位(即最低位),具有权值为2^0,可以用它来检测数的奇偶性。最低有效位和最高有效位是相对应的概念。在大端序中,lsb指最右边的位。LSB(全大写)有时也指Least Significant Byte,指多字节序列中最小权重的字节。
LSB算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,对图像信息产生的影响非常小,人眼的视觉感知系统往往不能察觉。以一幅256灰度的图像为例,256灰度共需要8个位来表示,但其中每一个位的作用是不一样的,越高位对图像的影响越大,反之越低的位影响越小,甚至不能感知。
图4.1显示了一幅200×200像素的图像的8个位平面。
图4.1 200×200像素图像的8个位平面
图4.1中的第一张是原始图像,后面依次是从高到低的位平面。可以看出,较高的位平面反映了图像的轮廓等主要信息,而较低的位平面反映的是图像的细节信息,最低的2个位平面看上去和原始图像几乎没有相关性,像是噪声。
4.2 LSB算法的实现
LSB算法实现较为简单,首先,需要考虑嵌入的数字水印的数据量,如果嵌入最低的1位,则可以嵌入的信息量是原始图像信息量的1/8,如果适用最低两位则可以嵌入的信息量是1/4,以此类推。适用的最低位越多,嵌入的数字水印的信息量越大,同时对图像的视觉效果影响也越大。然后,适当调整数字水印图像的大小和比特位数,以适应数字水印图像数据量的要求。最后,对原始图像中要使用的最低位置0,再将数字水印数据放入原始图像的最低位即可。下面通过MATLAB7.1来实现这一算法。
LSB算法原理程序代码:
clc;
clear all;
A = imread('color.bmp'); % 显示原始图像
subplot(3,3,1);
imshow(A);title('原始图像'); % 显示8个位平面图像
for i=8:-1:1
A_bitplane = bitshift(bitget(A,i),i-1);
subplot(3, 3, 9-i+1); %显示8个位图
imshow(A_bitplane);
title(['位平面' num2str(i)]);
end
MATLAB是MathWorks公司推出的一套高性能的数值计算和可视化工具软件,利用MATLAB只需要几个函数和十来行语句就可以实现基本的LSB算法,而如果用C语言等程序语言来实现则可能需要上百行的语句。
以下是水印嵌入算法和提取算法的程序代码。
4.2.1 水印嵌入算法
[C,map]=imread('color.bmp'); %读入原始图片
[m,map1]=imread('word.bmp'); %读入水印图片
Mc=size(C,1); %原图的行数
Nc=size(C,2); %原图的列数
Mm=size(m,1); %水印的行数
Nm=size(m,2); %水印的列数
w_i=C; %将原图值赋给w_i
for ii=1:Mc; %将原图的最低有效位值换为水印的值
for jj=1:Nc;
w_i(ii,jj)=bitset(w_i(ii,jj),1,m(ii,jj));
%调用bitset()函数将原图的最低位值换为水印的值
end
end
imwrite(w_i,'lsb_watermark.bmp','bmp');
%将嵌入水印图像写入lsb_ watermark.bmp
figure(1)
imshow(w_i,[])
title('嵌入水印后') %显示嵌入水印后的图片
figure(2)
imshow(C,[])
title('嵌入水印前') %显示原始图片
figure(3)
imshow(m,[])
title('水印图片') %显示水印图片
算法分析:
这里选用一幅200×200像素的图像,数字水印用纯文字二值图像。MATLAB中可以用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表示水印图像。
4.2.2 水印提取算法
clear all;
file_name='lsb_watermark.bmp';
watermark_image=imread(file_name); %读入嵌入水印图像
Mw=size(watermark_image,1); %嵌入水印图像行数
Nw=size(watermark_image,2); %嵌入水印图像列数
file_name='word.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(watermark_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);
figure(1)
subplot(1,2,1);
imshow(watermark_image,[])
title('嵌入水印图像') %显示嵌入水印后的图片
figure(2)
subplot(1,2,1);
imshow(watermark1,[])
title('提取水印') %显示原始图片
figure(2)
subplot(1,2,2);
imshow(orig_watermark,[])
title('原始水印') %显示水印图片
算法分析:
这里选用一幅200×200像素、256灰度的图像,数字水印用纯文字二值图像。MATLAB中可以用bitget()函数实现提取数字水印数据。
提取水印的方法是:watermark(ii,jj)=bitget(watermark_image (ii, jj) ,1),watermark_image表示要嵌入水印的图像,1表示在最低位提取,2表示在第二个位平面提取,以此类推,最高位是8。
5 MATLAB软件仿真
用MATLAB软件对上述水印嵌入和提取算法源程序代码进行编译、仿真,可以得到如下仿真结果,对仿真图分析,可以得到相应的结论。
5.1 仿真结果
5.1.1 水印嵌入仿真
水印图像如图5.1所示,是200×200像素图像,256灰度图像,是颜色单一的二值文字“你好吗”图像。
图5.1 水印图像
图5.2 嵌入水印前 图5.3 嵌入水印后
图5.2是原始图像,这是一幅200×200像素的彩色图像,由于LSB算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,图像信息产生的影响非常小,人眼的视觉感知系统往往不能察觉,因此嵌入水印后,如图5.3看起来嵌入水印后的图像与原始图像没有区别。
若改变图像的较高位信息,修改语句w_i(ii,jj)=bitset(w_i(ii,jj),1,m(ii,jj));为w_i(ii,jj)=bitset(w_i(ii,jj),8,m(ii,jj));如图5.4、图5.5所示。
图5.4 嵌入水印前 图5.5 嵌入水印后
对比嵌入水印时改变高、低位信息,即对比图5.5和图5.3,可以发现当改变图像高位信息时,可以从肉眼看出嵌入水印图像后与原始图像有细微差别(为了可以更清晰的效果,我们选用8位),因此选用低位1可以实现较高的保密性,不易被察觉,并且可以保证原始图像的特征属性,便于选择和提取。
5.1.2 水印提取仿真
嵌入水印后的图像如图5.6所示,由于LSB算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,对图像信息产生的影响非常小,人眼的视觉感知系统往往不能察觉,看起来嵌入水印后的图像与原始图像没有区别。
图5.6 嵌入水印图像
图5.7提取的水印图像 图5.8 原水印图像
图5.7是对图像进行低位水印提取,与原水印图像(图5.8)相比较,可以发现提取的水印很模糊,但能够看得出原始水印的轮廓。
5.2 仿真分析
LSB算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,对图像信息产生的影响非常小,人眼的视觉感知系统往往不能察觉。以一幅256灰度的图像(图5.2)为例,256灰度共需要8个位来表示,但其中每一个位的作用是不一样的,对比图5.5、图5.3,越高位对图像的影响越大,而越低的位影响越小,甚至不能感知。
由于是在最低位嵌入数字水印图像,因此嵌入前的图像和嵌入后的图像没有明显的差别,数字水印得到更好的隐藏。MATLAB程序如上,其中word.bmp是水印图像文件,color.bmp是原始图像文件,lsb_watermark.bmp是嵌入水印之后的图像文件。
参考文献
[1] 刘刚等. MATLAB数字图像处理[M].机械工业出版社,2010:135-150.
[2] 龚声蓉等.数字图像处理与分析[M].清华大学出版社,2006: 269.
[3] 葛哲学.精通MATLAB[M].电子工业出版社,2008: 2-8.
[4] 张圣勤. MATLAB7.0实用教程[M].机器工业出版社,2006: 90-118.
[5] 孙仲康,沈振康.数字图像处理的应用[M].国防工业出版社,2008:132-158.
[6] 龚声蓉等.数字图像处理与分析(第二版)[M].清华大学出版社.2014:267
[7] 阮沈勇.MATLAB程序设计[M].电子工业出版社,2004: 70-85.
[8] 姚敏. 数字图像处理[M].机械工业出版社,2016: 52-60.
[9] 陈桂明.应用MATLAB语言处理数字信号与图像处理[M]. 科学出版社.2010: 50-65.
[10] 赵荣椿.数字图像处理导论[M].西北工业大学出版社,2013: 65-72.