数字水印算法设计说明书_第1页
数字水印算法设计说明书_第2页
数字水印算法设计说明书_第3页
数字水印算法设计说明书_第4页
数字水印算法设计说明书_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.5旋转攻击旋转已嵌入水印的图片,进行旋转攻击后,再从中提取水印信息,旋转程序如下所示,并求攻击后水印图像的PSNR和NC参数。a1=imread<'withmark.bmp'>;%读取含水印的图像WImage6=a1;WImage6=imrotate<WImage6,10,'bilinear','crop'>;WImage6cl=WImage6;figure<2>;subplot<1,3,1>;imshow<WImage6cl>;title<'旋转10度后图像'>;figure<1>;M1=WImage6cl;水印的提取程序如上面的3.2节的程序,程序运行后结果如下图所示。图4-5-1含水印图像经旋转后,必然和原图想有很大区别,所以其峰值信噪比很小,PSNR=2.9324,同时已经不能提取出的明显的水印图像,水印信息有很大损失,与原始图像相关系数NC=0.48026,NC值较小,可见该水印算法抗旋转攻击的能力较弱。5小结与体会离散余弦变换在图像处理中的作用非常重要,在本设计中,运用离散余弦变换嵌入水印,是嵌入在原图像的低频部分。本文提出的水印算法的鲁棒性虽然不及一些需要原图的水印算法,但是相比而言不需要未加水印的原始图像,而且这种算法可以抵抗一些常见的攻击方法,如:旋转、裁减。低通滤波等等。如果通过直方图均衡的预处理,还可以提高算法的性能,实验证明此算法有较好的鲁棒性。嵌入水印的图像还是比较清晰的,这说明离散余弦变换法还是具有实用价值的。当不加任何攻击时,提取的水印非常清晰,和源图像相似程度高达99.55%!这种算法对低通滤波攻击和剪切攻击来说,提取水印的效果还是比较好的;但对于旋转攻击和剪切攻击来说,效果却并不理想。当旋转和剪切攻击,水印就提不出来了。这证明离散余弦变换还是具有一定的局限性的。数字水印的方法有很多,但是每一种单独的方法都无法禁得起多种方法的图像处理,只有组合不同的方法才能达到更好的效果。程序使用了最一般的循环语句,而没有考虑到代码的优化。在本论文中,程序的执行花销时间很少,但若是图像比较大的话,是一定要考虑代码优化问题的。特别是for循环,当采用向量化循环方法将使运行时间成百上千倍的缩减!另外也没有考虑预分配数组的问题,当加入预分配数组后,运行时间也会明显缩短,而且会使内存有较大的连续空间。参考文献[1]孙圣和.数字水印技术及应用.科学出版社.2004[2]罗军辉.MATLAB7.0在图像处理中的应用.机械出版社.2005[3]王家文.MATLAB7.0编程基础.机械出版社.2005[4]钟麟.MATLAB仿真技术与应用教程.国防工业出版社.2004[5]冈萨雷斯.数字图像处理<MATLAB版>.电子工业出版社.2005[6]董绍峰.视频数字水印技术研究[D].XX电子科技大学.2006附录MATLAB主程序如下:clearall;clc;start_time=cputime;%%%%%%%%%%%%读取水印图像%%%%%%%%I=imread<'mark.bmp'>;I=rgb2gray<I>;I=double<I>/255;I=ceil<I>;%向正方向取整数%%%%%%%%%%显示水印图像%%%%%%%%%%%%%figure<1>;subplot<1,3,2>;imshow<I>,title<'水印图像'>dimI=size<I>;%返回数组尺寸,dimI为一个二维数组rm=dimI<1>;cm=dimI<2>;%%%%%%以下生成水印信息%%%%%%%%%%mark=I;alpha=20,%加权系数k1=randn<1,8>;%产生随机项矩阵k2=randn<1,8>;a0=imread<'lena.bmp'>;psnr_cover=double<a0>;figure<1>;subplot<1,3,1>;imshow<a0,[]>,title<'原始图像'>;[r,c]=size<a0>;cda0=blkproc<a0,[8,8],'dct2'>;%分块处理图片,进行DCT变换%%%%%%%%%%%%%%嵌入%%%%%%%%%%%%%%%cda1=cda0;%cda1=512_512fori=1:rm%i=1:64forj=1:cm%j=1:64x=<i-1>*8;y=<j-1>*8;ifmark<i,j>==1k=k1;elsek=k2;endcda1<x+1,y+8>=cda0<x+1,y+8>+alpha*k<1>;cda1<x+2,y+7>=cda0<x+2,y+7>+alpha*k<2>;cda1<x+3,y+6>=cda0<x+3,y+6>+alpha*k<3>;cda1<x+4,y+5>=cda0<x+4,y+5>+alpha*k<4>;cda1<x+5,y+4>=cda0<x+5,y+4>+alpha*k<5>;cda1<x+6,y+3>=cda0<x+6,y+3>+alpha*k<6>;cda1<x+7,y+2>=cda0<x+7,y+2>+alpha*k<7>;cda1<x+8,y+1>=cda0<x+8,y+1>+alpha*k<8>;endend%%%%%嵌入水印后图像%%%%%%%%%%%%%%a1=blkproc<cda1,[8,8],'idct2'>;%分块处理图片,IDCT变换a_1=uint8<a1>;imwrite<a_1,'withmark.bmp','bmp'>;figure<1>;subplot<1,3,3>;imshow<a1,[]>,title<'嵌入水印后的图像'>;disp<'嵌入水印处理时间'>;embed_time=cputime-start_time,%%%%%%攻击实验测试鲁棒性%%%%%%%%%%%disp<'对嵌入水印的图像的攻击实验,请输入选择项:'>;disp<'1--添加白噪声'>;disp<'2--高斯低通滤波'>;disp<'3--JPEG压缩'>;disp<'4--图像剪切'>;disp<'5--旋转10度'>;disp<'6--直接检测水印'>;disp<'其他--不攻击'>;d=input<'请输入选择〔1-6:'>;start_time=cputime;figure<1>;switchdcase6figure<2>;subplot<1,3,1>;imshow<a1,[]>;title<'未受攻击的含水印图像'>;M1=a1;case1WImage2=a1;noise0=20*randn<size<WImage2>>;WImage2=WImage2+noise0;figure<2>;subplot<1,3,1>;imshow<WImage2,[]>;title<'加入白噪声后图像'>;M1=WImage2;M_1=uint8<M1>;imwrite<M_1,'whitenoise.bmp','bmp'>;case2WImage3=a1;H=fspecial<'gaussian',[4,4],0.2>;WImage3=imfilter<WImage3,H>;figure<2>;subplot<1,3,1>;imshow<WImage3,[]>;title<'高斯低通滤波后图像'>;M1=WImage3;M_1=uint8<M1>;imwrite<M_1,'gaussian.bmp','bmp'>;case3WImage5=a1;WImage5=im2double<WImage5>;cnum=10;dctm=dctmtx<8>;P1=dctm;P2=dctm.';imageDCT=blkproc<WImage5,[8,8],'P1*x*P2',dctm,dctm.'>;DCTvar=im2col<imageDCT,[8,8],'distinct'>.';n=size<DCTvar,1>;DCTvar=<sum<DCTvar.*DCTvar>-<sum<DCTvar>/n>.^2>/n;[dum,order]=sort<DCTvar>;cnum=64-cnum;mask=ones<8,8>;mask<order<1:cnum>>=zeros<1,cnum>;im88=zeros<9,9>;im88<1:8,1:8>=mask;im128128=kron<im88<1:8,1:8>,ones<16>>;dctm=dctmtx<8>;P1=dctm.';P2=mask<1:8,1:8>;P3=dctm;WImage5=blkproc<imageDCT,[8,8],'P1*<x.*P2>*P3',dctm.',mask<1:8,1:8>,dctm>;WImage5cl=mat2gray<WImage5>;figure<2>;subplot<1,3,1>;imshow<WImage5cl>;title<'经JPEG压缩后图像'>;M1=WImage5cl;case4WImage4=a1;%WImage4<1:64,1:512>=512;%WImage4<224:256,1:256>=256;%WImage4<1:256,224:256>=256;WImage4<1:512,1:32>=256;WImage4cl=mat2gray<WImage4>;figure<2>;subplot<1,3,1>;imshow<WImage4cl>;title<'部分剪切后图像'>;figure<1>;M1=WImage4cl;%M_1=uint8<M1>;%imwrite<M_1,'cutpart.bmp','bmp'>;case5WImage6=a1;WImage6=imrotate<WImage6,10,'bilinear','crop'>;WImage6cl=mat2gray<WImage6>;figure<2>;subplot<1,3,1>;imshow<WImage6cl>;title<'旋转10度后图像'>;figure<1>;M1=WImage6cl;otherwisedisp<'你输入的是无效数字,图像未受攻击,将直接检测水印'>;figure<2>;subplot<1,3,1>;imshow<a1,[]>;title<'未受攻击的含水印图像'>;M1=a1;end%%%%%%%%%%%%提取水印%%%%%psnr_watermarked=M1;dca1=blkproc<M1,[8,8],'dct2'>;p=zeros<1,8>;fori=1:dimI<1>forj=1:dimI<2>%j=1:64x=<i-1>*8;y=<j-1>*8;p<1>=dca1<x+1,y+8>;p<2>=dca1<x+2,y+7>;p<3>=dca1<x+3,y+6>;p<4>=dca1<x+4,y+5>;p<5>=dca1<x+5,y+4>;p<6>=dca1<x+6,y+3>;p<7>=dca1<x+7,y+2>;p<8>=dca1<x+8,y+1>;%sd1=sum<sum<p.*k1>>/sqrt<sum<sum<p.^2>>>;%sd2=sum<sum<p.*k2>>/sqrt<sum<sum<p.^2>>>;%ifsd1>sd2ifcorr2<p,k1>>corr2<p,k2>%,warningoffMATLAB:divideByZero;mark1<i,j>=1;elsemark1<i,j>=0;endendendfigure<2>;subplot<1,3,2>;imshow<mark1,[]>,title<'提取的水印图像'>;imwrite<mark1,'getmark.bmp','bmp'>;subplot<1,3,3>;imshow<mark>,title<'原始水印图像'>;title<strcat<num2str<'原始水印图像'>>>;%%%%time%%%%%%%disp<'攻击与提取处理时间'>attack_recover_time=cputime-start_time,%%%%%计算PSNR值%%%%%%%disp<'载体图像与含水印图像峰值信噪比'>PSNR=psnr<psnr_cover,psnr_watermarked,c,r>,subplot<1,3,1>;xlabel<strcat<'PSNR=',num2str<PSNR>>>;%%%%%%%计算NC值%%%%%%%%%%disp<'原水印图像与提取水印图像互相关系数'>NC=nc<mark1,mark>,subplot<1,3,2>;xlabel<strcat<'NC=',num2str<NC>>>;峰值信噪比PSNR的计算程序如下:function[A]=psnr<image,image_prime,M,N>image=double<image>;%converttodoublesimage_prime=double<image_prime>;if<<sum<sum<image-image_prime>>>==0>%avoiddividebyzeronasti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论