图像隐写分析-Markov特征编程实现
该特征集是由Shi【1】等人在当时提出的一种新的特征,其思想是DCT系数之间有一定的变化关系。该特征使用马尔可夫转移概率来描述DCT之间的关系,先计算DCT系数水平、垂直、对角方向的差值,使用块内和块间的转移概率作为图像的特征。
假设使用F(u,v)来表示一个完整的DCT系数矩阵,DCT系数的排列方式直接使用8×8的DCT系数替换原始图像同位置的像素。接下来沿着四个不同的方向计算出水平方向、垂直方向、对角线和次对角线矩阵, 分别用来表示这四个矩阵的方式如下:
经过上述计算一共得到了四个矩阵,每个矩阵的尺寸是(2T+1)×(2T+1)个元素,很明显在实际的隐密分析中要寻找适合的数值T。在实验过程中,如果直接使用原始矩阵作为特征,则特征集的维度会很大。为此,并根据实验的观察,对DCT系数采用了这样的预处理:在所有的DCT系数中,假如它的绝对值大于4,那么就将它的数值变为4,正负号保持不变。在处理过后矩阵的维度变为
(2×4+1)×(2×4+1)=81,一共得到的特征总数为4×81=324维。
该算法的要点在于,隐密算法会导致图像在水平、垂直、对角线和次对角线的差分数值发生变化,并且通过阈值将矩阵的维度大大降低。在该隐密分析特征中,也使用了二阶统计量,在实验中有不错的检测效果。在0.2嵌入率的情况下对于其他算法可以达到97%左右的准确率,但于F5算法的检测效果较差。
原始的Markov特征,维度高达81×4=324,而且原始的Markov特征未经校准。校准可以提高特征对嵌入信息的敏感度,同时减少图像到图像之间的转换带来的变化,所以对该特征进行校准并简化。
即使一个8×8块中的不同DCT模式是正交的,相邻的DCT系数也可能呈现相互关联。Markov特征在相同的8×8块内捕获相似空间频率的DCT系数之间的残差块依赖性。由于扩展DCT特征是DCT系数之间的块间依赖关系,所以合并它们是有意义的。合并的另一个动机是因为两个特征集在性能上相辅相成。例如,扩展DCT特征集可以更好地检测JHide & Seek,而校准的Markov特征集可以更好地检测F5。
实现代码
依旧是使用matlab实现:
function y=Markov81feature(dctinsteadim,dctinsteadJ2)
%输入
%dctinsteadim 原始图像的dct系数
%dctinsteadJ2裁剪图像的dct系数 四个方向均裁剪4个像素
%大家要理解这个校正的方法 就是使用原始图像的参数 与四个方向去掉四个像素之后的参数做差值
%输出
%81维Markov校正特征
arrv1=circshift(dctinsteadim,[0,-1]);
arru1=circshift(dctinsteadim,-1);
arru1v1=circshift(arrv1,-1);
%移位矩阵
Fh=dctinsteadim-arru1;
Fv=dctinsteadim-arrv1;
Fd=dctinsteadim-arru1v1;
Fm=arru1-arrv1;
Mh=zeros(9);
Mv=zeros(9);
Md=zeros(9);
Mm=zeros(9);
%矩阵尺寸 行 列
Su=512;
Sv=512;
Fh(Fh>4)=4;
Fv(Fv>4)=4;
Fd(Fd>4)=4;
Fm(Fm>4)=4;
Fh(Fh<-4)=-4;
Fv(Fv<-4)=-4;
Fd(Fd<-4)=-4;
Fm(Fm<-4)=-4;
addresult=0;
%---------------J1-----------------
%Mh计算
for i=-4:4
ix=i+5;
for j=-4:4
iy=j+5;
for u=1:Su-2
for v=1:Sv
if Fh(u,v)==i&&Fh(u+1,v)==j
addresult=addresult+1;
end
end
end
chushu=size(find(Fh(1:Su-1,:)==i));
Mh(ix,iy)=addresult/chushu(1);
addresult=0;
end
end
%Mv计算
for i=-4:4
ix=i+5;
for j=-4:4
iy=j+5;
for u=1:Su
for v=1:Sv-2
if Fv(u,v)==i&&Fv(u,v+1)==j
addresult=addresult+1;
end
end
end
chushu=size(find(Fv(:,1:Sv-1)==i));
Mv(ix,iy)=addresult/chushu(1);
addresult=0;
end
end
%Md计算
for i=-4:4
ix=i+5;
for j=-4:4
iy=j+5;
for u=1:Su-2
for v=1:Sv-2
if Fd(u,v)==i&&Fd(u+1,v+1)==j
addresult=addresult+1;
end
end
end
chushu=size(find(Fd(1:Su-1,1:Sv-1)==i));
Md(ix,iy)=addresult/chushu(1);
addresult=0;
end
end
%Mm计算
for i=-4:4
ix=i+5;
for j=-4:4
iy=j+5;
for u=1:Su-2
for v=1:Sv-2
if Fm(u+1,v)==i&&Fm(u,v+1)==j
addresult=addresult+1;
end
end
end
chushu=size(find(Fm(1:Su-1,1:Sv-1)==i));
Mm(ix,iy)=addresult/chushu(1);
addresult=0;
end
end
%---------------J2-----------------
Jarrv1=circshift(dctinsteadJ2,[0,-1]);
Jarru1=circshift(dctinsteadJ2,-1);
Jarru1v1=circshift(Jarrv1,-1);
%移位矩阵
JFh=dctinsteadJ2-Jarru1;
JFv=dctinsteadJ2-Jarrv1;
JFd=dctinsteadJ2-Jarru1v1;
JFm=Jarru1-Jarrv1;
JMh=zeros(9);
JMv=zeros(9);
JMm=zeros(9);
JMd=zeros(9);
%矩阵尺寸 行 列
JSu=504;
JSv=504;
JFh(JFh>4)=4;
JFv(JFv>4)=4;
JFd(JFd>4)=4;
JFm(JFm>4)=4;
JFh(JFh<-4)=-4;
JFv(JFv<-4)=-4;
JFd(JFd<-4)=-4;
JFm(JFm<-4)=-4;
addresult=0;
%---------------J2-----------------
%Mh计算
for i=-4:4
ix=i+5;
for j=-4:4
iy=j+5;
for u=1:JSu-2
for v=1:JSv
if JFh(u,v)==i&&JFh(u+1,v)==j
addresult=addresult+1;
end
end
end
chushu=size(find(JFh(1:JSu-1,:)==i));
JMh(ix,iy)=addresult/chushu(1);
addresult=0;
end
end
%Mv计算
for i=-4:4
ix=i+5;
for j=-4:4
iy=j+5;
for u=1:JSu
for v=1:JSv-2
if JFv(u,v)==i&&JFv(u,v+1)==j
addresult=addresult+1;
end
end
end
chushu=size(find(JFv(:,1:JSv-1)==i));
JMv(ix,iy)=addresult/chushu(1);
addresult=0;
end
end
%Md计算
for i=-4:4
ix=i+5;
for j=-4:4
iy=j+5;
for u=1:JSu-2
for v=1:JSv-2
if JFd(u,v)==i&&JFd(u+1,v+1)==j
addresult=addresult+1;
end
end
end
chushu=size(find(JFd(1:JSu-1,1:JSv-1)==i));
JMd(ix,iy)=addresult/chushu(1);
addresult=0;
end
end
%Mm计算
for i=-4:4
ix=i+5;
for j=-4:4
iy=j+5;
for u=1:JSu-2
for v=1:JSv-2
if JFm(u+1,v)==i&&JFm(u,v+1)==j
addresult=addresult+1;
end
end
end
chushu=size(find(JFm(1:JSu-1,1:JSv-1)==i));
JMm(ix,iy)=addresult/chushu(1);
addresult=0;
end
end
final=(Mm+Mh+Mv+Md)/4;
finalJ=(JMm+JMh+JMv+JMd)/4;
y=final-finalJ;
y=y(:);
% disp(size(dctinsteadim));
% disp(size(dctinsteadJ2));
% disp(Mm);
% disp(Mh);
% disp(Mv);
% disp(Md);
% disp(JMm);
% disp(JMh);
% disp(JMv);
% disp(JMd);
% disp(y);
end
【1】SHI Y Q, CHEN C, CHEN W. A Markov Process Based Approach to Effective Attacking JPEG Steganography[C].International Workshop on Information Hiding, 2006:249-264.
上一篇: CTF-隐写术(十)
下一篇: 光流文件(.flo)转图片(.png)