目标跟踪算法之相关滤波器(一):MOSSE

2023-10-27

前言
MOSSE: David S. Bolme, J. Ross Beveridge, Bruce A. Draper, Yui Man Lui. “Visual Object Tracking using Adaptive Correlation Filters.” CVPR2010

一、相关的理解

在信号处理中,有一个概念–相关性(correlation):描述两个因素之间的联系。相关性分为cross-correlation(互相关:两个信号之间的联系)和auto-correlation(自相关:本身在不同频域的相关性)。
互相关是用来度量两个信号在某个时刻的相似程度,对于机器视觉领域来说就是指两个图像patch的互相匹配的程度。

1、相关操作
图像的相关公式:
在这里插入图片描述
其中h称为相关核(Kernel),具体到每一个像素表示为:
在这里插入图片描述
在这里插入图片描述
注:Input Image为输入的图像。Kernel为相关核 ,也可以称作我们提前训练好的滤波器模板。Output image即为输出响应图像。
步骤:
(1)滑动核,使其中心位于输入图像的f(i,j)像素上
(2)利用上式求和,得到输出图像的g(i,j)像素值
(3) 重复上面操纵,直到求出输出图像的所有像素值

2、卷积操作
图像的卷积公式:
在这里插入图片描述
其中h称为卷积核(Kernel),具体到每一个像素表示为:
在这里插入图片描述
在这里插入图片描述
步骤:
(1)将卷积核围绕中心旋转180度
(2)滑动核,使其中心位于输入图像的f(i,j)像素上
(3) 利用上式求和,得到输出图像的g(i,j)像素值
(4)充分上面操纵,直到求出输出图像的所有像素值

3、相关和卷积的差异
(1)卷积将核旋转了180度。
(2)物理意义:相关可以反应两个信号相似程度,卷积不可以。
(3)卷积满足交换律,相关不可以。
(4)卷积可以直接通过卷积定理(时域上的卷积等于频域上的乘积)来加速运算,相关不可以。

二、相关滤波的原理

相关滤波的原理
相关滤波跟踪器就是通过互相关(cross-correlation)来定位目标当前帧所在位置的。响应图g最大值对应的位置即为当前时刻预测的目标位置,具体流程如下:
在这里插入图片描述
如果我们在时域内求解响应图,运算量巨大,那么如何利用卷积定理将其转换到频域???
用卷积来表示相关就是:
在这里插入图片描述
利用卷积定理转换到频域为:
在这里插入图片描述
所以将我们的输入图像和滤波器通过算法变换到频域后,直接将他们相乘,然后再变换回时域(也就是图像的空域)就可以得到响应图。

几点重要的解释:
(1)输入的图像是指目标检测区域(MOSSE的检测区域就是目标所在区域),可能是像素值也可能是提取的特征(eg.Hog,CN,DeepFeatures等)。
(2)滤波器(或者叫目标模板)的大小和检测区域的大小一样。因为相同大小的矩阵在频率域才可以点乘计算。
(3)当滤波器稍微偏移就会超出输入图像的范围,则需要填充数据(这就是卷积的边界效应)。然而在实际的相关滤波跟踪算法中,因为代码中直接就写频域的计算公式,所以我们不知道是如何填充边界的。常用的有三种填充方法,补零、补边界像素、循环图像,matlab中fft默认的是第三种。
在这里插入图片描述

三、MOSSE算法

假设有两个信号f和g,则两个信号的相关性(correlation)为:
在这里插入图片描述
其中f∗表示f的复共轭。correlation的直观解释就是衡量两个函数在某个时刻相似程度。而将correlation filter应用与跟踪最简单的想法就是:两个信号越相似,其相关值越高。在跟踪中,就是找到与跟踪目标响应最大的项。
作者提出的滤波器叫做Minimum Output Sum of Squared Error filter(MOSSE)(误差最小平方和滤波器)。按照前面的思路,我们需要找到一个滤波器,使其在目标上的响应最大,则如下公式:
在这里插入图片描述
其中g表示响应输出,f表示输入图像,h表示滤波模板。
显然,我们要是想获得响应输出,只需确定滤波器模板h即可。上式的计算是进行卷积计算,这在计算机中的计算消耗很大,因此作者对上式进行快速傅里叶变换(FFT),这样卷积操作经过FFT后就变成了点乘操作,极大的减少了计算量。关于图像卷积和滤波的一些知识请参考【图像卷积和滤波】。上式变成如下形式:
在这里插入图片描述
为了方便描述,将上式写成如下形式:
在这里插入图片描述
有了上面的式子,那么后面跟踪的任务就是找到H∗了:
在这里插入图片描述
但是在实际跟踪的过程中,我们要考虑到目标外观变换等因素的影响,所以需要同时考虑目标的m个图像作为参考,从而提高滤波器模板的鲁棒性,所以作者提出了MOSSE这个模型。

