基于DWT数字水印源码_第1页
基于DWT数字水印源码_第2页
基于DWT数字水印源码_第3页
基于DWT数字水印源码_第4页
基于DWT数字水印源码_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上DWT水印源码1%DWT水印源码%完全根据DCT1修改,只为了抛砖引玉%人生在于尝试,快乐。%有错误的地方希望大家指正%嵌入源码clcclear all;% 保存开始时间start_time=cputime;k=20;       blocksize=8;   % 设置块的大小% 读入原图像file_name='_lena_std_bw.bmp'cover_object=double(imread(file_name);% 原图像的行数与列数Mc=size(cover_object,1);   

2、0;     %原图像行数Nc=size(cover_object,2);         %原图像列数% 最大嵌入信息量max_message=Mc*Nc/(blocksize2);% 读入水印图像file_name='c.bmp'message=double(imread(file_name);%水印图像的行数与列数Mm=size(message,1);               %水印行数Nm=size(message,2);  

3、            %水印列数message_vector=reshape(message,1,Mm*Nm);% 检查水印信息是否过大if (Mm*Nm> max_message)  error('水印太大')end%将随机数发生器的状态置为1100randn('state',1100);% 产生watermarked_image,并写入原图信息watermarked_image=cover_object;% 将图像分块嵌入% 当 (2,2) > (2,3) 且 message

4、_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变换  cA1,cH1,cV1,cD1 = dwt2(cover_object(x:x+blocksize-1,y:y+blocksize-1),'haar');

5、  a=cD1;  % 如果 message_pad(kk)= 0  if (message_vector(kk) = 0)    % 且(2,2) < (2,3) ,交换它们    if (cD1(2,2) < cD1(2,3)          temp=cD1(2,3);          cD1(2,3)=cD1(2,2);          cD1(2,2

6、)=temp;    end    % 如果message_pad(kk) = 1,   elseif (message_vector(kk) = 1)        % 且(2,2) > (2,3) ,交换它们    if (cD1(2,2) >= cD1(2,3)          temp=cD1(2,3);          cD1(2,3)=cD1(2,2);

7、60;         cD1(2,2)=temp;    end  end    % 检查(2,2) , (2,3)的差是否>= k  if cD1(2,2) > cD1(2,3)    if cD1(2,2) - cD1(2,3) < k        cD1(2,2)=cD1(2,2)+(k/2);        cD1(2,3)=cD1(2,3)-(k/2);  

8、;           end  else       if cD1(2,3) - cD1(2,2) < k        cD1(2,3)=cD1(2,3)+(k/2);         cD1(2,2)=cD1(2,2)-(k/2);    end  end      %IDWT  watermarked_image(x:x+blocksize-1

9、,y:y+blocksize-1)= idwt2(cA1,cH1,cV1,cD1,'haar',Mc,Nc);  % 移动到下一块  if (x+blocksize) >= Nc    x=1;    y=y+blocksize;  else    x=x+blocksize;  end  waitbar(kk/length(message_vector),h);endclose(h);% 转换为uint8并写入dwt_watermarked.bmpwaterma

10、rked_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('水印');figure(2)subplot(1,2,1);imshow(watermar

11、ked_image,)title('嵌入水印图像')subplot(1,2,2);imshow(cover_object,);title('原图');%提取源码clear all;% 保存开始时间start_time=cputime;blocksize=8;   % 设置块的大小% 读入嵌入水印图像file_name='dwt_watermarked.bmp'watermarked_image=double(imread(file_name);% 嵌入水印图像的行数与列数Mw=size(watermarked_image,1); 

12、60;       %嵌入水印图像的行数Nw=size(watermarked_image,2);         %嵌入水印图像的列数% 最大嵌入信息量max_message=Mw*Nw/(blocksize2);% 读入原始水印file_name='c.bmp'orig_watermark=double(imread(file_name);% 原始水印的行数与列数Mo=size(orig_watermark,1);    %原始水印的行数No=size(orig_watermark,2

13、);    %原始水印的列数% 将图像分块提取水印x=1;y=1;h=waitbar(0,'水印提取中,请等待');for (kk = 1:max_message)  % 对块进行dwt变换  cA1,cH1,cV1,cD1 = dwt2(watermarked_image(x:x+blocksize-1,y:y+blocksize-1),'haar');    % 如果cD1(2,2) > cD1(3,3) 那么 message_vector(kk)=0  % 否则 message_v

14、ector(kk)=1  if cD1(2,2)>cD1(3,3)    message_vector(kk)=0;  else    message_vector(kk)=1;  end  % 移动到下一块  if (x+blocksize) >= Mw    x=1;    y=y+blocksize;  else    x=x+blocksize;  end  waitbar(kk/max_message,h);endclose(h);% 将message重新排列message_vector=message_vector(1,1:Mo*No); %只需前Mo*N

温馨提示

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

评论

0/150

提交评论