沈阳理工大学数字图像处理课程设计
利于解决版权纠纷,保护数字产权合法拥有者的利益。尤其是隐蔽通信领域的特殊性,对水印的容量需求很大。
3.4 数字水印技术的基本原理
数字水印技术(Digital Watermark):技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到。目前主要有两类数字水印,一类是空间数字水印,另一类是频率数字水印。空间数字水印的典型代表是最低有效位(LSB)算法,其原理是通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素来表达水印的信息,以达到嵌入水印的目的。 数字水印的主要目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。数字水印的嵌入和提取或检测的通用模型如图3.1、图3.2所示。 水印信息 原始信息 数字水印嵌入算法 加入水印的信息 密钥 图3.1 数字水印的嵌入过程 原始信息 数字水印提取 /检测算法 加入水印的信息 加入水印的信息 密钥 图3.2 数字水印的提取或检测过程 4
沈阳理工大学数字图像处理课程设计
图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个位来表示,但其中每一个位的作用是不一样的,越高位对图像的影响越大,反之越低的位影响越小,甚至不能感知。
5
沈阳理工大学数字图像处理课程设计
图4.1显示了一幅200×200像素的图像的8个位平面。
图4.1 200×200像素图像的8个位平面
图4.1中的第一张是原始图像,后面依次是从高到低的位平面。可以看出,较高的位平面反映了图像的轮廓等主要信息,而较低的位平面反映的是图像的细节信息,最低的2个位平面看上去和原始图像几乎没有相关性,像是噪声。
4.2 LSB算法的实现
LSB算法实现较为简单,首先,需要考虑嵌入的数字水印的数据量,如果嵌入最低的1位,则可以嵌入的信息量是原始图像信息量的1/8,如果适用最低两位则可以嵌入的信息量是1/4,以此类推。适用的最低位越多,嵌入的数字水印的信息量越大,同时
6
沈阳理工大学数字图像处理课程设计
对图像的视觉效果影响也越大。然后,适当调整数字水印图像的大小和比特位数,以适应数字水印图像数据量的要求。最后,对原始图像中要使用的最低位置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
7
沈阳理工大学数字图像处理课程设计
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表示水印图像。
8