资源描述:
《基于DWT数字水印源码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DWT水印源码1%DWT水印源码%完全根据DCT1修改,只为了抛砖引玉%人生在于尝试,快乐。%有错误的地方希望大家指正%嵌入源码clcclearall;%保存开始时间start_time=cputime;k=20; blocksize=8; %设置块的大小%读入原图像file_name='_lena_std_bw.bmp';cover_object=double(imread(file_name));%原图像的行数与列数Mc=size(cover_object,1); %原图像行数Nc=size(cover_object,2); %原图像列数%
2、最大嵌入信息量max_message=Mc*Nc/(blocksize^2);%读入水印图像file_name='c.bmp';message=double(imread(file_name));%%水印图像的行数与列数Mm=size(message,1); %水印行数Nm=size(message,2); %水印列数message_vector=reshape(message,1,Mm*Nm);%检查水印信息是否过大if(Mm*Nm>max_message) error('水印太大')end%将随机数发生器的状态置为1100randn
3、('state',1100);%产生watermarked_image,并写入原图信息watermarked_image=cover_object;%将图像分块嵌入%当(2,2)>(2,3)且message_pad(kk)=0%当(2,2)<(2,3)且message_pad(kk)=1%%经过分析可以得出结论:在提取水印时,如果cD1(2,2)>cD1(2,3)便是嵌入了水印的黑色像素,%%反之则是嵌入了白色像素x=1;y=1;h=waitbar(0,'嵌入水印,请等待');for(kk=1:length(message_vector)) %对块进行DWT变
4、换 [cA1,cH1,cV1,cD1]=dwt2(cover_object(x:x+blocksize-1,y:y+blocksize-1),'haar'); a=cD1; %如果message_pad(kk)==0 if(message_vector(kk)==0) %且(2,2)<(2,3),交换它们 if(cD1(2,2)5、vector(kk)==1) %且(2,2)>(2,3),交换它们 if(cD1(2,2)>=cD1(2,3)) temp=cD1(2,3); cD1(2,3)=cD1(2,2); cD1(2,2)=temp; end end %检查(2,2),(2,3)的差是否>=k ifcD1(2,2)>cD1(2,3) ifcD1(2,2)-cD1(2,3)6、(2,2)=Nc x=1; y=y+blocksize; else x=x+blocksize; end waitbar(kk/length(message_vector),h);
7、endclose(h);%转换为uint8并写入dwt_watermarked.bmpwatermarked_image_uint=uint8(watermarked_image);imwrite(watermarked_image_uint,'dwt_watermarked.bmp','bmp');%显示运行时间elapsed_time=cputime-start_time,%计算psnr值psnr=psnr(cover_object,watermarked_image),%显示图像figure(1)imshow(message,[]);title('水印'
8、);figure(2)subplot(