完整word版数字水印源码.docx

上传人:b****9 文档编号:25032512 上传时间:2023-06-04 格式:DOCX 页数:10 大小:53.81KB
下载 相关 举报
完整word版数字水印源码.docx_第1页
第1页 / 共10页
完整word版数字水印源码.docx_第2页
第2页 / 共10页
完整word版数字水印源码.docx_第3页
第3页 / 共10页
完整word版数字水印源码.docx_第4页
第4页 / 共10页
完整word版数字水印源码.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

完整word版数字水印源码.docx

《完整word版数字水印源码.docx》由会员分享,可在线阅读,更多相关《完整word版数字水印源码.docx(10页珍藏版)》请在冰豆网上搜索。

完整word版数字水印源码.docx

完整word版数字水印源码

数字水印源码,希望对大家学习有帮助.

%由高斯正态分布序列g1产生36×4的水印信

%号w0,w0由(0,1)组成。

clear

randn(’state’,1106);

g1=randn(36,4);

fori=1:

36

    forj=1:

4

         ifg1(i,j)〉=0

               w0(i,j)=1;

        elsew0(i,j)=0;

        end;

    end;

end;

figure;

imshow(w0);title('水印');

%对水印信号w0进行(7,4)汉明编码,得到一

%36×7的分组码x0。

x0=w0;

fori=1:

36

   s=8*x0(i,1)+4*x0(i,2)+2*x0(i,3)+x0(i,4);

    switchs

        case0

             x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;

        case1

             x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;

        case2

             x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;

        case3

             x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;

        case4

             x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;

        case5

             x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;

        case6

             x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;

        case7

             x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;

        case8

             x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;

        case9

             x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;

        case10

             x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;

        case11

             x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;

        case12

             x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;

        case13

             x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;

        case14

             x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;

        case15

             x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;

    end;

end;

%对x0进行行向位扩展,得到一个由(—1,1)组成

%的扩展序列y。

cr为扩展因子。

cr=256;

fori=1:

252

    ifx0(i)==1

        y(i,1:

cr)=1;

    elsey(i,1:

cr)=—1;

    end;

end;

y(253:

256,:

)=0;

%以下产生伪随机序列p.为此先设定密钥(1114)

%并产生高斯正态分布序列g2,再由g2产生由(—1,1)

%组成的伪随机序列p。

randn(’state’,1114);

g2=randn(256,256);<

5.17用MATLAB数字图像水印

 

一、引言

随着Internet的普及,信息的安全保护问题日益突出。

如何有效地防止数据的非法复制和鉴别数字媒体的知识产权,成为亟需解决的问题。

1993年Caronni提出了数字水印的概念,并应用于数字图像,此后,研究人员将数字水印的概念扩展到电视图像和声音等领域,数字水印技术作为版权保护的重要手段而得到了广泛的研究和应用。

数字水印技术涉及到大量图像处理算法、数学计算工具等,用普通编程工具实现上述算法将要花费大量的时间.MATLAB语言是MathWorks公司推出的一种简单、高效、功能极强的高级语言,具有高性能数值计算能力和可视化计算环境。

许多复杂的计算问题只需短短的几行代码就可在MATLAB中实现。

本文基于典型的DCT(离散余弦变换)数字水印算法过程,详细介绍用MATLAB实现数字水印的嵌入、提取和攻击测试的方法。

二、数字水印技术

从信号处理的角度看,在载体图像中嵌入数字水印可以视为在强背景(即原始图像)下叠加一个视觉上看不到的弱信号(水印),由于人的视觉系统(HumanVisualSystem,HVS)分辨率受到一定的限制,只要叠加信号的幅度低于HVS的对比度门限,HVS就无法感觉到信号的存在,因此,通过对载体对象作一定的调整,就有可能在不引起人感知的情况下嵌入一些信息。

1。

数字水印的嵌入

水印嵌入就是把水印信号W={ω(κ)}嵌入到原始图像X0={χ0(κ)}中。

水印嵌入过程如图1所示。

 

水印嵌入准则分为:

加法准则:

χW(κ)=χ0(κ)+αω(κ)

乘法准则:

χW(κ)=χ0(κ)(1+αω(κ))

α为强度因子,为了保证在水印不可见的前提下,尽可能提高嵌入水印的强度。

