图像隐写分析-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.

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值