基于MATLAB的数字水印算法研究实现

基于MATLAB的数字水印算法研究实现

一、课题背景

随着图像、音频、视频等多媒体信息以及Internet的迅速发展,多媒体信息在互联 网上的广泛传播变得及其便利,数据的交换和传输过程变得相对简单。多媒体技术的高 速发展带来方便的同时也带来一系列的问题,如此一来使得版权问题日显突出,数据文 件和作品等等容易在没有授权和许可的情况下被拷贝和传播,盗版者只需经过简单的步 骤就可以盗取与原版一致的文件作品并以此牟利。长此以往,盗版的猖獗将会给我国的 信息产业市场带来极大的负面效应,将极大阻碍该产业的健康发展。

传统多媒体保护技术使用的是密码技术,是一种基于香农理论和密码学理论的技 术。然而这种方法不能完全解决实际问题,一方面是文件加密以后由于不可解行而不利 于多媒体信息的传播,另一方面是攻击者容易注意到被加密过的多媒体信息,并进一步 去破解加密过的多媒体信息。因此,密码学通常用于保护传输中的内容,而无法保护解 密过的信息。

二、数字水印技术简介

因此,由于密码学的不完善,我们需要一种更加可靠的技术来解决上述问题。因而 数字水印技术将能满足我们的需求。数字水印技术是将一些标识信息直接嵌入数字载体 当中或是间接表示,且不影响原载体的使用价值,也不容易被探知和再次修改[1]o

数字水印技术是信息伪装技术中最重要的内容之一吐 它作为加密技术的补充,在 多媒体信息的版权保护与完整性认证方面得到了迅猛的发展。文件拥有者利用数字水印 技术把水印(例如图片、文字、商标、序列号等等)以人无法感知的方式镶嵌入用于传 播的多媒体信息中,以防止一些传统的信息破解方法。

综合众多学者的定义和分析已有的数字水印方案,现给出数字水印的定义:数字水 印是永久镶嵌在其它数据(宿主数据)中具有可鉴别性的数字信号或模式,而且并不影 响宿主数据的可用性。作为数字水印技术基本上应当满足下面几个方面的要求:

(1) 安全性:数字水印的信息应是安全的,难以篡改或伪造,同时,应当有较低 的误检测率,当宿主内容发生变法时,数字水印应当发生变化,从而可以检测原始数据 的变更;

(2) 隐蔽性:数字水印应是不可知觉的,而且应不影响被保护数据的正常使用;

(3) 稳健性:数字水印必须难以被除去,如果只知道部分数字水印信息,那么试 图除去或破坏数字水印将导致严重降质或不可用。同时,数字水印在一般信号处理和几 何变换中应具有稳健性;

(4) 水印容量:嵌入的水印信息必须足以表示多媒体内容的创建者或所有者的标 志信息,或购买者的序列号,这样有利于解决版权纠纷,保护数字产权合法拥有者的利 益。




三、算法实现

3.1基于Mat l ab的数字水印嵌入

在得到加密后的水印(图3-2),利用Matlab进行水印嵌入,得到嵌入水印后的图 像,并可以从新图中提取加密后的水印(图3-5)。


v2-fd1ffc8816253b7607c3daaa0010747c_b.jpg


图 3-5 Figure3

11

3.2嵌入水印图像与原图的比较




把新图和原图的直方图进行比较


v2-a4436ccdcf08b7f9973835fe6f043be4_b.jpg

v2-c30c1bf58b9e78e24b249fbf9c53f517_b.jpg

v2-d428cadc20f411ab4dcbc9a68b380bf1_b.jpg


原图直方图(图3-6):

图3-6原图直方图

新图直方图(图3-7):

图3-7新图直方图

原图与新图的频谱比较(图3-8):

图3-8频谱图比较



可以看出,原图与新图在外观上几乎没有区别,但是通过直方图与频谱图的比较两

12

幅图片是存在区别的。那么我们就需要对一张未知的图片进行检测是否含有水印。

3.3检测图像中是否含有水印

对一幅未知的图片,我们要对其进行判断是否含有水印,则需要先从该图像中提取 水印,若存在水印,则提取的水印是基于混沌序列加密过的,用该提取的水印与生成的 混沌序列再进行一次异或运算,看是还原出来的水印(图3-9)是否与原始水印(图3-1) 一致。


v2-b0fb89025863057cd1ed9657da933ccc_b.jpg


图3-9还原水印



