一嫁乘、代碼
%查看MAMI在密鑰空間下得分布情況
M=zeros(1,100);
for i=1:power(2,8)
M(i)=myMAMI('Lena_R.bmp',96,i);
end
stem(M);
調(diào)用的子函數(shù)myMAMI
%對(duì)圖像的MAMI值進(jìn)行計(jì)算--2016.6.28
%1昆婿、讀取載密圖像C_M;
%2、利用密鑰k獲取隱寫路徑R蜓斧,[row,col]=randinterval(C_M,L,k);
%3仓蛆、將每個(gè)嵌入點(diǎn)的像素計(jì)算四個(gè)方向的消減相鄰像素值,用一個(gè)4*2*L的二維向量存儲(chǔ)起來(lái)挎春,
% D(i,j看疙,l)其中i表示方向豆拨,j表示指向,l表示對(duì)應(yīng)的像素點(diǎn)的位置
% 其中i:表示方向1-水平 2-垂直 3-主對(duì)角線 4-反對(duì)角線
% j:表示指向性:1-指向性 2-背向性
%4利用已給的公式計(jì)算出p(a)能庆、p(b)施禾、p(a,b),用大小為4*9二維向量Pa(i,j1)存放p(a),用大小為4*9二維向量Pb(i,j2)存放p(b),用大小為4*9*9的二維向量(i,j1,j2)存放p(a,b),其中i表示方向。
%6搁胆、設(shè)置增強(qiáng)區(qū)向量和減弱區(qū)向量
%7弥搞、計(jì)算MAMI值
%函數(shù)功能介紹:計(jì)算多方向關(guān)聯(lián)化互信息值MAMI
%輸入:載密圖像C_M、密鑰k渠旁、秘密消息長(zhǎng)度L
%輸出:MAMI
%輸入輸出格式:MAMI=myMAMI('Lena_R.bmp',96,100)
function MAMI=myMAMI(C_M,L,k)
%讀取載密圖像
s=imread(C_M);
[m,n]=size(s);
%獲取隱寫路徑R
[row,col]=randinterval(C_M,L,k);
%設(shè)置存放消減相鄰像素值得8個(gè)向量攀例,并初始化
D=zeros(4,2,L);
b=0;%計(jì)算邊界點(diǎn)的個(gè)數(shù)
%計(jì)算隱寫路徑上四個(gè)方向的消減相鄰像素值
for i=1:4
for j=1:2
for l=1:L
%排除邊界嵌入點(diǎn)
if row(l)==1 || col(l)==1 || row(l)==m || col(l)==n
b=b+1;%計(jì)算邊界點(diǎn)的個(gè)數(shù)
else
%水平指向性消減鄰域像素
if i==1 && j==1
D(i,j,l)=s(row(l)-1,col(l))-s(row(l),col(l));
end
%水平背向消減鄰域像素
if i==1 && j==2
D(i,j,l)=s(row(l),col(l))-s(row(l)+1,col(l));
end
%垂直指向消減鄰域像素
if i==2 && j==1
D(i,j,l)=s(row(l),col(l)-1)-s(row(l),col(l));
end
%垂直背向消減鄰域像素
if i==2 && j==2
D(i,j,l)=s(row(l),col(l))-s(row(l),col(l)+1);
end
%主對(duì)角線指向消減鄰域像素
if i==3 && j==1
D(i,j,l)=s(row(l)-1,col(l)+1)-s(row(l),col(l));
end
%主對(duì)角線背向消減鄰域像素
if i==3 && j==2
D(i,j,l)=s(row(l),col(l))-s(row(l)+1,col(l)-1);
end
%反對(duì)角線指向消減鄰域像素
if i==4 && j==1
D(i,j,l)=s(row(l)-1,col(l)-1)-s(row(l),col(l));
end
%反對(duì)角線背向消減鄰域像素
if i==4 && j==2
D(i,j,l)=s(row(l),col(l))-s(row(l)+1,col(l)+1);
end
end
end
end
end
Pa=zeros(4,9,'double');
Pb=zeros(4,9,'double');
Pab=zeros(4,9,9,'double');
%計(jì)算各個(gè)方向的P(a)、P(b)顾腊、P(a,b)的值粤铭,用向量二維向量Pa(i,j1)表示四個(gè)方向的P(a),二維向量Pb(i,j2)表示四個(gè)方向的P(b),三維向量Pab(i,j1,j2)表示四個(gè)方向的P(a,b)
for i=1:4
for j1=1:9
for j2=1:9
for l=1:9
%計(jì)算P(a)
if D(i,1,l)==j1-5
Pa(i,j1)=Pa(i,j1)+1/L;
end
%計(jì)算P(b)
if D(i,2,l)==j2-5
Pb(i,j2)=Pb(i,j2)+1/L;
end
%計(jì)算P(a,b)
if D(i,1,l)==j1-5 && D(i,2,l)==j2-5
Pab(i,j1,j2)=Pab(i,j1,j2)+1/L;
end
end
end
end
end
%計(jì)算MAMI的值
mamiZ=zeros(1,4,'double');%增強(qiáng)區(qū)互信值
mamiJ=zeros(1,4,'double');%減弱去互信息值
MAMI=0;
J=[11 12 13 20 21 22 29 30 31 32 40 41 42 50 51 52 53 60 61 62 69 70 71];%向量長(zhǎng)度為23
Z=[15 16 17 24 25 26 33 34 35 47 48 49 56 57 58 65 66 67];%向量長(zhǎng)度為18
for i=1:4
for j1=1:9
for j2=1:9
%計(jì)算減弱區(qū)互信息值mamiJ
for a=1:23
if (j2-1)*9+j1==J(a)
if Pa(i,j1)~=0 && Pb(i,j2)~=0 &&Pab(i,j1,j2)~=0
mamiJ(1,i)=mamiJ(1,i)+Pab(i,j1,j2)*log(Pab(i,j1,j2)/(Pa(i,j1)*Pb(i,j2)));
end
end
end
%計(jì)算增強(qiáng)區(qū)互信息值mamiZ
for b=1:18
if (j2-1)*9+j1==Z(b)
if Pa(i,j1)~=0 && Pb(i,j2)~=0 &&Pab(i,j1,j2)~=0
mamiZ(1,i)=mamiZ(1,i)+Pab(i,j1,j2)*log(Pab(i,j1,j2)/(Pa(i,j1)*Pb(i,j2)));
end
end
end
end
end
MAMI=MAMI+mamiZ(1,i)-mamiJ(1,i);%增強(qiáng)去減去減弱區(qū)
end
二投慈、結(jié)果展示
三承耿、存在問(wèn)題
1、提取攻擊的真密鑰k=100伪煤,但是為什么在k=100時(shí)加袋,多關(guān)聯(lián)方向互信息值MAMI不是最大的?
2抱既、增強(qiáng)區(qū)和減弱區(qū)的劃分方法是否對(duì)所有圖形都適用职烧?
3、p(a)防泵、p(b)蚀之、p(a,b)為0的情況下是否是可以不作計(jì)算?