MOSSE模型公式如下
在这里插入图片描述
因为上式的操作都是元素级别的,因此要想找到H,只要使其中的每个元素(w和v是H中每个元素的索引)的MOSSE都最小即可。因此上式可以转换为如下形式:
在这里插入图片描述
对上式求偏导,并使偏导为0即可。即:
在这里插入图片描述
以下求导都是常量,涉及到复数的求导:
在这里插入图片描述
解得H为:
在这里插入图片描述
上式就是滤波器的模板公式。

但是在跟踪中怎么得到滤波器H呢?Fi和Gi又该怎么获取?
在作者的文章中,对跟踪框(groundtruth)进行随机仿射变换(一次线性变换,y=ax+b,a控制缩放和旋转,b控制平移),获取一系列的训练样本fi,而gi是由高斯函数产生,并且其峰值位置是在fi的中心位置。获得了一系列的训练样本和结果之后,就可以计算滤波器h的值。注意:这里的f,g,h的size大小都相同。
模型更新
作者为了让滤波器对于形变、光照等外界影响具有更好的鲁棒性,采取了如下的模板更新策略:
在这里插入图片描述
将滤波器的模型公式分为分子和分母两个部分,每个部分都分别进行更新,更新参数为η。其中At和At−1分别表示的是当前帧和上一帧的分子。

总结
在目标跟踪中相关滤波的基本思路:在初始帧中,给定目标区域,用最小二乘法,训练得到滤波模板H;在下一帧中,通过滤波模板H与新目标F进行相关操作,得到输出响应G,G中最大值对应着目标在下一帧中的位置。(其中特征用的是原始像素)

参考文章
1、MOSSE 添加链接描述
2、相关滤波跟踪(MOSSE)添加链接描述
3、ICCV2010跟踪算法MOSSE原理及代码解析添加链接描述

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

目标跟踪算法之相关滤波器(一):MOSSE 的相关文章

