?? watermark.m
字號:
% SVDwatermark.m 將載體圖像分塊成8*8后,然后SVD
K=8; %k=分塊的大小
Q=50; %Q=量化系數
W=imread('Hubeiwuhan.bmp'); %讀取水印圖像Hubeiwuhan.bmp 64*64像素大小
Mm=size(W,1); %Hubeiwuhan.bmp 64*64像素大小
Nm=size(W,2);
figure(1);
subplot(321);
imshow(W);
title('the orginal watermark');
I=imread('lena512-gray.bmp');
subplot(322);
imshow(I);
title('the cover image');
II=I; % to save the original image(I)
blockrow=Mm;
blockcol=Nm;
for i=1:blockrow
for j=1:blockcol
x=(i-1)*K+1;
y=(j-1)*K+1;
BLOCK=II(x:x+K-1,y:y+K-1);
[U,S,V]=svd(double(BLOCK));
bit=W(i,j); %get the one bit wateramrk=bit
remainder=rem(S(1,1),Q);
if (bit==1) %embedding bit '1'
if (remainder<=Q/4)
S(1,1)=S(1,1)-remainder-Q/4;
else
S(1,1)=S(1,1)-remainder+3*Q/4;
end
else %embedding bit '0'
if (remainder>=3*Q/4)
S(1,1)=S(1,1)-remainder+5*Q/4;
else
S(1,1)=S(1,1)-remainder+Q/4;
end
end
BLOCKW=U*S*V'; %SVD 逆變換還原
II(x:x+K-1,y:y+K-1)=uint8(round(BLOCKW));
end
end
subplot(324);
imshow(II);
title('the watermarked image');
psnr1=PSNR(I,II)
A=double(II)-double(I);
rsm=0;
for i=1:size(A,1)
for j=1:size(A,2)
rsm=rsm+A(i,j)*A(i,j);
end
end
rsm=sqrt(rsm)/(size(A,1)*size(A,2)) % rsm是均方誤差
% to extracting the wateramrk from image(II)
for i=1:blockrow
for j=1:blockcol
x=(i-1)*K+1;
y=(j-1)*K+1;
BLOCK=II(x:x+K-1,y:y+K-1);
[U,S,V]=svd(double(BLOCK));
remainder=rem(S(1,1),Q);
if (remainder>Q/2)
EW(i,j)=1;
else
EW(i,j)=0;
end
end
end
subplot(323);
imshow(EW);
title('the extracted wateramrk');
% the watermarked image is attacked
imwrite(uint8(II),'attack.jpg','jpeg','Quality',70); %對圖像進行壓縮,保存為attack.jpg
II1=imread('attack.jpg');
%中值濾波
%II1=medfilt2(II); %中值濾波
%維納濾波
%II1=wiener2(II); %維納濾波
%高斯低通濾波,H為預定義的一個濾波器
%H=fspecial('gaussian',[3,3],0.5);
%II1=imfilter(II,H);
%II1=imnoise(uint8(II),'salt & pepper',0.005); %椒鹽加噪
%II1=imnoise(uint8(II),'gaussian',0.005); %高斯加噪
%II1=II;
%II1(1:200,1:200)=255; %左上角剪切100*100
%逆時針旋轉5度,然后順時針旋轉5度,以還原原圖像
%II1=imrotate(II,10,'bilinear','crop'); % left rotate 5 angle
%II1=imrotate(II1,-10,'bilinear','crop');
%縮放攻擊1/2
%II1=imresize(II,0.5);
%II1=imresize(II1,2);
subplot(326);
imshow(II1);
title('the attacked image');
for i=1:blockrow
for j=1:blockcol
x=(i-1)*K+1;
y=(j-1)*K+1;
BLOCK=II1(x:x+K-1,y:y+K-1);
[U,S,V]=svd(double(BLOCK));
remainder=rem(S(1,1),Q);
if (remainder>Q/2)
EW(i,j)=1;
else
EW(i,j)=0;
end
end
end
subplot(325);
imshow(EW);
title('the extracted wateramrk');
corr2=NC(double(W),double(EW)) %攻擊后提取的水印與原水印的歸一化相關系數值N
psnr2=PSNR(I,II1) %攻擊后嵌入水印后的PSNR
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -