• 大小: 990B
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: 水印  图像  小波  

资源简介

利用二维小波变换,在一幅图像中嵌入水印,有水印检测以及提取的源代码,并有各部分程序作用的注释。

资源截图

代码片段和文件信息

clear;
%装入原图像1
load woman;
I=X;

%小波函数
type = ‘db1‘;

% 2维离散Daubechies小波变换
[CA1 CH1 CV1 CD1] = dwt2(Itype);
C1 = [CH1 CV1 CD1];

%系数矩阵大小
[length1 width1] = size(CA1);
[M1 N1] = size(C1);

% 定义阈值T1 
T1 =50;
alpha = 0.2;

%在图像中加入水印
for counter2 = 1: 1: N1
   for counter1 = 1: 1: M1
      if( C1(counter1 counter2) > T1 )   
         marked1(counter1counter2) = randn(11);
         NEWC1(counter1 counter2) = double( C1(counter1 counter2) ) +alpha * abs( double( C1(counter1 counter2) ) ) * marked1(counter1counter2) ;      
      else
         marked1(counter1 counter2) = 0;
         NEWC1(counter1 counter2) = double( C1(counter1 counter2) );
      end; 
   end;
end;

%重构图像
NEWCH1 = NEWC1(1:length1 1:width1);
NEWCV1 = NEWC1(1:length1 width1+1:2*width1);
NEWCD1 = NEWC1(1:length1 2*width1+1:3*width1);

R1 = double( idwt2(CA1 NEWCH1 NEWCV1 NEWCD1 type) );

%分离水印
watermark1 = double(R1) - double(I);

figure(1);
subplot(121);
image(I);
axis(‘square‘);
title(‘原始图像‘);
subplot(122);
imshow(R1/250);
axis(‘square‘);
title(‘Daubechies小波变换后图像‘);

figure(2);
imshow(watermark1*10^16);
axis(‘square‘);
title(‘水印图像‘);

% 水印检测
newmarked1 = reshape(marked1 M1*N1 1);
% 检测阈值
T2 = 60;
 for counter2 = 1: 1: N1
    for counter1 = 1: 1: M1
            if( NEWC1(counter1 counter2) >T2 )
               NEWC1X(counter1 counter2) = NEWC1(counter1 counter2);
            else
               NEWC1X(counter1 counter2) = 0;
            end;
        end;
      end;

NEWC1X = reshape(NEWC1X M1*N1 1);

correlation1 = zeros(10001);
for corrcounter = 1: 1: 1000
      if( corrcounter == 500)
       correlation1(corrcounter1) = NEWC1X‘*newmarked1 / (M1*N1);
      else
       rnmark = randn(M1*N11);
       correlation1(corrcounter1) = NEWC1X‘*rnmark / (M1*N1);
      end;      
end;  

% 计算阈值
originalthreshold = 0;
for counter2 = 1: 1: N1
    for counter1 = 1: 1: M1
             if( NEWC1(counter1 counter2) > T2 )
               originalthreshold = originalthreshold + abs( NEWC1(counter1 counter2) );
             end;
         end;
  end;
originalthreshold = originalthreshold * alpha / (2*M1*N1);   

corrcounter = 1000;
originalthresholdvector = ones(corrcounter1) * originalthreshold;

figure(3);
plot(correlation1 ‘-‘);
hold on;
plot(originalthresholdvector ‘--‘);
title(‘原始的加水印图像‘);
xlabel(‘水印‘);
ylabel(‘检测响应‘);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2538  2008-12-23 19:57  shuiyin2.m

----------- ---------  ---------- -----  ----

                 2538                    1


评论

共有 条评论