%计算水印文件信噪比
PSNR1=psnr(ddWatermark,DDetect); elapsed_time=cputime-start_time; %计算水印文件相关度
NC=corr2(ddWatermark,DDetect);
%计算水印图像信噪比
dOrigCover=double(imread('ship.bmp')); PSNR2=psnr(dOrigCover,dEmbed);
% 对比显示
figure(1),imshow(iWatermark,[]); title('Original Watermark'); figure(2),imshow(Detect,[])
title(strcat('Detected Watermark',' PSNROfWatermark=',num2str(PSNR1),' NC=',num2str(NC),' PSNROfWatermarkImage=',num2str(PSNR2)));
%% END------------------------------------------------------------------%%
%% ----------------------------------------------------------------------- % Calculates the PSNR (Peak Signal to Noise Ratio), size MxN %% -----------------------------------------------------------------------
function dPSNR = psnr(ImageA,ImageB)
if (size(ImageA,1) ~= size(ImageB,1)) or (size(ImageA,2) ~= size(ImageB,2)) error('ImageA <> ImageB'); dPSNR = 0; return ; end
32
M = size(ImageA,1); N = size(ImageA,2); d = 0 ; for i = 1:M for j = 1:N
d = d + (ImageA(i,j) - ImageB(i,j)).^2 ; end end
dPSNR = -10*log10(d/(255*255*M*N)) ; return
%% END------------------------------------------------------------------%%
%% ---------------------------------------------------------------------%% % LSB算法------水印嵌入
%% ---------------------------------------------------------------------%% clear all;
file_name='Ship.bmp';
[x,map]=imread(file_name) [row,col]=size(x);
cover_object=imread(file_name); file_name='copyright.bmp'; message=imread(file_name); message=double(message); message=round(message/256); message=uint8(message); Mc=size(cover_object,1);
33
Nc=size(cover_object,2); Mm=size(message,1); Nm=size(message,2); for ii=1:Mc for jj=1:Nc
watermark(ii,jj)=message(mod(ii,Mm)+1,mod(jj,Nm)+1); end end
watermarked_image=cover_object; for ii=1:Mc for jj=1:Nc
watermarked_image(ii,jj)=bitset(watermarked_image(ii,jj),1,watermark(ii,jj)); end end
imwrite(watermarked_image,'lsb_watermarked.bmp','bmp'); figure(1)
imshow(watermarked_image,[])
%% END------------------------------------------------------------------%%
%% ---------------------------------------------------------------------%% % LSB算法------水印检测
%% ---------------------------------------------------------------------%%
%%%%%%读入含水印图像%%%%%%%% file_name=' lsb_watermarked.bmp '; watermarked_image=imread(file_name);
Mw=size(watermarked_image,1);%取行 Nw=size(watermarked_image,2);%取列
34
%%%%%%%%%水印提取 %%%%%%%%%% for ii=1:Mw for jj=1:Nw
watermark(ii,jj)=bitget(watermarked_image(ii,jj),1); if double(watermark(ii,jj))==1 watermark(ii,jj)=255; else
watermark(ii,jj)=0; end end end
watermark1=256*double(watermark);
%imwrite(watermark1,'watermark_Without_attack.bmp','bmp'); %%%%%%计算水印图像信噪比%%%%%%%%%% [x,map]=imread('ship.bmp'); [row,col]=size(x); M=row; N=col;
x_temp1 =double(watermarked_image)-double(x); x_temp2 = x_temp1(:); %%%二维转成一维向量 x_temp3 = abs(x_temp2);
x_temp4 = x_temp3'* x_temp3;%%%%内积 d_embed = x_temp4/(M*N); SDR1=255*255/d_embed; psnr1= 10*log10(SDR1);
%%%%%%%计算水印文件相关度%%%%%%%%% file_name='watermark_Without_attack.bmp'; iWatermark = imread(file_name); dWatermark = double(iWatermark); NC=corr2(dWatermark,watermark1);
35
%%%%%%计算水印文件信噪比%%%%%%%% psnr2=psnr(dWatermark,watermark1);
%%%%%%显示结果%%%%%%%%%%%%%% figure(2)
imshow(watermark1,[])
title(strcat('Detected Watermark',' PSNROfWatermarkedImage=',num2str(psnr1),' PSNROfWatermark=',num2str(psnr2),' NC=',num2str(NC)));
%% END------------------------------------------------------------------%%
36