数字水印 DCT域 联系客服

发布时间 : 星期五 文章数字水印 DCT域更新完毕开始阅读0e0aa8fc10661ed9ad51f3ea

i≤(8P/M)×(8Q/N), t(i)为水印V的位置坐标 , 1≤i≤(8P/M)×(8Q/N),DB’(s)=A×V,其中A是加权系数,用DB’(s)来代替DB,得到加载水印后的图像DBC;

4. 对以上得到的每一个DBC进行逆DCT变换:IDBC=IDCT(DBC)并将各方块IDBC合并为一个整图’I’,即加载了水印的新图像。

8*8分块8*8分块DCT变换DCT变换选择加载位置设置嵌入深度水印嵌入IDCT变换嵌入水印后图像DCT变换提取每块中水印信息合并分块水印得到完整水印

7

3.4离散余弦变换水印提取算法

设图像D为已经加载了水印的载体图像,现要将所加载的水印从D中提取出来,其过程为上述加载水印算法的逆运算:

1. 将D分解为(M/8)×(N/8)个8×8大小的方块BD; 2. 对每一个BD进行二维DFT变换:DBD=DCT(BD); 3. 提取数据对每一个DBD,按照式V’=1/A×DBD得到V’; 4. 将上面得到的所有V’合并成一个水印整图J’。

3.5DCT算法的matlab程序运行

size=512; N=32;K=8; D=zeros(size);E=0.01; Y1=imread('22.jpg'); I=rgb2gray(Y1);

subplot(2,3,1);%将彩色图像变成灰度图像 imshow(Y1); title('原始图像');

I=double(I)/512;%读入水印 J=imread('444.bmp'); subplot(2,3,2); imshow(J); title('水印图像');

%对水印缩放

J=double(imresize(J,[64,64])); subplot(2,3,3); imshow(J);

title('缩放水印图像'); %嵌入水印

for p=1:size/K %为待嵌入水印的变换域的行坐标 for q=1:size/K

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

I_dct=I(x:x+K-1,y:y+K-1);%将原图分成8*8的子块 I_dct1=dct2(I_dct);%对子块进行DCT变换 if J(p,q)==0 alfa=0; else alfa=0.05; end

I_dct2=I_dct1+alfa*E; I_dct=idct2(I_dct2);

8

D(x:x+K-1,y:y+K-1)=I_dct; end end

subplot(2,3,4); imshow(D,[]); title('含水印的图象');

%%%%%%对加入水印的图像进行各种攻击 %%%低通滤波攻击

hh=fspecial('gaussian',3,0.1); %hh=fspecial('gaussian',3,0.35); % hh=fspecial('gaussian',3,0.4); QQ=filter2(hh,D);

% 提取水印

for p=1:size/K for q=1:size/K x=(p-1)*K+1; y=(q-1)*K+1;

I1=I(x:x+K-1,y:y+K-1); I2=QQ(x:x+K-1,y:y+K-1); I_dct1=dct2(I1); I_dct2=dct2(I2); if I_dct2>I_dct1 W(p,q)=1; else W(p,q)=0; end end end

subplot(2,3,5);imshow(hh,[]);title('低通滤波攻击'); subplot(2,3,6);imshow(W,[]);title('图像中提取的水印');

3.6 仿真结果

1、低通滤波攻击

hh=fspecial('gaussian',3,0.1);

9

2、低通滤波攻击

hh=fspecial('gaussian',3,0.3);

10