第二章 离散余弦变换(DCT)算法的介绍
8×8分块
DCT变换
提取每块的水印信息
合并分块水印得到完整水印
2.5分块的离散傅里叶变换
1. 离散傅里叶变换
在图象处理的广泛领域中,傅里叶变换起着非常重要的作用,包括图象增强、图象分析、图象复原和图象压缩等。在图象数据的数字处理中常用的是二维离散傅里叶变换,它能把空间时域的图象变换到空间频域上进行研究,从而能很容易的了解到图象的各个空间频域成分,进行相应的处理。
- 26 -
第二章 离散余弦变换(DCT)算法的介绍
2.水印嵌入算法
数字图像水印算法选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将载体图像进行8×8的分块,将数字水印的灰度值直接植入到载体灰度图像的DFT变换域中,实现水印的嵌入。具体方法如下: 设I是M×N大小的原始图像,J是水印图像大小为P×Q,M和N分别是P和Q的偶数倍,把水印J加载到图像I中,算法分以下几步进行:
1. 将I分解为(M/8)×(N/8)个8×8大小的方块B;同时,J也分解为 (M/8)×(N/8)个(8P/M)×(8Q/N)大小的方块V; 2. 对每一个B进行DFT变换:DB=DFT(B);
3. 加载水印对每一个DB和V,s(i)为从DB的中频选出的加载的位置 , 1≤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进行逆DFT变换:IDBC=IDFT(DBC)并将各方块IDBC合并为一个整图I’,即加载了水印的新图像。
3.水印提取算法
设图像D为已经加载了水印的载体图像,现要将所加载的水印从D中提取出来,其过程为上述加载水印算法的逆运算:
1. 将D分解为(M/8)×(N/8)个8×8大小的方块BD; 2. 对每一个BD进行二维DFT变换:DBD=DFT(BD); 3. 提取数据对每一个DBD,按照式V’=1/A×DBD得到V’; 4. 将上面得到的所有V’合并成一个水印整图J’。
- 27 -
第三章 离散余弦变换(DCT)算法的MATLAB程序及运行结果比较
第三章 离散余弦变换(DCT)算法的MATLAB程序及运行
结果比较
3.1 MATLAB程序
1 size=512; N=32;K=8; D=zeros(size);E=0.01; 2 I=imread('f:\\lena.bmp'); 3 subplot(2,2,1); 4 imshow(I); 5 title('原始图像');
6 I=double(I)/512;%读入水银 7 J=imread('f:\\1234.bmp'); 8 subplot(2,2,2); 9 imshow(J); 10 title('水印图像'); 11 %对水印缩放
12 J=double(imresize(J,[64,64])); 13 subplot(2,2,3); 41 imshow(J);
15 title('缩放水印图像'); 16 %嵌入水印 17 for p=1:size/K
- 28 -
第三章 离散余弦变换(DCT)算法的MATLAB程序及运行结果比较
18 for q=1:size/K
19 x=(p-1)*K+1; y=(q-1)*K+1; 20 I_dct=I(x:x+K-1,y:y+K-1); 21 I_dct1=dct2(I_dct); 22 if J(p,q)==0 23 alfa=-1; 24 else 25 alfa=1; 26 end
27 I_dct2=I_dct1+alfa*E; 28 I_dct=idct2(I_dct2); 29 D(x:x+K-1,y:y+K-1)=I_dct; 30 end 31 end
32 subplot(1,3,3); 33 imshow(D,[]); 34 Title('含水印的图象');
35 %%%%%%对加入水印的图像进行各种攻击 36 %%%低通滤波攻击
37 %hh=fspecial('gaussian',3,0.2); 38 %hh=fspecial('gaussian',3,0.35); 39 %hh=fspecial('gaussian',3,0.4);
- 29 -
第三章 离散余弦变换(DCT)算法的MATLAB程序及运行结果比较
40 QQ=filter2(hh,D); 41%%%旋转攻击
42 R=imrotate(D,10,'bilinear','crop'); 43 %R=imrotate(D,20,'bilinear','crop'); 44 %R=imrotate(D,45,'bilinear','crop'); 45 %%%%%剪切攻击
46 %D(1:32,1:32)=0; Q2=D; 47 %D(1:64,1:64)=0; Q2=D; 48 %D(1:128,1:128)=0; Q2=D; 49 % 提取水印 50 for p=1:size/K 51 for q=1:size/K 52 x=(p-1)*K+1; 53 y=(q-1)*K+1;
54 I1=I(x:x+K-1,y:y+K-1); 55 I2=QQ(x:x+K-1,y:y+K-1); 56 I_dct1=dct2(I1); 57 I_dct2=dct2(I2); 58 if I_dct2>I_dct1 59 W(p,q)=1; 60 else
61 W(p,q)=0;
- 30 -