小波变换在数字水印中的应用
image1=imread(num2str(filename1));
subplot(2,2,1);imshow(image1);title('original image'); % orginal image for watermarking image1=double(image1); [row,col]=size(image1); imagew=imread('dmg2.tif');
subplot(2,2,2);imshow(imagew);title('water mark'); %??ó???è?oˉêyμ÷ó?
[marked]=blockdwt2(image1,imagew); % generates the watermarked image
%markedmax = max(marked(:)); %markscale = marked/markedmax*255;
subplot(2,2,3);colormap(gray(256));image(marked);title('Watermarked image'); % shows the watermarked image
imwrite(marked,gray(256),'marked_image.bmp'); % saves the watermarked image as a bmp file
%*******??ó?ìáè?1y3ì********
watermark=marked-image1; % image adaptive watermark %watermark=watermark*255/max(watermark(:)) for i = 1:row % thresholding for j = 1:col
if watermark(i,j)>0 watermark(i,j) = 255; end
if watermark(i,j)<0 watermark (i,j) = 0; end end end
[w2 h2]=size(watermark); [w3 h3]=size(imagew); p=1; q=1;
mark=zeros(size(imagew)); for i=1:w3:w2 for j=1:h3:h2
mark=mark+watermark(i:p*w3,j:q*h3); q=q+1; end p=p+1; q=1; end
mark=mark/8;
第 26 页 共 34 页
小波变换在数字水印中的应用
subplot(2,2,4);colormap(gray(256));image(mark);title('watermark'); % shows the image adaptive watermark
imwrite(mark,gray(256),'watermark.bmp'); % saves the image adaptive watermark as a bmp file
%%%%%%%%%%%%D??ü?à??%%%%%%%%%%%%%
image1=imread(num2str(filename1));x0=image1; imaged=imread('marked_image.bmp');x2=imaged;
%%%%%%%%%%%%%%%%%%%%%%??????è?á???ó?μ?D?o?μ?D???±è%%%% fz=sum(x0.*x0); fm=sum((x0-x2).*(x0-x2)); SNR=-10*log(fm/fz)
%%%%%%%%%%%%%%%%%%%%%?????ó???ê%%%%%%%%%%%%%%%%%%%%%% mark=imread('dmg2.tif'); mark1= imread('watermark.bmp'); [row,col]=size(mark); m1=mark(:);mm1=mark1(:);
err = sum(sum(xor(m1', mm1')))/row*col
function [D]=blockdwt2(A,W); [row,col]=size(A); k=0.007;
[ca,ch,cv,cd] = dwt2(A,'db1'); c1 = [ch cv cd]; [h, w] = size(ca'); [m, n] = size(c1'); W=dmg(W,A);
[caa chh cvv cdd]=dwt2(W,'db1'); W=caa; size(W);
% Adding watermark image. for i=1:h
for j=1:w if W(i,j)==0 a=-0.1; else a=0.1; end
Ca(i,j)=ca(i,j)*(1+k*a); %
<--------k*abs(double(c1(i,j)))*W(i,j); de olabilir end end
D= double( idwt2(Ca,ch, cv, cd,'db1') );
第 27 页 共 34 页
小波变换在数字水印中的应用
% Damga uretme %
% imgew: Damga imgesi % imge1: Orjinal imge %
function W=dmg(imgew,imge1); [w h]=size(imgew'); [w1 h1]=size(imge1'); a=1; b=1;
W=zeros(size(imge1')); for i=1:w:w1 for j=1:h:h1
W(i:a*w,j:b*h)=imgew'; b=b+1; end a=a+1; b=1; end W=W';
基于小波变换图像水印(2)
clear all; close all; clc; M=256;%?-í???3¤?è N=64; %??ó?3¤?è
[filename1,pathname]=uigetfile('*.*','select the image'); image1=imread(num2str(filename1));
subplot(2,2,1);imshow(image1); title('original image'); image for watermarking image1=double(image1); imagew=imread('dmg2.bmp');
subplot(2,2,2);imshow(imagew);title('original watermark'); watermark %??è???ó?
[ca,ch,cv,cd] = dwt2(image1,'db1'); [cas,chs,cvs,cds] = dwt2(ca,'db1'); for i=1:N for j=1:N
if imagew(i,j)==0 a=-1; else a=1;
第 28 页 共 34 页
%original % orginal 小波变换在数字水印中的应用
end
Ca(i,j)=cas(i,j)*(1+a*0.01); end end
IM= idwt2(Ca,chs,cvs,cds,'db1') ;
markedimage=double(idwt2(IM,ch,cv,cd,'db1')); %??ê???è?oó??ó?í???
subplot(2,2,3);colormap(gray(256));image(markedimage);title('marked image');
imwrite(markedimage,gray(256),'watermarked.bmp','bmp');
%ìáè???ó?
image1=imread(num2str(filename1));image1=double(image1); imaged=imread('watermarked.bmp'); [ca,ch,cv,cd] = dwt2(image1,'db1'); [cas,chs,cvs,cds]=dwt2(ca,'db1'); [caa,chh,cvv,cdd]=dwt2(imaged,'db1'); [caas,chhs,cvvs,cdds]=dwt2(caa,'db1'); for p=1:N for q=1:N
a=caas(p,q)-cas(p,q); if a<0 W(p,q)=0; else
W(p,q)=255; end end end
%??ê?ìáè?μ???ó? subplot(2,2,4);
colormap(gray(256));image(W);title('′óo???ó?í????Dìáè?μ???ó?'); imwrite(W,gray(256),'watermark.bmp','bmp');
%%%%%%%%%%%%D??ü?à??
image1=imread(num2str(filename1));x0=image1; imaged=imread('watermarked.bmp');x2=imaged;
%%%%%%%%%%%%%%%%%%%%%%??????è?á???ó?μ?D?o?μ?D???±è%%%% fz=sum(x0.*x0); fm=sum((x0-x2).*(x0-x2)); SNR=-10*log(fm/fz)
%%%%%%%%%%%%%%%%%%%%%?????ó???ê%%%%%%%%%%%%%%%%%%%%%%
第 29 页 共 34 页
小波变换在数字水印中的应用
mark=imread('dmg2.bmp'); mark1= imread('watermark.bmp'); [row,col]=size(mark); m1=mark(:);mm1=mark1(:);
err = sum(sum(xor(m1', mm1')))/row*col
DCT变换图像水印:
%??è???ó?μ?3ìDò′ú?? M=256; %?-í???3¤?è N=32; %??ó?í???3¤?è K=8;
I=zeros(M,M);J=zeros(N,N);BLOCK = zeros(K,K); %??ê??-í???
subplot(3,2,1);I=imread('mona.bmp','bmp');imshow(I);title('?-ê?1??aí???');
%??ê???ó?í???
subplot(3,2,2);J=imread('flag.bmp','bmp');imshow(J);title('??ó?í???'); %??è???ó? for p=1:N for q=1:N x=(p-1)*K+1; y=(q-1)*K+1;
BLOCK=I(x:x+K-1,y:y+K-1); BLOCK=dct2(BLOCK); if J(p,q)==0 a=-1; else a=1; end
BLOCK(1,1)=BLOCK(1,1)*(1+a*0.03); BLOCK=idct2(BLOCK); I(x:x+K-1,y:y+K-1)=BLOCK; end end
%??ê???è???ó?oóμ?í???
subplot(3,2,3);imshow(I);title('??è???ó?oóμ?í???'); imwrite(I,'watermarked.bmp','bmp');
%′ó??è???ó?μ?í????Dìáè???ó?
第 30 页 共 34 页