• 大小: 422KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-17
  • 语言: Matlab
  • 标签: matlab  鲁棒水印  

资源简介

基于DCT域的鲁棒水印实现,有多种攻击测试,鲁棒性很好。

资源截图

代码片段和文件信息

%基于DTC域的鲁棒水印实现
clear all;
k=20;  %设置水印强度
blocksize=8;
midband=[00011110;
         00111100;
         01111000;
         11110000;
         11100000;
         11000000;
         10000000;
         00000000];
  message=double(imread(‘12.bmp‘));
  %Laplacian算子
  %h=[-1 -1 -1
   %  -1  8 -1
    % -1 -1 -1];
  %G=abs(imfilter(Ih));
  %figureimshow(G[])title(‘Laplacian Operator‘);
  %message=double(graythresh(I));%先转换成灰色然后自动设置二值化的阀值并转换成双精度数组
  Mm=size(message1);
  Nm=size(message2);
  n=Mm*Nm;
  message=round(reshape(message1n));
  cover_object=double(imread(‘lena512.bmp‘)); 
  Mc=size(cover_object1);    Nc=size(cover_object2);  
  c=Mc/8;d=Nc/8;m=c*d;
  %计算宿主图像的每一块方差
  xx=1;
  for j=1:c
      for i=1:d
          pjhd(xx)=1/64*sum(sum(cover_object((1+(j-1)*8):j*8(1+(i-1)*8):i*8)));
          fc(xx)=1/64*sum(sum((cover_object((1+(j-1)*8):j*8(1+(i-1)*8):i*8)- pjhd(xx)).^2));
           xx=xx+1;
      end
  end
  A=sort(fc);B=A((c*d-n+1):c*d);
  %将水印信息嵌入到方差最大的前n块
  fc_o=ones(1c*d);
  for g=1:n
    for h=1:c*d
       if B(g)==fc(h)
           fc_o(h)=message(g);
           h=c*d;
       end
    end
  end
  message_vector=fc_o;
  watermarked_image=cover_object;
  %设置MATLAB随机数生成器状态J,作为系统秘钥K
  rand(‘state‘7);
  %根据当前的随机数生成器状态J,生成0,1的伪随机序列
  pn_sequence_zero=round(rand(1sum(sum(midband))));
  %嵌入水印
  x=1;y=1;
  for(kk=1:m)
      %分块DCT变换
      dct_block=dct2(cover_object(y:y+blocksize-1x:x+blocksize-1));
      %纹理大(方差最大的前n块)并被标注水印信息为0的块在其DCT中频系数嵌入伪随机序
      ss=1;
      if (message_vector(kk)==0)
          for ii=1:blocksize
              for jj=1:blocksize
                if(midband(jjii)==1)
                  dct_block(jjii)=dct_block(jjii)+k*pn_sequence_zero(ss);
                  ss=ss+1;
                end
              end
          end
      end
     %分块DCT反变换
      watermarked_image(y:y+blocksize-1x:x+blocksize-1)=idct2(dct_block);
     %换行
      if(x+blocksize)>=Nc
        x=1;y=y+blocksize;
      else
        x=x+blocksize;
      end
  end 
   watermarked_image_int=uint8(watermarked_image); %将其转换成8为无符号整形数据
  %生成并输出嵌入水印后的图像
  imwrite(watermarked_image_int‘dct2_watermarked.bmp‘‘bmp‘); %图像数据写入dct2中保存为bmp格式
     %显示峰值信噪比
   xsz=255*255*Mc*Nc/sum(sum((cover_object-watermarked_image).^2));
   psnr=10*log10(xsz);
  figure
  imshow(‘12.bmp‘);%水印图像
  title(‘水印‘)
  figure
  imshow(‘lena512.bmp‘);%显示原来图像   
  title(‘原图‘);
  figure
  imshow(watermarked_image_int[]);%显示嵌入水印后的图像  
  title(‘嵌入后图像‘);
  %加椒盐噪声攻击测试
 J1=imnoise(watermarked_image_int‘salt & pepper‘0.01);
 imwrite(J1‘JiaoYan.bmp‘‘bmp‘);
 figure
 imshow(J1[]);
 title(‘加椒盐噪声后的图像‘);
 %对嵌入水印的图像进行压缩处理
 imwrite(watermarked_image_int‘JPEGyasuo.jpg‘‘jpeg‘‘quality‘40);
 J=imread(‘JPEGyasuo.jpg‘);
 figure
 imshow(J[]);
 title(‘压缩后的水印图像‘);
 %进行贴图攻击
watermarked_image_int(250:400300:500)=watermarked_image_int(209:359289:48

评论

共有 条评论