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

2023-10-27

该特征集是由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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像隐写分析-Markov特征编程实现 的相关文章

  • C语言开发MicroPython模块(向module添加type)

    MicroPython向module添加type的方法 以及向type添加function的方法都是按照定义好的固定框架进行添加 module添加type的代码格式如下 include stdint h include stdio h in
  • M2芯片安装Anaconda和pytorch

    记录安装过程中遇到的问题 希望帮助到同样用mac的朋友 1 安装好Anaconda后 在启动台无法打开navigator 解决办法 终端输入 which anaconda navigator 返回navigator所在位置 command
  • SpringCloud Stream @EnableBinding注解过时

    EnableBinding源码中明确声明 该注解在从3 1版本开始被弃用 推荐我们使用函数编程的方式 我将给出一个生产者和消费者的使用案例 生产者案例 yml配置 server port 8801 spring application na

随机推荐

  • 最最最详细的springboot项目中集成微信扫码登入功能.步骤代码超级详细(OAuth2)

    说到登录注册 就会想到先要注册一个用户名 在进行登入 但是现在大多数的网站都集成了微信登入 不需要注册 给你一个二维码 微信一扫直接登录 这确实是十分便捷的 所以我们会尽量在项目中实现这一功能 减少用户操作 提高用户产品体验 由于微信是腾讯
  • MIPS架构下linux软浮点研究

    转自 http blog sina com cn s blog 67b113a10100zxx3 html 在嵌入式领域 为了节省成本和减少功耗 很多芯片都是没有浮点运算模块的 一般该模块叫做FPU float process unit 这
  • 爬虫写得好,牢饭吃到饱?

    先说一条新闻 一家专注大数据的数据服务提供商公司巧达科技 因为大量使用爬虫访问其他公司接口获取数据 整个公司被抓 最后不光管理者 干活的程序员也被抓了 很多学python的同学都接触过爬虫 即便是没接触过应该也听过 看到这种新闻你会不会心里
  • MySQL管理常用工具介绍

    1 mysql 该mysql不是指mysql服务 而是指mysql的客户端工具 e选项可以在Mysql客户端执行SQL语句 而不用连接到MySQL数据库再执行 对于一些批处理脚本 这种方式尤其方便 示例 2 mysqladmin mysql
  • 第一启富金:两大利空压顶 黄金受压收跌

    第一启富金官网显示 全球最大黄金上市交易基金 ETF 截至01月19日持仓量为976 21吨 较上日持平 本月止净增持0 55吨 香港第一金 投资者的注意力仍集中在美联储1月25日至26日的会议上 此前美联储官员暗示 他们将在3月开始加息以
  • Spring-MVC的文件上传下载,及插件的使用(让项目开发更节省时间)

    目录 一 概述 1 介绍 2 讲述 二 上传 三 下载 四 jrebel的使用 五 多文件上传 给我们带来什么收获 一 概述 1 介绍 Spring MVC的文件上传下载是指在Spring MVC框架中实现文件的上传和下载功能 文件上传是指
  • 【Python基础】深拷贝,浅拷贝和赋值

    浅拷贝 在含有多层对象的字典 列表 集合中 浅拷贝只拷贝父对象 不会拷贝父对象内部的可变子对象 语法 copy copy 深拷贝 只要被拷贝对象含有可变子对象 程序就会重新申请一块内存空间把被拷贝对象的值复制一份存放到该内存空间中 语法 c
  • 前端面试话术集锦第 15 篇:高频考点(React常考进阶知识点)

    这是记录前端面试的话术集锦第十五篇博文 高频考点 React常考进阶知识点 我会不断更新该博文 1 HOC 是什么 相比 mixins 有什么优点 很多人看到高阶组件 HOC 这个概念就被吓到了 认为这东西很难 其实这东西概念真的很简单 我
  • JAVA基础day04

    package com atguigu exer 1 创建一个名为TestArray的类 在main 方法中声明array1和array2两个变量 他们是int 类型的数组 2 使用大括号 把array1初始化为8个素数 2 3 5 7 1
  • redis优化-5.redis主从复制问题处理

    1 读写分离 1 1复制数据延迟 Redis复制数据的延迟由于异步复制特性是无法避免的 延迟取决于网络带宽和命令阻塞情况 比如刚在主节点写人数据后立刻在从节点上读取可能获取不到 需要业务场景允许短时间内的数据延迟 对于无法容忍大量延迟场景
  • 动态规划系列之「最长递增子序列的个数」

    673 最长递增子序列的个数 给定一个未排序的整数数组 找到最长递增子序列的个数 示例 1 输入 1 3 5 4 7 输出 2 解释 有两个最长递增子序列 分别是 1 3 4 7 和 1 3 5 7 示例 2 输入 2 2 2 2 2 输出
  • 计算机编程入门先学什么最好?

    看完其他知友的回答 我认为他们的观点过于局限 并没有真正切中问题的要害 我们不妨换个角度 站在更高一层来看这个问题 计算机编程入门先学什么最好 计算机入门最应该学的是 Linux 而非任何的编程语言 这篇文章4600字 有点长 如果你能耐心
  • spark 读取avro文件

    1 引入依赖
  • FastCFS同步复制机制简介

    FastCFS同步复制机制简介 本篇文章转载于 FastCFS 作者 余庆 大佬的 FastDFS分享与交流 公众号 上一篇文章介绍了 FastCFS 采用数据分组的做法 一个数据分组的几个节点 如三个节点即三副本 之间是 Master S
  • ConvTranspose2d 的简单例子理解

    文章目录 参考 基础概念 output padding 简单例子 stride 2 step1 step2 step3 参考 逆卷积的详细解释ConvTranspose2d fractionally strided convolutions
  • 面试题总结------1

    参考自 https vue3js cn interview 1 css渐进增强和优雅降级 渐进增强 针对低版本浏览器进行构建页面 保证最基本的功能 然后再针对高级浏览器进行效果 交互等改进和追加功能达到更好的用户体验 渐进增强观点则认为应关
  • matlab求解最优化问题(数学建模)

    matlab求解最优化问题 数学建模 1 线性规划 matlab中线性规划优化计算方法和实例 在matlab中用于线性规划优化计算的是linprog 函数 公式 x fval exitflag output lambda linprog c
  • C++知识系列:#和##

    总结 是连接字符串的 是粘合成一个名字的 参考 C 中的 和 是干嘛用的
  • 程序员必知的21个命令

    在这篇文章里 我们将要一睹能快速分析文本数据 如日志 报告等 的最方便工具 很多时候 我们需要的数据并不存储在我们的本机上 所以首先 我们要知道如何链接到远程服务器上并使用它 为此 使用SSH最为合适 SSH 即Secure Shell 是
  • 图像隐写分析-Markov特征编程实现

    该特征集是由Shi 1 等人在当时提出的一种新的特征 其思想是DCT系数之间有一定的变化关系 该特征使用马尔可夫转移概率来描述DCT之间的关系 先计算DCT系数水平 垂直 对角方向的差值 使用块内和块间的转移概率作为图像的特征 假设使用F