α的选择必须考虑图像的性质和视觉系统的特性。

2。

水印的提取与检测

在某些水印系统中,水印可以被精确地提取出来,这一过程被称作水印提取.例如在完整性确认的应用中,必须能够精确地提取出嵌入的水印,并且通过水印的完整性来确认多媒体数据的完整性。

如果提取出的水印发生了部分的变化,最好还能够通过变化的水印的位置来确定原始数据被篡改的位置。

水印在提取检测时可以需要原始图像的参与,也可以不需要原始图像的参与。

但将水印技术用于图像的网络发布和传播时,如果检测时需要使用原始图像则是个缺陷,因此,当前大多数的水印检测算法不需要原始图像的参与。

图2、图3分别是水印提取和检测的框图,虚线部分表示在提取或判断水印信号时原始图像不是必需的。

 

三、DCT域数字图像水印算法

从技术上讲,目前的数字水印算法可以分成两类:

空域水印算法和频域(变换域)水印算法。

空域水印算法是指将水印信号直接嵌入在原始数据中。

频域水印算法首先将原始的数据进行DCT或小波变换,在频域上嵌入水印信息,然后经反变换输出。

在检测水印时,也要首先对信号作相应的数学变换,然后通过相关运算检测水印。

选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将原始图像进行8×8的分块,将数字水印的灰度值直接植入到原始灰度图像的DCT变换域中,实现水印的嵌入。

具体方法如下:

1。

水印嵌入

设X是M*N大小的原始图像,W是水印图像,大小为P*Q,M和N分别是P和Q的偶数倍.把水印W加载到图像X中,算法分以下几步进行:

将X分解为(M/8)*(N/8)个8*8大小的方块BX(m,n),同时,将W也分解为(M/8)*(N/8)个(8·P/M)*(8·Q/N)大小的方块BW(m,n),1≤m≤M/8,1≤n≤N/8。

对每一个BX(m,n)进行DCT变换:

DBX′(m,n)=DCT(BX(m,n))。

对每一个DBX′(m,n)和BW(m,n),Si为从DBX′(m,n)的中频选出的加载的位置,1≤i≤(8·P/M)*(8·Q/N),ti为水印BW(m,n)的位置坐标1≤i≤(8·P/M)*(8·Q/N)。

DBX″(m,n)(si)=α*BW(m,n)(ti),其中α是加权系数,用DBX″(m,n)(si)来代替DBX′(m,n)(si)得到加载水印后的图像。

对以上得到的每一个DBCI″(m,n)进行逆DCT变换:

IDBX(m,n)=IDCT(DBX″(m,n)).并将各方块IDBX(m,n)合并为一个整图X′,即加载了水印的新图像。

2.水印提取

设图像X′为已经加载了水印的载体图像。

现要将所加载的水印从X′中提取出来.其过程为上述加载水印算法的逆运算:

将X′分为(M/8)*(N/8)个8×8大小的方块BX′(m,n),1≤m≤M/8,1≤n≤N/8。

对每一个BX′(m,n)进行二维DCT反变换:

BX(m,n)=iDCT(BX′(m,n))。

对每一个BX(m,n),按照式BW(m,n)(ti)=1/α*BX(m,n)(si)得到BW(m,n)。

将上面得到的所有BW(m,n)合并成一个整图W。

四、数字水印的嵌入与提取

MATLAB中对一维和二维信号分别提供了各种变换和逆变换函数。

例如dct()、dct2()分别实现一维信号和二维信号的DCT(离散余弦变换),idct()、idct2()分别实现一维信号和二维信号的IDCT(逆向离散余弦变换),它们是实现频域水印算法必不可少的工具。

下面以一个在频域嵌入和提取黑白图像水印程序为例,给出使用MATLAB实现数字水印的过程。

嵌入水印的算法描述:

读取原始图像和黑白水印图像到二维数组I与J;将原始图像I分割为互不覆盖的图像块blockL(x,y),1≤x,y≤8,L=1,2。

