www.gusucode.com > 小波变换的数字水印matlab源码程序 > new_wavelet/Embed.m
function New_Image = Embed(Image,Water) % Test = imread('barbara_512.bmp'); % Block_Image = Block(Test,16,16); % Image = Block_Image{1,1}; [c,s] = wavedec2(Image,3,'haar'); cx = c; HL3 = detcoef2('h',c,s,3); %提取中频分量 HL = HL3; LH3 = detcoef2('v',c,s,3); LH = LH3; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %计算嵌入强度BeiTa值 [m1,n1] = size(HL); %计算HL中系数的和 HL_Sum = 0; HL_Num = m1*n1; for i = 1:m1 for j = 1:n1 HL_Sum = HL_Sum+HL(i,j); end end [m2,n2] = size(LH); %计算LH中系数的和 LH_Sum = 0; LH_Num = m2*n2; for i = 1:m2 for j = 1:n2 LH_Sum=LH_Sum+LH(i,j); end end Dmn_Sum = HL_Sum+LH_Sum; %Dmn_Sum为中频系数的和 Dmn_Num = HL_Num+LH_Num; %Dmn_Num为中频系数的个数 Dmn_Average = Dmn_Sum/Dmn_Num; p = 3; %dmn的平均距离Smn在P幂点列空间中计算的,文中P取3 Q = Dmn_Num; Smn_HL_Sum = 0; for i = 1:m1 for j = 1: n1 Temp1 = abs(HL(i,j)-Dmn_Average); Temp2 = Temp1^p; Smn_HL_Sum = Smn_HL_Sum+Temp2; end end Smn_LH_Sum = 0; for i = 1:m2 for j = 1: n2 Temp1 = abs(LH(i,j)-Dmn_Average); Temp2 = Temp1^p; Smn_LH_Sum = Smn_LH_Sum+Temp2; end end Temp_Sum = Smn_HL_Sum+Smn_LH_Sum; Smn = (1/Q)*((Temp_Sum)^(1/p)); Bmn_HL = zeros(m1,n1); %用Smn对小波系数进行2值化 Bmn_HL_Sum =0; for i = 1:m1 for j = 1:n1 if abs(HL(i,j))<Smn Bmn_HL(i,j) = 0; else Bmn_HL(i,j) = 1; Bmn_HL_Sum =Bmn_HL_Sum+1; end end end Bmn_LH = zeros(m2,n2); Bmn_LH_Sum =0; for i = 1:m2 for j = 1:n2 if abs(LH(i,j))<Smn Bmn_LH(i,j) = 0; else Bmn_LH(i,j) = 1; Bmn_LH_Sum = Bmn_LH_Sum+1; end end end Beita = 10*(1/Q)*(Bmn_HL_Sum+Bmn_LH_Sum); %Beita值 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %进行水印嵌入 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O_Water = rand(1,8); % for i = 1:8 % if O_Water(i) > 0.5 % Water(i) = 1; % else % Water(i) = -1; % end % end for i = 1:m1 Cof_1((i-1)*n1+1:(i-1)*n1+n1) = HL(i,:); end for i = 1:m2 Cof_2((i-1)*n2+1:(i-1)*n2+n2) = LH(i,:); end Cof = [Cof_1,Cof_2]; Cof_Num = (m1*n1)+(m2*n2); for i = 1: Cof_Num Cof(i) = Cof(i)+ Beita*Water(i); end New_Cof_1 = [Cof(1:m1*n1)]; New_Cof_2 = [Cof(m1*n1+1:Cof_Num)]; for i = 1:m1 New_HL(i,:) = New_Cof_1((i-1)*n1+1:(i-1)*n1+n1); end for i = 1:m2 New_LH(i,:) = New_Cof_2((i-1)*n2+1:(i-1)*n2+n2); end for r = 1:n1 cx(1,m1*n1+1+(r-1)*m1:m1*n1+r*m1) = New_HL(:,r)'; end for r = 1:n2 cx(1,m2*n2*2+1+(r-1)*m2:m2*n2*2+r*m2) = New_LH(:,r)'; end New_Image = waverec2(cx,s,'haar');