欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

图像隐写分析-absNJ特征编程实现

程序员文章站 2022-05-15 14:18:26
...

Liu等人曾提出了基于相邻DCT密度的绝对值(Absolute values of the neighbouring joint density)特征,简称absNJ特征【1】。然而该特征使用的是低阶统计量,且检测效果一般。为了提高准确率,Hassan等对该特征进行了加强[38]。在原有特征的基础上,提取了DCT系数矩阵的块内和块间的高阶统计特征。使用块内和块间特征可提供各种不同类型的分析,块内特征基于每个DCT块的DCT系数之间的频率依赖性;另一方面,块间特征基于DCT块之间的空间依赖性。此外,作者建议使用DCT系数的第P阶功率而不是它们的普通一阶功率,这是经过实验证明的。

4.1 块内absNJ特征

对于尺寸为M×N的JPEG图像,将其划分为K×L个连续的子块,每个块的大小为8×8。令J表示其量化DCT系数,块内absNJ特征在水平和垂直方向分别使用 absNJ1h和absNJ1v表示。它们的计算方式如下述公式所示:
图像隐写分析-absNJ特征编程实现

4.2 块间absNJ特征

块间absNJ的特征在水平和垂直方向分别由absNJ2h和absNJ2v表示,他们的定义如下:
图像隐写分析-absNJ特征编程实现
图像隐写分析-absNJ特征编程实现

4.3 块内absJN强化特征

根据上文可知,原有absJN特征只进行了两个系数之间的统计分析。然而在隐密过程中,隐密算法会尽量减少统计特征上的改变,比如Outguess算法的纠错过程。这会导致低阶统计分析的效果较差。为了进一步提升检测效果,本章扩展原有特征,增添了高阶统计特征。这样absJN强化特征可以捕捉DCT系数之间更为复杂的关系,因此最终的特征将对秘密信息嵌入引起的变化更加敏感。为此提出了水平横向( absNJ3hh),水平垂直( absNJ3hv),垂直垂直(absNJ3vv )和垂直水平( absNJ3vh)方向的块内absNJ特征,其计算方式如下:
图像隐写分析-absNJ特征编程实现

4.4 块间absJN强化特征

对于块间的absJN特征,也存在同样的问题。所以本节使用同4.3章节同样的方法,对其进行强化,增添块间的高阶统计信息。横向水平,水平垂直,垂直-垂直和垂直-水平方向的块间absNJ特征分别由 absNJ4hh,absNJ4hv ,absNJ4vv 和absNJ4vh 表示,它们的计算方式如下:
图像隐写分析-absNJ特征编程实现

4.5 提取流程与预处理

量化DCT系数由矩阵J表示,令 表示DCT系数的各个元素, M,N分别为JPEG图像的尺寸的宽度和高度。 将前四小节提取的块内和块间的absNJ特征与absNJ强化特征进行组合,得到新的absNJ强化特征,它的提取方法和流程如图4.1所示。
图像隐写分析-absNJ特征编程实现
1.对于JPEG图像的量化DCT系数的绝对值,计算每个元素的功率P,并将其舍入到其最接近的整数,即
图像隐写分析-absNJ特征编程实现
上述的六个矩阵分别表示DCT系数的功率为P的原始矩阵,水平,垂直和对角的块内差分矩阵,最后两个矩阵为水平和垂直的块间差分矩阵。
3.为了减少提取特征的维数,在计算特征之前,DCT值将被变换到阈值T内。阈值函数由以下函数定义,并且对于原始absNJ特征T限于T = 5,对于强化特征取T = 3。
图像隐写分析-absNJ特征编程实现
图像隐写分析-absNJ特征编程实现
5.然而经过上述获取的特征只是单纯的载体图像的特征,为了得到对隐密信息相对敏感的特征,采用同第四章一样的“校准”法,将JPEG图像解压到空域后各方向裁剪4像素,再以同样的压缩质量因数保存为JPEG图像。使用相同的流程提取特征,将裁剪前后的图像的特征做差值,得到的就是“校准”特征。这使得absNJ强化特征对嵌入的信息尤为敏感。

代码部分

依旧是matlab实现的

function y=absNJN(x)
% 输入为灰度图像
[M,N]=size(x); %尺寸
K=M/8;
L=N/8;

%规划阈值
dct=x;
dct(dct>5)=5; %块内
dct(dct<-5)=-5;

dctinter=x;
dctinter(dctinter>3)=3;
dctinter(dctinter<-3)=-3;

%初始变量
a=0;
feature=zeros(1,200);
temp1=zeros(1,36);
temp2=zeros(1,36);
ttemp1=zeros(1,64);
ttemp2=zeros(1,64);
ttemp3=zeros(1,64);
ttemp4=zeros(1,64);
%------------------1 (3)------------------------------------
for x=0:5
for y=0:5
for k=0:K-1
  for l=0:L-1
     for m=1:8
         for n=1:7
             if dct(k*8+m,l*8+n)==x&&dct(k*8+m,l*8+n+1)==y
                a=a+1;
             end
         end
     end
  end
end
  temp1(1,x*6+y+1)=a/(56*K*L);
  a=0;
end
end

for x=0:5
for y=0:5
for k=0:K-1
  for l=0:L-1
     for m=1:7
         for n=1:8
             if dct(k*8+m,l*8+n)==x&&dct(k*8+m+1,l*8+n)==y
                a=a+1;
             end
         end
     end
  end
end
  temp2(1,x*6+y+1)=a/(56*K*L);
  a=0;
