小波变换在数字水印中的应用
I=imread('mona','bmp');
J=imread('watermarked.bmp','bmp'); for p=1:N for q=1:N x=(p-1)*K+1; y=(q-1)*K+1;
BLOCK1=I(x:x+K-1,y:y+K-1); BLOCK2=J(x:x+K-1,y:y+K-1); BLOCK1=idct2(BLOCK1); BLOCK2=idct2(BLOCK2); a=BLOCK2(1,1)/BLOCK1(1,1)-1; if a<0 W(p,q)=0; else W(p,q)=1; end end end
%??ê?ìáè?μ???ó? subplot(3,2,4); imshow(W);
title('′óo???ó?í????Dìáè?μ???ó?');
%??ó?1¥?÷2aê? M=256; N=32; K=8;
I=zeros(M,M); J=zeros(M,M); w=zeros(N,N); BLOCK1=zeros(K,K); BLOCK2=zeros(K,K);
%????è???ó?oóμ?í?????DDJPEG?1?? L=imread('watermarked.bmp','bmp');
imwrite(L,'attack.jpg','jpeg','Quality',45); J=imread('attack.jpg','jpeg');
subplot(3,2,5);imshow(J);title('?1??oóμ?í???'); I=imread('mona','bmp'); %′ó?1??μ?í????Dìáè???ó? for p=1:N for q=1:N x=(p-1)*K+1;
第 31 页 共 34 页
小波变换在数字水印中的应用
y=(q-1)*K+1;
BLOCK1=I(x:x+K-1,y:y+K-1); BLOCK2=J(x:x+K-1,y:y+K-1); BLOCK1=idct2(BLOCK1); BLOCK2=idct2(BLOCK2); a=BLOCK2(1,1)/BLOCK1(1,1)-1; if a<0 W(p,q)=0; else W(p,q)=1; end end end
%??ê?ìáè?μ???ó? subplot(3,2,6); imshow(W);
title('′ó?-1y?1??μ?í????Dìáè?μ???ó?');
基于小波变换音频水印:
clear all; close all; clc;
[x,fs,nbits]=wavread('F:\\?Dò?×÷òμ?à1?\\ò??μ\\2blues1.wav');
[c,l]=wavedec(x,3,'db4'); %èy??D?2¨·??a ca3=appcoef(c,l,'db4',3); cd3=detcoef(c,l,3); cd2=detcoef(c,l,2); cd1=detcoef(c,l,1);
x=ca3; %ìáè?μí?μ?μêy lenx=length(x); %×÷?aí?2?D?o?
%y=[0.02; 0.02 ;0.02; 0.02 ;0.02; 0.02 ;0.02; 0.02 ;0.02 ;0.02]; %?áè???ó?D??¢
mark= imread('F:\\?Dò?×÷òμ?à1?\\ò??μ\\name.bmp'); [row,col]=size(mark); w=mark(:); m=length(w'); k=fix(lenx/10/m)*10; subplot(2,1,1);
imshow(mark);title('??ó?í???', 'Fontsize', 16, 'color', 'blue'); w1=w(1:m); a=0.01;
第 32 页 共 34 页
小波变换在数字水印中的应用
for i=1:k:m*k x1=x(i:i+k-1); j=fix(i/k)+1; for t=1:3
recordx(j,t)=x1(t); x1(t)=x1(t)*(1+a*w(j)); x(i:i+k-1)=x1; end end
c1=[x',cd3',cd2',cd1']; s1=waverec(c1,l,'db4'); %6o?2¢μ?μ???è???ó?oóμ?ò??μD?o? %marked=[y;s1];
wavwrite(s1,fs,nbits,'F:\\?Dò?×÷òμ?à1?\\ò??μ\\em2blues1.wav');
%??ó?ìáè?
[x2,fs,nbits]=wavread('F:\\?Dò?×÷òμ?à1?\\ò??μ\\em2blues1.wav'); [cr,lr]=wavedec(x2,3,'db4'); car3=appcoef(cr,lr,'db4',3); cdr3=detcoef(cr,lr,3); cdr2=detcoef(cr,lr,2); cdr1=detcoef(cr,lr,1); for i=1:k:m*k j=fix(i/k)+1; %5??ó?ìáè?
w21=(car3(i)/recordx(j,1)-1)/a; w22=(car3(i+1)/recordx(j,2)-1)/a; w23=(car3(i+2)/recordx(j,3)-1)/a; w2(j)=(w21+w22+w23)/3; end
w3=reshape(w2,row,col); subplot(2,1,2);
imshow(w3);title('ìáè?μ???ó?í???', 'Fontsize', 16, 'color', 'blue'); imwrite(w3,'watermark.bmp','bmp');
%D??ü?à??
[x0,fs,nbits]=wavread('F:\\?Dò?×÷òμ?à1?\\ò??μ\\2blues1.wav'); [x2,fs,nbits]=wavread('F:\\?Dò?×÷òμ?à1?\\ò??μ\\em2blues1.wav'); %%%%%%%%%%%%%%%%%%%%%%??????è?á???ó?μ?D?o?μ?D???±è%%%% fz=sum(x0.*x0); fm=sum((x0-x2).*(x0-x2)); SNR=-10*log(fm/fz)
第 33 页 共 34 页
小波变换在数字水印中的应用
%%%%%%%%%%%%%%%%%%%%%?????ó???ê%%%%%%%%%%%%%%%%%%%%%% mark= imread('F:\\?Dò?×÷òμ?à1?\\ò??μ\\name.bmp'); mark1= imread('F:\\?Dò?×÷òμ?à1?\\ò??μ\\watermark.bmp'); [row,col]=size(mark); m1=mark(:);mm1=mark1(:);
err = sum(sum(xor(m1', mm1')))/row*col
第 34 页 共 34 页