Advertisement

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

阅读量:

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

一、课题背景

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

参考链接 【如链接无效,请留言评论】

MATLABDWT数字水印.zip-其它文档类资源-下载

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

二、数字水印技术简介

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

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

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

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

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

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

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

三、算法实现

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

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

图 3-5 Figure3

3.2嵌入水印图像与原图的比较 ,把新图和原图的直方图进行比较
7736c0ea6e0e675cb0c008c8a8eb26eb.png

原图直方图(图3-6)
669fba3705f8cfd8337add0202179de4.png

图3-7新图直方图
40c31df13e70d91b256024b89a68340a.png

图3-8频谱图比较

可以看出,原图与新图在外观上几乎没有区别,但是通过直方图与频谱图的比较两幅图片是存在区别的。那么我们就需要对一张未知的图片进行检测是否含有水印。

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

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

图3-9还原水印

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

图3-10原图
540342ca5a9be77e8066efca47d812ff.png

图3-11空白图

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

图3-12未知图像
a64f702bcb91feb89d6956ead81c3df4.png

图3-13未知图提取水印
c8c80a96b383f1eb0dff794c7b948724.png

图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=ax(1-x); figure(3);subplot(2,2,1);imshow(image1);
end title('original image');
fork=1:N; image1=double(image1);
x=ax(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
end forj=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+a0.03);
else d(a1,a2)=0; end
end; end
end; IM= idwt2(Ca,chs,cvs,cds,'db1');
end markedimage=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('新图频谱图’)

参考 链接 :MATLABDWT数字水印.zip-其它文档类资源-下载

全部评论 (0)

还没有任何评论哟~