水印 截屏攻击 matlab,请教matlab抵抗旋转攻击的水印提取代码

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

请教matlab抵抗旋转攻击的水印提取代码

在pudn上下载了一个代码,发现提取水印的代码都是限定了图片的大小,如果图片的大小改变了代码就会报错。而进行旋转攻击后图片的大小是要改变的,请问这时候怎么提取水印啊?

谁有能抵抗旋转攻击的水印植入和提取代码啊?讲一讲原理也好。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%function averagemark=putout(X,Y)

%函数作用:对含水印图象,用原始图象比较然后提取出水印

%输入变量:X,原始图象的像素值,Y,嵌入水印后的图象

%输出变量:averagemark,提取的水印图象求的平均

%实验不妨固定小波包变换结构为:

%1    2    5    6        13    14

%3    4    7    8        15    16

%9    10        17    18

%11    12        19    20

%21    22

%23    24

%    25    26

%    27    28

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function averagemark=putout(X,Y)

%对原始图象进行小波包变换(实验用固定结构的小波包变换,没有使用验证密码来随机改变这个小波包的%变换结构)

%把X进行三次小波变换,小波基为db1

%一级小波包变换

[ca1,ch1,cv1,cd1]=dwt2(X,'db1');

%二级小波包变换

[ca1_a,ca1_h,ca1_v,ca1_d]=dwt2(ca1,'db1');

[ch1_a,ch1_h,ch1_v,ch1_d]=dwt2(ch1,'db1');

[cv1_a,cv1_h,cv1_v,cv1_d]=dwt2(cv1,'db1');

[cd1_a,cd1_h,cd1_v,cd1_d]=dwt2(cd1,'db1');

%三级小波包变换

[ca1_aa,ca1_ah,ca1_av,ca1_ad]=dwt2(ca1_a,'db1');

[ca1_ha,ca1_hh, ca1_hv, ca1_hd]=dwt2(ca1_h,'db1');

[ca1_va,ca1_vh, ca1_vv, ca1_vd]=dwt2(ca1_v,'db1');

[ch1_ha,ch1_hh, ch1_hv, ch1_hd]=dwt2(ch1_h,'db1');

[ch1_va,ch1_vh, ch1_vv, ch1_vd]=dwt2(ch1_v,'db1');

[cv1_aa,cv1_ah, cv1_av, cv1_ad]=dwt2(cv1_a,'db1');

[cv1_da,cv1_dh, cv1_dv, cv1_dd]=dwt2(cv1_d,'db1');

%组织每块小波块,并标上序号

W1= ca1_aa;

W2=ca1_ah;

W3= ca1_av;

W4=ca1_ad;

W5=ca1_ha;

W6=ca1_hh;

W7=ca1_hv;

W8=ca1_hd;

W9=ca1_va;

W10=ca1_vh;

W11=ca1_vv;

W12=ca1_vd;

W13=ch1_ha;

W14=ch1_hh;

W15=ch1_hv;

W16=ch1_hd;

W17=ch1_va;

W18=ch1_vh;

W19=ch1_vv;

W20=ch1_vd;

W21=cv1_aa;

W22=cv1_ah;

W23=cv1_av;

W24=cv1_ad;

W25=cv1_da;

W26=cv1_dh;

W27=cv1_dv;

W28=cv1_dd;

W=[W1 W2 W3 W4 W5 W6 W7 W8 W9 W10 W11 W12 W13 W14 W15 W16 W17 W18 W19 W20 W21 W22 W23 W24 W25 W26 W27 W28];

%对小波块进行模糊分类

%首先对纹理强度模糊分类

%首先计算每个小波块中小波系数大于1的像素数目,记录在number中

for k=0:27

temp=W(1:32,32*k+1:32*k+32);

num=0;

for i=1:32

for j=1:32

if temp(i,j)>0

num=1+num;

end

end

end

%number(k+1)=num;

% end

%计算每块小波系数的隶属度

%计算对small的隶属度A_small

if num<=400

