基于DCT域的水印嵌入和提取(共7页).doc

上传人:飞****2 文档编号:13816314 上传时间:2022-05-01 格式:DOC 页数:7 大小:284KB
返回 下载 相关 举报
基于DCT域的水印嵌入和提取(共7页).doc_第1页
第1页 / 共7页
基于DCT域的水印嵌入和提取(共7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《基于DCT域的水印嵌入和提取(共7页).doc》由会员分享,可在线阅读,更多相关《基于DCT域的水印嵌入和提取(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上14电信 温美松 9、 基于DCT域的水印算法此程序对原始图像以及水印图像有一定要求:1) 原始图像不能有大片灰度均匀的地方,否则大量子块方差相等,嵌入时标记、提取时比对,都会错乱;2) 原始图像长、宽是8的整数倍最好;3) 水印图像总像素点必须少于原始图像8*8子块数,最好是通过MATLAB查看原始图像方最大且不等的前n块,限制水印图像总像素点小于等于n。MATLAB函数嵌入:clcclear allk = 20;block_size = 8;DCT_coef = 0,0,0,1,1,1,1,0; 0,0,1,1,1,1,0,0; 0,1,1,1,1,0,0,0;

2、1,1,1,1,0,0,0,0; 1,1,1,0,0,0,0,0; 1,1,0,0,0,0,0,0; 1,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0;orig_image = double(imread(woman2.jpg);%原始图像orig_image_show = orig_image;%用于显示原图Hc,Wc = size(orig_image);c = Hc/8;d = Wc/8;m = c*d;% 将原图分为m个8*8块 watermark = double(imread(wenmeisong.jpg);%水印图像,白色为目标watermark_show = w

3、atermark;%用于显示水印Hm,Wm = size(watermark);%水印尺寸n = Hm*Wm;%水印图像总像素点n%reshape将水印按列重组为一维向量%round将序列四舍五入,通过除以256将watermark转为0(背景)、1(目标)二值watermark = round(watermark./256);watermark = reshape(watermark,1,Hm*Wm);xx = 1;mean = zeros(1,c*d);%预先分配内存variance = mean;%预先分配内存%求方差for j = 1:c for i = 1:d mean(xx)=1/

4、64*sum(sum(orig_image(1+(j-1)*8):j*8),(1+(i-1)*8):i*8); variance(xx)=1/64*sum(sum(orig_image(1+(j-1)*8:j*8,1+(i-1)*8:i*8)-mean(xx).2); xx = xx+1; endend%将方差升序排列存于A,长度为c*d,即子块数mA = sort(variance); % 16506A = fliplr(A);%最终降序排列%取出方差最大的前n块,长度为n,即水印像素数B = A(1:n);%标记水印信息到方差最大的前n块variance_o = zeros(1,c*d);

5、for g = 1:n for h = 1:c*d if B(g) = variance(h) variance_o(h) = watermark(g); h = c*d; end endendwatermark_vector = variance_o;watermarked_image = orig_image;%准备嵌入的图像%设置MATLAB随机数生成器状态J,作为系统秘钥K%MATLAB只要知道初始状态,就确定唯一的伪随机序列rand(state,7);%根据当前的随机数生成器状态,生成0、1的伪随机序列,长度为22pn_sequence_zero = round(rand(1,sum

6、(sum(DCT_coef);%嵌入水印x=1;y=1;for kk=1:m %一共m个子块 %分块DCT变换 dct_block = dct2(orig_image(y:(y+block_size-1),x:(x+block_size-1); %纹理大并且被标示的水印信息为1(目标)的块在DCT中频系数嵌入伪随机序列 zz=1; if watermark_vector(kk)=1; for ii=1:block_size for jj=1:block_size if (DCT_coef(jj,ii)=1) dct_block(jj,ii)=dct_block(jj,ii)+pn_sequen

7、ce_zero(zz)*k; zz=zz+1; end end end end %分块DCT逆变换 watermarked_image(y:(y+block_size-1),x:(x+block_size-1)=idct2(dct_block); if (x+block_size)Wc x=1; if(y+block_size)Hc y=1 else y=y+block_size; end else x=x+block_size; endendwatermarked_image_int=uint8(watermarked_image);%生成并输出嵌入水印后的图像imwrite(waterma

8、rked_image_int,dct2_A.jpg,jpg);%显示嵌入水印后的图像figure(1);subplot(131)imshow(orig_image_show,)xlabel(原图像);subplot(132)imshow(watermark_show,);xlabel(水印图像)subplot(133)imshow(watermarked_image_int,);xlabel(嵌入水印后的图像) 实验结果: MATLAB程序提取水印:clcclear allblock_size = 8;%zig_zag扫描位置DCT_coef=0,0,0,1,1,1,1,0; 0,0,1,1,

9、1,1,0,0; 0,1,1,1,1,0,0,0; 1,1,1,1,0,0,0,0; 1,1,1,0,0,0,0,0; 1,1,0,0,0,0,0,0; 1,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; orig_image = double(imread(woman2.jpg);%读入原始载体图像 watermarked_image = double(imread(dct2_A.jpg);%待检测图像 Hw,Ww=size(watermarked_image);%待检测图像尺寸 c = Hw/8; d = Ww/8; m = c*d; orig_watermark = do

10、uble(imread(shuiyinsong3.jpg);%读入原水印 Ho,Wo = size(orig_watermark); n = Ho*Wo; %设置相同的随机数生成器状态J,作为检测时的系统秘钥 %生成相同伪随机序列,长度同为22 rand(state,7); pn_sequence_zero = round(rand(1,sum(sum(DCT_coef); %提取水印 x=1; y=1; for kk = 1:m %m个子块 %对待检测图像进行分块DCT变换 dct_block1 = dct2(watermarked_image(y:(y+block_size-1),x:(x

11、+block_size-1); %对原始图像进行分块DCT变换 dct_block2 = dct2(orig_image(y:(y+block_size-1),x:(x+block_size-1); tt=1; for ii = 1:block_size for jj = 1:block_size if DCT_coef(jj,ii)=1 %取出DCT中频区域的信息 sequence(tt) = dct_block1(jj,ii)-dct_block2(jj,ii); tt = tt+1; end end end %计算相关性 if sequence = 0; correlation(kk)

12、= 0; else correlation(kk) = corr2(pn_sequence_zero,sequence); end %换行 if x+block_size Ww x = 1; if y+block_size Hw y=1; else y = y+block_size; end else x = x+block_size; end end %相关性大于0.5嵌入,否则表明未被嵌入 for kk = 1:m if correlation(kk)=0.5 watermark_vector(kk) = 1; else watermark_vector(kk) = 0; end end

13、%计算原始图像的方差 xx = 1; for j = 1:c for i = 1:d mean(xx)=1/64*(sum(sum(orig_image(1+(j-1)*8):j*8),(1+(i-1)*8):i*8); variance(xx)=1/64*sum(sum(orig_image(1+(j-1)*8:j*8),(1+(i-1)*8:i*8)-mean(xx).2); xx = xx+1; end end %取出方差最大的前N块 A = sort(variance); A = fliplr(A);%最终降序排列 B = A(1:n); %根据原始图像方差最大的前N块的位置把水印信息

14、提取出来 variance_o = zeros(1,n); for g = 1:n for h = 1:m if B(g) = variance(h) variance_o(g) = watermark_vector(h); h = m; end end end watermark_o = variance_o; %重组水印信息 watermark = reshape(watermark_o(1:Ho*Wo),Ho,Wo); %计算提取的水印和原始图像的相似度 %sim = corr2(orig_watermark,watermark); %把提取的水印信息保存 imwrite(waterma

15、rk,watermark.jpg,jpg); figure; subplot(211) imshow(orig_watermark,); xlabel(原水印图像); subplot(212) imshow(watermark,) xlabel(提取出的水印图像);实验结果:提取出的水印,左侧与原图几乎一致,中间略有失真,右侧失真较大。这是因为,通过查看MATLAB数据信息,可以发现原始图像中方差最大的前n块中,仅有前面一部分是完全不相等,中间偶尔有几个子块的方差相等,最后经常出现方差相等的情况。故而在嵌入标记与提取比对时,B(g) = variance(h)这一条件,会导致不同B(g)匹配同一variance(h)。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