当前位置:首页 > 数字水印 DCT域
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
共分享92篇相关文档