..M*M/64,对blockL(x,y)进行DCT变换,得到dct_blockL(u,v);取黑白水印图像中的一个元素J(p,q),嵌入原始图像块的DCT的低频系数中;对嵌入水印信息后的图像块dct_blockL(u',v’)进行反DCT变换;得到blockL(x',y');合并图像块,得到嵌入黑白水印后的图像。

下面是嵌入与提取水印的程序实例,运行结果如图4所示。

%嵌入水印的程序代码

M=256;%原图像长度

N=32;%水印图像长度

K=8;

I=zeros(M,M);J=zeros(N,N);BLOCK=zeros(K,K);

%显示原图像

subplot(3,2,1);I=imread('mona。

bmp','bmp');imshow(I);

title('原始公开图像');

%显示水印图像

subplot(3,2,2);J=imread('flag。

bmp','bmp');imshow(J);title(’水印图像');

%水印嵌入

forp=1:

N

forq=1:

N

x=(p—1)*K+1;y=(q-1)*K+1;

BLOCK=I(x:

x+K-1,y:

y+K—1);BLOCK=dct2(BLOCK);

ifJ(p,q)==0

a=—1;

else

a=1;

end

BLOCK=BLOCK*(1+a*0。

03);BLOCK=idct2(BLOCK);

I(x:

x+K-1,y:

y+K-1)=BLOCK;

end

end

%显示嵌入水印后的图像

subplot(3,2,3);imshow(I);title('嵌入水印后的图像');

imwrite(I,’watermarked。

bmp’,’bmp’);

%从嵌入水印的图像中提取水印

I=imread(’mona',’bmp');

J=imread('watermarked。

bmp’,’bmp');

forp=1:

N

forq=1:

N

x=(p—1)*K+1;

y=(q—1)*K+1;

BLOCK1=I(x:

x+K-1,y:

y+K-1);

BLOCK2=J(x:

x+K—1,y:

y+K—1);

BLOCK1=idct2(BLOCK1);

BLOCK2=idct2(BLOCK2);

a=BLOCK2(1,1)/BLOCK1(1,1)-1;

ifa〈0

W(p,q)=0;

else

W(p,q)=1;

end

end

end

%显示提取的水印

subplot(3,2,4);

imshow(W);

title(’从含水印图像中提取的水印');

 

图4 基于DCT变换的水印嵌入与提取

五、水印攻击测试

由于数字水印在实际应用中可能会遭到各种各样的攻击,因此对算法进行攻击测试是衡量一个水印算法优劣的重要手段。

下面是一个水印攻击与水印提取的程序实例,首先对嵌入水印后的图像进行JPEG压缩(一种水印攻击),而后从压缩的图像中提取出水印,如图5所示。

从图5中可以看到DCT域的水印算法抵抗JPEG压缩攻击的效果是比较好的。

图5 图像压缩后提取的水印

%水印攻击测试

M=256;N=32;K=8;

I=zeros(M,M);J=zeros(M,M);w=zeros(N,N);

BLOCK1=zeros(K,K);BLOCK2=zeros(K,K);

%对嵌入水印后的图像进行JPEG压缩

L=imread(’watermarked.bmp',’bmp’);

imwrite(L,'attack.jpg','jpeg','Quality',45);

J=imread('attack。

jpg’,’jpeg');

subplot(3,2,5);imshow(J);title(’压缩后的图像’);

I=imread('mona','bmp');

%从压缩的图像中提取水印

forp=1:

N

forq=1:

N

x=(p-1)*K+1;y=(q—1)*K+1;

BLOCK1=I(x:

x+K—1,y:

y+K-1);

BLOCK2=J(x:

x+K—1,y:

y+K-1);

BLOCK1=idct2(BLOCK1);

BLOCK2=idct2(BLOCK2);

a=BLOCK2(1,1)/BLOCK1(1,1)—1;

ifa<0

W(p,q)=0;

else

W(p,q)=1;

end

end

end

%显示提取的水印

subplot(3,2,6);imshow(W);title(’从经过压缩的图像中提取的水印’);

六、结语

从图4中可明显看出:

嵌入水印信息后,原图与嵌入水印信息后的图像在视觉效果上没有明显分别,用肉眼几乎分辨不出,这说明这种算法充分利用了人眼的视觉HVS特性,利用DCT域嵌入水印后,水印的不可见性相当好,图像在嵌入水印前后视觉效果改变不大,不影响图像的正常使用。

从图5可明显看出:

嵌入水印后的图像经过参数“Quality”为“45"的JPEG压缩后,还能从中提取出较清晰的水印信息,可见,这种嵌入算法的抗攻击性较好,而且检测和提取易于实现。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1