www.gusucode.com > 小波变换的数字水印matlab源码程序 > new_wavelet/Start_Det.m

    Water_Image = imread('Add_Water_Image.bmp');
% Water_Image = imread('Add_Water_Image_JPEG_15.bmp');          %JPEG压缩的图片
%  Water_Image = imread('midle33_26.5651.bmp');                %中值滤波器
%  Water_Image = imread('salt0.1_15.3190.bmp');                 %椒盐噪声
% Water_Image = imread('g0.1_11.4539.bmp');                   % 高斯噪声
% Water_Image = imread('jianqie1.bmp');                       %剪切
[m,n] = size(Water_Image);
Block_Size = 16;
Block_Water_Image = Block(Water_Image,Block_Size,Block_Size);                                       
Block_Num = (m*n)/(Block_Size*Block_Size);
Water_Num = 8*Block_Num; 

Key_Num = 1000;
for  kk = 1:Key_Num  
     X(1) = Key(kk);
     W = zeros(1,Water_Num);

    if X(1) > 0.5                                                                             %对初值进行判断,若大于0.5则取1,若小于0.5则取-1
       W(1) = 1;  
    else
      W(1) = -1;
    end
    
    N = Water_Num;                               
    Num_N = 0;                                                                               %Num_N,Num_p 分别为1和+1的个数这里对他们进行初始化                                             
    Num_P = 0;
   for i = 1:(N-1)
      X(i+1) = 3.93*X(i)*(1-X(i));
      if  X(i+1) <= 0.5
        W(i+1) = -1;
        Num_N = Num_N+1;
      else
        W(i+1) = 1;
        Num_P = Num_P+1;
      end
   end
  Water_Squ{1,kk} = W;
end

% X(1) = 0.37;
% W = zeros(1,Water_Num);
% 
% if X(1) > 0.5                                                                             %对初值进行判断,若大于0.5则取1,若小于0.5则取-1
%     W(1) = 1;  
% else
%     W(1) = -1;
% end
%     
% N = Water_Num;                               
% Num_N = 0;                                                                               %Num_N,Num_p 分别为1和+1的个数这里对他们进行初始化                                             
% Num_P = 0;
% for i = 1:(N-1)
%     X(i+1) = 3.93*X(i)*(1-X(i));
%     if  X(i+1) <= 0.5
%         W(i+1) = -1;
%         Num_N = Num_N+1;
%    else
%         W(i+1) = 1;
%         Num_P = Num_P+1;
%     end
% end
% 
% WaterMark = W;

for i = 1:Block_Num
    DD{1,i} = Detected(Block_Water_Image{1,i});
end

D_Squ = [DD{1,:}];

% DW_Sum = 0;
% for i = 1:Water_Num
%     DW_Sum = D_Squ(i)*WaterMark(i)+DW_Sum;
% end
% Z = (1/Water_Num)*DW_Sum;

for i = 1:Key_Num
    WW = Water_Squ{1,i};
    DW_Sum = 0;
    for j = 1:Water_Num
        DW_Sum = D_Squ(j)*WW(j)+DW_Sum;
    end
    Z(i) = (1/Water_Num)*DW_Sum;
end

ZZ = Z(500)

D_Squ_Sum = 0;
for i = 1:Water_Num
    D_Squ_Sum = D_Squ_Sum+D_Squ(i);
end

D_Squ_Average = D_Squ_Sum/Water_Num;

Temp_Sum = 0;
for i = 1:Water_Num
    Temp_Sum = (D_Squ(i)-D_Squ_Average)^2+Temp_Sum;
end

K = Water_Num;
Xigma=sqrt(Temp_Sum/K^2);
p = 10^(-8);
T = sqrt(2)*Xigma*erfcinv(2*p)

t = 1:1000;    
C1 = Z(t);
C2 = ones(1,1000)*T;
figure,plot(t,C1/7.625,'k',t,C2/7.625,'k');
xlabel('水印序列号');
ylabel('相关值检测');