原图(图3-10)不含有水印的情况下,还原水印的结果(图3-11):


v2-09e476b3837c38d1353788580d9209dc_b.jpg

v2-6fb9d2f0085660a31c9ff64e51c1ee7c_b.jpg


图3-10原图

图3-11空白图

从一副未知图像(图3-12)中提取水印(图3-13)并还原(图3-14


v2-36bf0066ceebbb85d2aebe10762ceef1_b.jpg

v2-80119deb9f4087107c5aa6284bde88c6_b.jpg

v2-d633754e444d73f09226a7b7801deffe_b.jpg


图3-12未知图像

图3-13未知图提取水印

图3-14未知图还原水印

四、参考代码附录:

clear all;subplot(2,2,3);
%logistic序列生成算法imshow(f);title('混沌加密水印图像');
figure(1);imwrite(f,'c:\new\0.BMP');
an=linspace(3.1,3.99,400);subplot(2,2,4);
hold on;box on;axis([min(an),max(an),-1,2]);imshow(g);title('水印图像恢复');
N=64*64;
xn=zeros(1,N);M=256;
for a=an;N=64;
x=rand;[filename1,pathname]=uigetfile('*.*,,,select the image');
fork=1:20;image1=imread(num2str(filename1));
x=a*x*(1-x);figure(3);subplot(2,2,1);imshow(image1);
endtitle('original image');
fork=1:N;image1=double(image1);
x=a*x*(1-x);subplot(2,2,2);imshow(f);title('original watermark');
xn(k)=x;
b(k,1)=x;%嵌入水印
end[ca,ch,cv,cd] = dwt2(image1,'db1');
plot(a*ones(1,N),xn,'k.,,,markersize,,1);[cas,chs,cvs,cds] = dwt2(ca,'db1');
fori=1:N
endforj=1:N
c=reshape(b,64,64);iff(i,j)==0
%二维矩阵调制a=-1;
fora1=1:64;else
fora2=1:64;a=1;
if c(a1,a2)>=0.5;end
d(a1,a2)=1;Ca(i,j)=cas(i,j)*(1+a*0.03);
else d(a1,a2)=0;end
end;end
end;IM= idwt2(Ca,chs,cvs,cds,'db1');
endmarkedimage=double(idwt2(IM,ch,cv,cd,'db1'));
subplot(2,2,3);colormap(gray(256));image(markedimage);
%水印加密title('marked image');
e=imread('c:\new\123.BMP');imwrite(markedimage,gray(256),'c:\new\watermarked.bm
e=double(e);p','bmp');
f=bitxor(d,e);%mm=imread('c:\new\0.BMP');nn=double(m
m);%h=bitxor(d,mm);%提取水印
g=bitxor(d,f);image1=imread(num2str(filename1));image1=double(imag
figure(2);e1);
subplot(2,2,1);imaged二imread('c:\new\watermarked.bmp');
imshow(d);title('混沌序列矩阵,);[ca,ch,cv,cd] = dwt2(image1,'db1');
subplot(2,2,2);[cas,chs,cvs,cds]=dwt2(ca,'db1');
imshow(e);title('水印图像');[caa,chh,cvv,cdd]=dwt2(imaged,'db1');


end

[caas,chhs,cvvs,cdds]=dwt2(caa,'db1,);

for p=1:N

forq=1:N

a=caas(p,q)/cas(p,q)-1;

if a<0

W(p,q)=0;

else

W(p,q)=255;

end

%频谱

pic1= imread('c:\new\3.jpg'); %pic=rgb2gray(pic);

subplot(2,2,1);

imshow(pic1);

title('原图');

pic_fft1=fft2(double(pic1)); pic_fft1=fftshift(pic_fft1);

subplot(2,2,2);

imshow(log(abs(pic_fft1)),[]); title('原图频谱图');

end

subplot(2,2,4);

colormap(gray(256));image(W);title('从含水印图像中提取 的水印');

imwrite(W,gray(256),'watermark.bmp,,,bmp,);

%figure(4);

h=bitxor(d,W);figure(7);subplot(2,2,1);imshow(h);

pic2= imread('c:\new\watermarked.BMP'); %pic=rgb2gray(pic);

subplot(2,2,3);

imshow(pic2);

title('新图');

pic_fft2=fft2(double(pic2));

pic_fft2=fftshift(pic_fft2);

subplot(2,2,4); imshow(log(abs(pic_fft2)),[]);

title('新图频谱图’

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值