A_small=1;

end

if (num>400)&(num<=450)

A_small=(450-num)/(450-400);

end

if (num>450)

A_small=0;

end

%计算对middle的隶属度A_middle

if num<=400

A_middle=0;

end

if (num>400)&( num<=450)

A_middle =(num-400)/(450-400);

end

if (num>450)&( num<=500)

A_middle =1;

end

if (num>500)&( num<=550)

A_middle =(550-num)/(550-500);

end

if num>500

A_middle=0;

end

%计算对big的隶属度A_big

if num<=500

A_big=0;

end

if (num>500)&(num<=550)

A_big=(num-500)/(550-500);

end

if (num>550)

A_big=1;

end

%得到模糊分类的结果.返回的结果1代表是small,2代

%表是middle,3代表是big;

if A_small==max([A_small;A_middle;A_big])

fuzzy_result_Texture(k+1)=1;

end

if A_middle==max([A_small;A_middle;A_big])

fuzzy_result_Texture(k+1)=2;

end

if A_big==max([A_small;A_middle;A_big])

fuzzy_result_Texture(k+1)=3;

end

end

%对每个小波块进行能量大小的模糊分类。

%(1)计算每个小波块的能量,值存在e中

e=zeros(1,28);

for k=0:27

temp=W(1:32,32*k+1:32*k+32);

sum=0;

for i=1:32

for j=1:32

sum=temp(i,j)^2+sum;

end

end

e(1+k)=sum;

end

%(2)对每个小波块的能量按小到大排列得到排名号

%注:最大为28号,最小为1号。排名号存在变量paiming

%中

paiming=zeros(1,28);

for i=1:28

for j=i+1:28

if e(i)<=e(j)

s=0; t=1;

else

s=1; t=0;

end

paiming(i)=paiming(i)+s;

paiming(j)=paiming(j)+t;

end

end

paiming=paiming+1;

%计算每块小波块的隶属度

%计算对small的隶属度B_small

for i=1:28

if paiming(i)<=5

B_small(i)=1;

end

if (paiming(i)>5)&(paiming(i)<=10)

B_small(i)=(10-paiming(i))/(10-5);

end

if paiming(i)>10

B_small(i)=0;

end

end

%计算对middle的隶属度B_middle

for i=1:28

if paiming(i)<=5

B_middle(i)=0;

end

if (paiming(i)>5)&( paiming(i)<=10)

B_middle(i) =(paiming(i)-5)/(10-5);

end

if (paiming(i)>10)&( paiming(i)<=15)

B_middle(i) =1;

end

if (paiming(i)>15)&( paiming(i)<=20)

B_middle(i) =(20- paiming(i))/(20-15);

end

if paiming(i)>20

B_middle(i)=0;

end

end

%计算对big的隶属度B_big

for i=1:28

if paiming(i)<=15

B_big(i)=0;

end

if (paiming(i)>15)&( paiming(i)<=20)

B_big(i)=(paiming(i)-15)/(20-15);

end

if paiming(i)>20

B_big(i)=1;

end

end

%得到模糊分类的结果.返回的结果1代表是small,2代

%表是middle,3代表是big;

for i=1:28

if B_small(i)==max([B_small(i);B_middle(i);B_big(i)])

fuzzy_result_Energy(i)=1;

end

if B_middle(i)==max([B_small(i);B_middle(i);B_big(i)])

fuzzy_result_Energy(i) =2;

end

if B_big(i)==max([B_small(i);B_middle(i);B_big(i)])

fuzzy_result_Energy(i) =3;

end

end

%根据模糊规则得到最后的分类结果,存在变量B中,1代%表small,3代表big

for i=1:28

if (fuzzy_result_Texture(i)==3)&( fuzzy_result_Energy(i)==1)

B(i)=3;

end

if (fuzzy_result_Texture(i)==3)&( fuzzy_result_Energy(i)==2)

B(i)=2;

end

if (fuzzy_result_Texture(i)==3)&( fuzzy_result_Energy(i)==3)