随机推荐

  • Java-IO字节流与字符流

    IO流的常用流 输入流 输入字节流和输入字符流 将硬盘的文件输出到Java内存 输出流 输出字节流和输出字符流 从内存写到磁盘中 缓冲 缓冲的字面意思是减缓冲击力比如 看视频比较卡 暂停缓存一会 1 字节输入流 FileInputStrea
  • 附件预览实现

    kkFileView演示首页kkFileView 在线文件预览
  • 【基础汇总】——python数据分析必备三大工具

    目录 前言 一 numpy 1 数组创建 2 数组运算 3 矩阵运算 二 pandas 1 数据结构 2 数据处理 2 1 数据结构与描述性统计 2 2 切片访问与缺失处理 2 3 多表合并 三 matplotlib 1 matplotli
  • 3D建模前景是不是很不错?虽然如此,但也需正视每一个行业

    其实所有行业都是一样的 没有什么容易的 只不过游戏建模这一行是偏向于技术的 一个好的建模师月薪10k 是很常见的 但这个需要有自己刻苦学习 不断积累沉淀的成果 不可能报个培训班学习6个月就能拿到的 希望一出来就月入过万的 这个几乎是不可能的
  • 前端初学3

    hr标签的扩展及部分特殊符号的表示 文章目录 hr标签的扩展及部分特殊符号的表示 hr标签的扩展 一 hr的颜色变化 二 hr的宽度变化 三 hr的位置 特殊符号 一 标签显示 二 首行缩进 三 其他特殊符号 总结 hr标签的扩展 hr标签
  • 计算机cpu和内存不足,电脑内存不足的解决方法

    电脑内存不足的解决方法 内存是计算机中重要的部件之一 它是与CPU进行沟通的桥梁 计算机中所有程序的运行都是在内存中进行的 因此内存的性能对计算机的影响非常大 下面是jy135小编收集整理的电脑内存不足的解决方法 欢迎阅读 步骤一 右击计算
  • Pygame(三)画圆

    Pygame 三 画圆 作业代码 画一个矩形 要求 左上角在 100 100 宽为200 高为60 边框颜色为蓝色 作业代码 def homework01 画一个矩形 要求 1 画一个矩形 要求 左上角在 100 100 宽为200 高为6
  • 使用VmWare安装黑苹果系统

    目录 1 介绍 2 破解安装VMware 3 unlocker解锁虚拟机 3 1 关闭VMware相关的进程 3 2 执行安装命令 4 VmWare创建虚拟机 5 下载并配置镜像以及虚拟机设置 5 1 修改镜像 5 2 修改虚拟机安装路径文
  • 机器学习技术(七)——有监督学习之逻辑回归算法原理及实操

    机器学习技术 七 有监督学习之逻辑回归算法原理及实操 文章目录 机器学习技术 七 有监督学习之逻辑回归算法原理及实操 一 引言 二 逻辑回归算法原理 三 实践案例介绍 1 数据集及需求 2 导入相关依赖库 3 读取并查看数据 4 数据预处理
  • Windows下安装VTK8.2.0

    Windows下安装VTK8 2 0 1 依赖 VS2017 Qt5 cmake 2 前期准备 2 1 访问vtk官方下载VTK8 2 0源码 VTK源码下载地址 https vtk org download 2 2 配置环境变量 配置CM
  • 插入新结点到指定结点的指定位置

    ul li 北京 li li 上海 li li 重庆 li ul 要求 插入新的节点 li 天津 li 到 li 上海 li 这个节点 1 如上海节点是最后一个节点插入到该节点的 li 上海 li 的后面 2 否则插入到该节点的前面
  • 国际电话组件封装使用以及vuephonenumberinput属性解读

    phone number input 组件描述 国际电话输入组件 适用场景 电话号码输入框 特点 包含各个国家的区号 输入一串号码 可给出是否是正确号码的校验结果 灵活性 可变性强 可满足绝大多数场景下的业务需要 props props t
  • 论文笔记:Positive-incentive Noise

    2022 TNNLS 中心思想是 噪声并不一定是有害的 1 CV问题中的噪声 以图像分类为例 对图像加入适量的噪声后再训练 识别准确率反而上升了 再以目标检测为例 从遥感影像中做飞机检测 一般都是把飞机紧紧框住 然后做模型训练 如果把飞机的
  • Ubuntu 晚上睡觉时希望关闭笔记本屏幕而保持挖矿程序正常运行,如何实现呢?

    背景 在笔记本上持续跑挖矿程序 编辑文档 写程序和调试程序 以及其他程序使用都没影响 只是风扇一直有点声音 外壳出风口区域略热 意图 晚上睡觉时希望关闭笔记本屏幕而保持挖矿程序正常运行 如何实现呢 Ubuntu 笔记本长期开机运行程序 关闭
  • 【JVM】Java内存区域与内存溢出异常

    JVM Java内存区域 链接 Java内存区域 Java虚拟机 运行时数据区域 线程独占 程序计数器 各个线程都有一个独立的程序计数器 记录正在执行的虚拟机字节码指令的地址 Java虚拟机栈 线程私有 与线程拥有相同的生命周期 虚拟机栈描
  • unity把切好的图集导出

    以前的博客有介绍怎么切割图片 https blog csdn net qq 42661974 article details 84258719 首先创建一个脚本 放在Editor文件夹中 using UnityEngine using Un
  • 基数排序的简单介绍

    一 基数排序原理 将需要排序的数列统一为相同位数的数 不足的在前面补0 确定执行轮数MAX 创建0 9的桶 因为数字只有从0 9 然后 从最低位开始 依次进行一次排序 这样从最低位排序一直到最高位排序完成以后 就变成一个有序序列 二 基数排
  • 全网最牛,接口测试mock详细总结,彻底打通接口测试...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • spark SQLQueryTestSuite sql 自动化测试用例

    把SQL 添加到自动化测试用例 sql core src test resources sql tests inputs 目录存放原始的SQL sql core src test resources sql tests results存放S
  • 目标跟踪算法之相关滤波器(一):MOSSE

    前言 MOSSE David S Bolme J Ross Beveridge Bruce A Draper Yui Man Lui Visual Object Tracking using Adaptive Correlation Fil