基于MATLAB的DCT域数字图像水印的实现.ppt
文本预览下载声明
一种基于MATLAB的DCT域数字图像水印的实现 3 水印的嵌入与提取原理: 4 一种DCT域数字水印的具体算法: 实现水印的嵌入,具体方法如下: (1)读取原始图像和黑白水印图像到二维数组M与W; (2)将原始图像M分割为互不覆盖的图像块block(x,y),1x,y8,对block(x,y)进行DCT变换,得到block_dct (x,y); (3)取黑白水印图像中的一个元素W(p,q)嵌入原始图像块的低频系数中; (4)对嵌入水印信息后的图像块block_dct(x,y)进行逆DCT变换; (5)合并图像块,得到嵌入黑白水印后的图像。 水印提取过程为: 整个水印算法经Matlab实现运行的程序如下: 附图 1数字水印的特征: 不可感知性。数字水印的嵌入不应使原始数据发生可感知的改变,也不能使被保护数据在质量上发生可以感觉到的失真。 鲁棒性。生成的水印应当具有经受各种常用的信号处理、压缩和解压及抗攻击的能 力。鲁棒性描述了水印对攻击的抵抗能力, 通常用比特差错率或检验错误来度量。 安全性。数字水印应该难以被伪造或者加工,并且未经授权的个体不得阅读和修改水印。 可证明性。允许对媒体添加水印, 并能证明其存在性。 无歧义性。恢复出的水印对水印判决结果能够表明版权的惟一。 2基于DCT域的数字图像水印的基本原理 离散余弦变换(Discrete Cosine Transform)简称为DCT,是一种频域变换, 计算速度较快, 很适合于做图像转换、压缩和随机信号处理等方面。 DCT变换的基本思路是将图像分解为88的子块或1616的子块, 并对每一个子块进行单独的DCT变换, 然后对变换结果进行量化、编码。随着子块尺寸的增加, 算法的复杂度急剧上升, 因此,通常采用88的子块进行变换, 但采用较大的子块可以明显减少图像分块效应。 在图像处理中一般使用的是二维DCT变换,对一幅NN图像,它的DCT变换公式为: 二维DCT的逆变换公式为: 利用此公式可以恢复出原来的图像。 一种DCT域水印的嵌入(图1)与提取(图2)示意图: dct逆变换 图1 一种DCT域的水印嵌入示意图 8*8dct变换 原始图像 水印嵌入 水印化 的图像 8*8dct变换 水印图像 + dct逆变换 水印图像 水印提取 8*8的dct变换 8*8的dct变换 水印化的图像 原始图像 图2 一种DCT域的水印提取示意图 - (1)读取嵌入黑白水印化的图像,并对图像进行分块; (2)对每一图像块进行逆DCT变换,得到嵌入水印后的图像块block_dct(x,y); (3)从每一图像块block_dct(x,y)提取出黑白水印元素W(p,q),并进行DCT变换; (4)合并图像块,得到原来的黑白水印图像。 clear;close all size=256;block=8;C=zeros(size); M=imread(E:\lena256.jpg); figure(1);imshow(M); title(原始图像); M=double(M)/256; W=imread(E:\hxx.png); figure(2);imshow(W); title(水印图像); R=double(imresize(W,[32,32])); figure(3);imshow(R); title(调整后的水印图像); for p=1:32 for q=1:32 x=(p-1)*block+1;y=(q-1)*block+1; block_dct=M(x:x+block-1,y:y+block-1); block_dct=dct2(block_dct); if R(p,q)==0 a=-1; else a=1; end block_dct(1,1)=block_dct(1,1)*(1+a*0.01); block_dct=idct2(block_dct); C(x:x+block-1,y:y+block-1)=block_dct; end end figure(4);imshow(C,[]); title(提取出来的水印图像); %嵌入水印 %提取水印 for p=1:32 for q=1:32 x=(p-1)*block+1; y=(q-1)*block+1; if(C(x,y)-M(x,y))0
显示全部