gusucode.com > 小波变换的数字水印matlab源码程序 > new_wavelet/Start_Embed.m
Image = imread('barbara_512.bmp'); % Image = imread('lena_512.bmp'); [m,n] = size(Image); Block_Size = 16; Block_Image = Block(Image,Block_Size,Block_Size); %将原图分成16*16的分块 Block_Num = (m*n)/(Block_Size*Block_Size); %Block_num 为分块数 Water_Num = 8*Block_Num; %8*1024=8192 % %%%%%%%%%%%%%%%%%%%%%%%%% %产生水印序列 %%%%%%%%%%%%%%%%%%%%%%%% Key = rand(1,1000); X(1) = Key(500); %取第500个随机数作为混沌序列发生器的处置 % 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; Water{1,i} = [WaterMark((i-1)*8+1:i*8)]; end for i = 1:Block_Num %对分块进行嵌入处理 New_Block_Image{1,i} = Embed(Block_Image{1,i},Water{1,i}); end Block_Row_Num = m/Block_Size; for i = 1:Block_Row_Num Temp1 = [New_Block_Image{1,(Block_Row_Num*(i-1)+1):(Block_Row_Num*(i-1)+Block_Row_Num)}]; Temp2{1,i} = Temp1'; end Temp3 = [Temp2{1,1:Block_Row_Num}]; Add_Water_Image = Temp3'; imwrite(uint8(Add_Water_Image),'Add_Water_Image.bmp'); Res_PSNR = psnr(Image,Add_Water_Image);