function[PSNR,err]=dm_dct_fenkaui(step,a,attack_style,attack_strength)
% % %attack_style用于设置选择何种攻击
% % %step
% % %psnr返回峰值信噪比
% % %attack_strength用于控制攻击的强弱
% % %err
%%%%%%%%%%%%%%%%%%%%%%读入原始载体图像%%%%%%%%%%%%%%%%%%%%%%%%%%
[x,map]=imread('lena1.bmp');
[row,col]=size(x);
M=row;
N=col;
MN=col*row;
figure(1);imshow(x),colormap(map);
% figure(11),imhist(x);
x_source=x;
fun1=@dct2;
J1=blkproc(x,[8 8],fun1);
%%%%%%%%%%%%%%%%% 读入水印 图象 %%%%%%%%%%%%%%%%%
[m,mapm]=imread('qq5.bmp');
% figure(2),imshow(m),colormap(mapm);
% title('嵌入的水印图象','FontSize',8,'color','blue');
[rowm,colm]=size(m);MNm=rowm*colm;
Mm=rowm;
Nm=colm;
mm=m(1:MNm);
Rm=MNm/MN;
%%%%%%%%%%%%%%抖动量化实现水印信息的嵌入 %%%%%%%%%%%%%%%%%%%%%%
%%%%计算(i,k)处的频率,用来判断是否进行抖动量化
for i=1:M
for k=1:N
if mod(i,8)==0 || mod(k,8)==0;
fre(i,k)=1;
else
fre(i,k)=(((mod(i,8)-1)/16)^2+((mod(k,8)-1)/16)^2)^(1/2);
end
end
end
%%%计算(i,k)属于哪个快,用来判断如何进行抖动量化
for i=1:M
for k=1:N
block(i,k)=(M/8)*(ceil(i/8)-1)+ceil(k/8);
end
end
bl=block(M,N);
L=fix(bl/MNm);
z=mm;
num=1;
num1=1;
num2=1;
step=20;
for i=1:fix(MN*Rm)
d0(i)=-step/4;
d1(i)=d0(i)+step/2;
end
for i=1:M
for k=1:N
if fre(i,k)>0.25
J11(i,k)=J1(i,k);
else
if block(i,k)>L*MNm
J11(i,k)=J1(i,k);
else
if double(z(ceil(block(i,k)/L)))-255==0
J11(i,k)=round((J1(i,k)+d1(ceil(block(i,k)/L)))/step)*step-d1(ceil(block(i,k)/L));
else
J11(i,k)=round((J1(i,k)+d0(ceil(block(i,k)/L)))/step)*step-d0(ceil(block(i,k)/L));
end
end
end
end
end
fun2=@idct2;
J2=blkproc(J11,[8,8],fun2);
figure(3);
imshow(uint8(round(J2)));
imwrite(uint8(round(J2)),'dm_watermakered.bmp');
% K1=imread('dm_watermakered.bmp');
% figure(31),imhist(K1);
%
%
% %%%%%%%%%%%%%%%%% 计算合成信号的峰值信噪比 %%%%%%%%%%%%%%%%%%%%%%%%%
x_temp1=J2-double(x_source);
figure(10),imshow(uint8(round(100*x_temp1)));
imwrite((uint8(round(100*x_temp1))),'dm_chazhi.bmp');
x_temp2=x_temp1(:);
x_temp3=abs(x_temp2);
x_temp4=x_temp3'*x_temp3;
d_embed=x_temp4/(M*M);
SDR1=255*255/d_embed;
PSNA=10*log10(SDR1)
%%%%%%%%%%%%%%%%%%% 攻击 %%%%%%%%%%%%%%%%%%%%%%%%%%
% J2=imread('ss_watermakered.bmp');
% if attack_style==1
% %%%%%放大两倍的操作(缩小两倍)%%
% xxx1=imresize(J2,2,'bicubic');
% xxx2=imresize(xxx1,1/2,'bicubic');
% yy=double(xxx2);
% end
% if attack_style==2
% %%%%放大4倍的操作(缩小4倍)
% xxx1=imresize(J2,4,'bicubic');
% xxx2=imresize(xxx1,1/4,'bicubic');
% yy=double(xxx2);
% end
% if attack_style==3
% %%%%缩小1/4的操作
% xxx1=imresize(J2,3/4,'bicubic');
% xxx2=imresize(xxx1,4/3,'bicubic');
% yy=double(xxx2);
% end
% if attack_style==4
% xxx1=imresize(J2,2/4,'bicubic');
% xxx2=imresize(xxx1,4/2,'bicubic');
% yy=double(xxx2);
% end
% %%%% 3*3空域低通滤波
% if attack_style==5
% B=(1/9)*one(3,3);
% xxx2=filter2(B,J2);
% yy=double(xxx2);
% end
% % 4领域平均
% if attack_style==6
% B=[0 1 0;1 0 1;0 1 0]*(1/4);
% xxx2=filter2(B,J2);
% yy=double(xxx2);
% end
% % 8领域平均
% if attack_style==7
% B=[1 1 1;1 0 1;1 1 1]*(1/8);
% xxx2=filter2(B,J2);
% yy=double(xxx2);
% end
% %% (7)窗口中值滤波
% if attack_style==8
% xxx2=medfilt2(J2);
% yy=double(xxx2);
% end
% if attack_style==9
% %a1=input('Please input length of wondow a1:');
% %b1=input('Please input length of wondow b1:');
% a1=1;
% b1=3;
% xxx2=medfilt2(J2,[a1 b1]);
% save a1 a1;
% save b1 b1;
% yy=double(xxx2);
% end
% %%(8)裁剪
% if attack_style==10
% for i=128-44:128+45
% for j=128-45:128+44
% J2(i,j)=0;
% end
% end
% yy=double(J2);
% end
% if attack_style==11
% for i=128-64:128+63
% for j=128-64:128+63
% J2(i,j)=0;
% end
% end
% yy=double(J2);
% end
% if attack_style==12
% yy=imnoise(unit8(round(J2)),'gaussian',0,attack_strength);
% end
% if attack_style==13
% yy=imnoise(unit8(round(J2)),'jpeg_n.jpg','jpg','Quality',attack_strength);
% [yy,map]=imread('jpeg_n.jpg','jpg');
% end
% if attack_style>13
% yy=J2;
% end
% J3=blkproc(yy,[256 256],fun1);
% %%%%%%%%%%% 提取水印信息 %%%%%%%%%%%%%%%%%%%%%%
% t1=zeros(MNm,1);
% t0=zeros(MNm,1);
% t=1;
% for i=1:M
% for k=1:N
% if abs(J1(i,k))>yuzhi && t<=marksize && (i+k>2)
% mn(t)=(J3(i,k)-J1(i,k))/(a*J1(i,k));
% t=t+1;
% end
% end
% end
% if marksize<MNm
% mn(marksize+1:MNm)=mm(marksize+1:MNm);
% end
% %%%%%%%%%%%% 计算相关性 %%%%%%%%%%%%%%%%%
% sim=(sum(mn(1:MNm).*mm(1:MNm)))/((sum(mn(1:MNm).*mn(1:MNm)))^0.5)
评论0