end
end
feature(1,1:36)=(temp2+temp1)/2;
temp1=temp1*0;
temp2=temp2*0;
%-------------1(6)------------------

for x=0:5
for y=0:5
for k=0:K-1
  for l=0:L-2
     for m=1:8
         for n=1:8
             if dct(k*8+m,l*8+n)==x&&dct(k*8+m,(l+1)*8+n)==y
                a=a+1;
             end
         end
     end
  end
end
  temp1(1,x*6+y+1)=a/(64*K*(L-1));
  a=0;
end
end

for x=0:5
for y=0:5
for k=0:K-2
  for l=0:L-1
     for m=1:8
         for n=1:8
             if dct(k*8+m,l*8+n)==x&&dct((k+1)*8+m,l*8+n)==y
                a=a+1;
             end
         end
     end
  end
end
  temp2(1,x*6+y+1)=a/(56*(K-1)*L);
  a=0;
end
end
feature(1,37:72)=(temp2+temp1)/2;
temp1=temp1*0;
temp2=temp2*0;
%-------------------3(11)------------------
%----nj3hh
for x=0:3
for y=0:3
for z=0:3
for k=0:K-1
  for l=0:L-1
     for m=1:8
         for n=1:6
             if dctinter(k*8+m,l*8+n)==x&&dctinter(k*8+m,l*8+n+1)==y&&dctinter(k*8+m,l*8+n+2)==z
                a=a+1;
             end
         end
     end
  end
end
  ttemp1(x*16+y*4+z+1)=a/(48*K*L);
  a=0;
end
end
end
%----nj3hv
for x=0:3
for y=0:3
for z=0:3
for k=0:K-1
  for l=0:L-1
     for m=1:7
         for n=1:6
             if dctinter(k*8+m,l*8+n)==x&&dctinter(k*8+m,l*8+n+1)==y&&dctinter(k*8+m+1,l*8+n+2)==z
                a=a+1;
             end
         end
     end
  end
end
  ttemp2(x*16+y*4+z+1)=a/(42*K*L);
  a=0;
end
end
end
%----nj3vv
for x=0:3
for y=0:3
for z=0:3
for k=0:K-1
  for l=0:L-1
     for m=1:6
         for n=1:8
             if dctinter(k*8+m,l*8+n)==x&&dctinter(k*8+m+1,l*8+n)==y&&dctinter(k*8+m+2,l*8+n)==z
                a=a+1;
             end
         end
     end
  end
end
  ttemp3(x*16+y*4+z+1)=a/(48*K*L);
  a=0;
end
end
end

%----nj3vh
for x=0:3
for y=0:3
for z=0:3
for k=0:K-1
  for l=0:L-1
     for m=1:6
         for n=1:7
             if dctinter(k*8+m,l*8+n)==x&&dctinter(k*8+m+1,l*8+n)==y&&dctinter(k*8+m+2,l*8+n+1)==z
                a=a+1;
             end
         end
     end
  end
end
  ttemp4(x*16+y*4+z+1)=a/(42*K*L);
  a=0;
end
end
end
feature(1,73:136)=(ttemp2+ttemp1+ttemp3+ttemp4)/2;
ttemp1=ttemp1*0;
ttemp2=ttemp2*0;
ttemp3=ttemp3*0;
ttemp4=ttemp4*0;
%-------------------3(16)------------------
%----nj4hh
for x=0:3
for y=0:3
for z=0:3
for k=0:K-1
  for l=0:L-2
     for m=1:8
         for n=1:7
             if dctinter(k*8+m,l*8+n)==x&&dctinter(k*8+m,l*8+n+1)==y&&dctinter(k*8+m,(l+1)*8+n)==z
                a=a+1;
             end
         end
     end
  end
end
  ttemp1(x*16+y*4+z+1)=a/(56*K*(L-1));
  a=0;
end
end
end

%-----nj4hv
for x=0:3
for y=0:3
for z=0:3
for k=0:K-2
  for l=0:L-1
     for m=1:8
         for n=1:7
             if dctinter(k*8+m,l*8+n)==x&&dctinter(k*8+m,l*8+n+1)==y&&dctinter((k+1)*8+m,l*8+n)==z
                a=a+1;
             end
         end
     end
  end
end
  ttemp2(x*16+y*4+z+1)=a/(56*(K-1)*L);
  a=0;
end
end
end

%-----nj4vv
for x=0:3
for y=0:3
for z=0:3
for k=0:K-2
  for l=0:L-1
     for m=1:7
         for n=1:8
             if dctinter(k*8+m,l*8+n)==x&&dctinter(k*8+m+1,l*8+n)==y&&dctinter((k+1)*8+m,l*8+n)==z
                a=a+1;
             end
         end
     end
  end
end
  ttemp3(x*16+y*4+z+1)=a/(56*(K-1)*L);
  a=0;
end
end
end

%-----nj4vh
for x=0:3
for y=0:3
for z=0:3
for k=0:K-1
  for l=0:L-2
     for m=1:7
         for n=1:8
             if dctinter(k*8+m,l*8+n)==x&&dctinter(k*8+m+1,l*8+n)==y&&dctinter(k*8+m,(l+1)*8+n)==z
                a=a+1;
             end
         end
     end
  end
end
  ttemp4(x*16+y*4+z+1)=a/(56*K*(L-1));
  a=0;
end
end
end

feature(1,137:200)=(ttemp2+ttemp1+ttemp3+ttemp4)/2;
feature=feature*10000;
y=feature;
end

[1] LIU Q, SUNG A H, QIAO M. Neighboring joint density-based JPEG steganalysis[C]. ACM, 2011.