一种对目标形变、模糊不敏感的跟踪算法staple

文章下载链接:文章下载链接 
代码下载链接:Staple代码 
———————————————————————————————————————————— 
今天要讲的这篇文章也是基于相关滤波器(不懂相关滤波器的请看我前一篇文章)进行改进的一篇文章,发表在2016年CVPR上面,提出了一个新的想法,融合算法,使用HOG-KCF+color-KCF结合算法对目标进行跟踪,HOG特征对形变和运动模糊比较敏感,但是对颜色变化能够达到很好的跟踪效果,color特征对颜色比较敏感,但是对形变和运动模糊能够有很好的跟踪效果,同时使用两者融合能够解决大部分跟踪过程当中遇到的问题。作者在文章的开头就放出来这张图,图中很明显的可以看出,当颜色对目标影响过大时候(图中第二行),DSST对目标跟踪效果较好,当运动模糊对目标影响过大(图中第一行)DAT对目标跟踪效果较好。 
这里写图片描述

 

Abstract 

近些年来,基于相关滤波跟踪器的算法得到了很大的改进,已经能够达到很好的跟踪效果,14年的KCF,15年的SRDCF、HCF等算法,都已经达到了很高的精度,像HCF已经在OTB-50上达到了0.89的效果,但是美中不足的就是使用了深度学习特征之后速度相对来说比较慢一点,不能达到实时的要求。本文作者经过研究发现,以前算法的模型的学习还是很依赖于跟踪目标的空间信息,对变形的目标跟踪效果不是很好,但是使用颜色特征对目标进行学习能够很好的处理跟踪目标发生形变和运动模糊的问题,但是当光照条件变化的时候,颜色特征就表现的相对无力,这个时候使用HOG特征能够对光照变化的跟踪目标进行很好的跟踪。所以,作者就想到,使用一个融合互补因子在同一个回归框架当中能够很好的对这些因素进行很好的处理同时能够达到比较快的速度,80FPS,并且在跟踪效果上面也比大部分现有的跟踪算法效果要好。

 

 

本文算法思想 
这里写图片描述

这里写图片描述

 

这里说一下这个文章的框架思想,有助于看文章的小伙伴理解,首先先看上面一部分,就是这部分我截图出来的区域, 
先看紫色的线,先自动忽略绿色的线,上面这部分就是训练部分,当我们输入一张图片的时候,使用HOG特征对目标图片进行特征提取供我们的滤波器进行使用,学习。得到特征之后,根据相关滤波器的学习规则学习得到滤波模版,使用给定公式更新模版,蓝色的线学习结束; 
接下来看绿色的线,绿色的线就是使用颜色特征对滤波模板进行学习,然后使用给定的更新公式对学习到的模板进行更新,绿色线学习完毕。 

接下来就看下半部分,下半部分就是跟踪过程,上面学习了滤波器,怎么使用呢?就是下面这半部分了,首先基于上一帧学习到的位置pt处,使用给定大小的目标框标出大致目标位置所在,然后使用学习得到的两个滤波器模板对目标分别学习,就是图中紫色的线和绿色的线,紫色的线就是使用HOG模板学习的跟踪器对目标跟踪的结果,绿色的就是使用Color特征对目标图片学习的结果。然后得到对应的response map,使用给定的规则 
这里写图片描述对目标response map进行融合,得到最终的目标response map,然后就是一般的步骤,找到response map当中最大值的位置即为目标所在的位置,重复这个步骤直至跟踪结束。

 

本文创新点 

正如我前面所说的一样,作者在探究到这些因素之后,对整个影响因素和对跟踪器改变造成的变化之后决定使用融合因子的算法对目标进行跟踪。使用HOG特征和COLOR特征两种互补的特征因子对目标进行学习,融合跟踪结果,能够互补解决对方不能解决的问题,从而提升跟踪效果,同时不会对跟踪速度有较大的影响。

 

 

实验效果展示 

这里写图片描述
在标准序列集OTB-50上面的跟踪效果,效果还是很明显的提升

 

同时和在VOT2014上面表现比较好的几个跟踪算法做了一些比较。在精度上效果是最好的,在失败数上面排名第二和整体排名上面第三。 
这里写图片描述

### MATLAB与C语言的兼容性和集成方法 #### 调用C代码的方式 MATLAB提供了多种途径来调用C语言编写的程序,其中一种常用的方法是通过创建MEX文件。MEX文件是一种可以在MATLAB命令窗口内像内置函数一样被直接调用的动态链接库(DLL)。为了使C代码能够在MATLAB环境下运行,开发者需遵循特定的API规范编写源码,并利用MATLAB自带工具链完成编译过程[^1]。 对于希望在MATLAB中执行自定义C函数的情况,除了上述提到的MEX技术外,还可以借助于引擎API。该接口允许外部应用程序启动MATLAB实例作为计算服务器,从而间接实现了跨平台的数据交换和功能扩展。过需要注意的是,在实际应用过程中可能涉及到复杂的环境搭建以及权限管理等问题[^2]。 另外值得注意的一点是在处理FFT这类数值密集型操作时,虽然可以直接使用MATLAB内部优化过的快速傅里叶变换指令`fft()`来进行高效运算;但如果出于学习目的或其他特殊需求而自行开发了基于C/C++版本,则可以考虑先将其封装成共享对象形式然后再引入到脚本当中用于后续测试对比实验[^3]。 #### 实现具体接口的例子 下面给出一段简单的例子展示怎样把一个简单的C函数打包成为能在MATLAB里面使用的模块: 假设有一个名为`myFunction.c` 的 C 文件含有如下内容: ```c #include "mex.h" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double a; /* Check for proper number of arguments */ if (nrhs != 1) { mexErrMsgIdAndTxt("MATLAB:mynuminputs", "One input required."); } /* Get the value of the scalar input argument */ a = mxGetScalar(prhs[0]); plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL); *(mxGetPr(plhs[0])) = sin(a); // Example operation: compute sine } ``` 这段代码接受来自MATLAB的一个输入参数a,并返回其正弦值给MATLAB工作区变量b。要让这个C函数能被MATLAB识别并调用,需要按照以下步骤操作: 1. 将此`.c`文件保存至适当位置; 2. 打开MATLAB命令行界面,切换当前目录到存放有刚才那个`.c`文件的地方; 3. 输入 `mex myFunction.c` 来触发自动构建流程——这会生成相应的可执行二进制文件; 4. 成功之后就可以如同对待普通MATLAB函数那样简单地键入 `b=myFunction(pi/4)` 即可在MATLAB环境中获得结果了。 此外,当涉及更复杂的应用场景比如Simulink建模时,也可以通过配置Model Configuration Parameters下的Custom Code选项卡里的S-function或C-script节点指定路径指向预先准备好的第三方库文件(.lib,.dll),进而达成更加紧密的功能耦合效果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值