B(i)=1;

end

if (fuzzy_result_Texture(i)==2)&( fuzzy_result_Energy(i)==3)

B(i)=1;

end

if (fuzzy_result_Texture(i)==2)&( fuzzy_result_Energy(i)==2)

B(i)=2;

end

if (fuzzy_result_Texture(i)==2)&( fuzzy_result_Energy(i)==1)

B(i)=2;

end

if (fuzzy_result_Texture(i)==1)&( fuzzy_result_Energy(i)==3)

B(i)=2;

end

if (fuzzy_result_Texture(i)==1)&( fuzzy_result_Energy(i)==2)

B(i)=1;

end

if (fuzzy_result_Texture(i)==1)&( fuzzy_result_Energy(i)==1)

B(i)=3;

end

end

%根据B中的值得到相应的水印嵌入强度,存放在 q中

for i=1:28

if B(i)==1

q(i)=0.06;

end

if B(i)==2

q(i)=0.11;

end

if B(i)==3

q(i)=0.15;

end

end

%对含水印图象也做三次小波变换,然后分出小波块

%把Y进行同样的三次小波变换,小波基为db1

%一级小波包变换

[hca1,hch1,hcv1,hcd1]=dwt2(Y,'db1');

%二级小波包变换

[hca1_a,hca1_h,hca1_v,hca1_d]=dwt2(hca1,'db1');

[hch1_a,hch1_h,hch1_v,hch1_d]=dwt2(hch1,'db1');

[hcv1_a,hcv1_h,hcv1_v,hcv1_d]=dwt2(hcv1,'db1');

%三级小波包变换

[hca1_aa,hca1_ah,hca1_av,hca1_ad]=dwt2(hca1_a,'db1');

[hca1_ha,hca1_hh,hca1_hv, hca1_hd]=dwt2(hca1_h,'db1');

[hca1_va,hca1_vh, hca1_vv, hca1_vd]=dwt2(hca1_v,'db1');

[hch1_ha,hch1_hh, hch1_hv, hch1_hd]=dwt2(hch1_h,'db1');

[hch1_va,hch1_vh, hch1_vv, hch1_vd]=dwt2(hch1_v,'db1');

[hcv1_aa,hcv1_ah, hcv1_av, hcv1_ad]=dwt2(hcv1_a,'db1');

[hcv1_da,hcv1_dh, hcv1_dv, hcv1_dd]=dwt2(hcv1_d,'db1');

%组织每块小波块,并标上序号

HW1= hca1_aa;

HW2=hca1_ah;

HW3= hca1_av;

HW4=hca1_ad;

HW5=hca1_ha;

HW6=hca1_hh;

HW7=hca1_hv;

HW8=hca1_hd;

HW9=hca1_va;

HW10=hca1_vh;

HW11=hca1_vv;

HW12=hca1_vd;

HW13=hch1_ha;

HW14=hch1_hh;

HW15=hch1_hv;

HW16=hch1_hd;

HW17=hch1_va;

HW18=hch1_vh;

HW19=hch1_vv;

HW20=hch1_vd;

HW21=hcv1_aa;

HW22=hcv1_ah;

HW23=hcv1_av;

HW24=hcv1_ad;

HW25=hcv1_da;

HW26=hcv1_dh;

HW27=hcv1_dv;

HW28=hcv1_dd;

HW=[HW1 HW2 HW3 HW4 HW5 HW6 HW7 HW8 HW9 HW10 HW11 HW12 HW13 HW14 HW15 HW16 HW17 HW18 HW19 HW20 HW21 HW22 HW23 HW24 HW25 HW26 HW27 HW28];

%比较每个小波块的差别,把每块的差别存在difference变量中

difference=HW-W;

%从difference中求出嵌入的每块水印的平均值

sum=zeros(32,32);

for i=0:27

temp=difference(1:32,32*i+1:32*i+32);

temp=temp/q(1,i+1);

sum=sum+temp;

end

averagemark=sum/28;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值