目标跟踪之MOSSE算法(C++版本配置及原理简介)

MOSSE算法(Minimum Output Sum of Squared Error)是相关滤波用于目标跟踪的鼻祖,可以说是目标跟踪入门学习的第一步。由于作者没有给出C代码,所以网上的C代码五花八门,本文参考博客,对其写的C代码进行编译,并推导MOSSE跟踪的相关公式,及对MOSSE跟踪流程进行介绍。
操作平台:Ubuntu14.04
推荐C++源码:https://github.com/mint-deeplearning/mosse_tracker
论文及推荐Matlab源码(本文不做介绍):https://github.com/xingqing45678/Mosse_CF

一、代码运行

代码相当简洁,令人舒适,在Linux底下,直接输入sudo cmake .进行编译,再输入sudo make进行编译生成可执行文件mosse,输入./mosse save.avi(注意将需要跟踪的视频save.avi放在可执行文件的同一级目录下),在第一帧使用鼠标右键画出目标跟踪框,即可实现跟踪。
在这里插入图片描述

二、原理简介

2.1相关概念

相关是用来衡量两个信号相似程度的概念,两个信号越相似,相关值越大。因此,在目标跟踪的过程中,以当前帧训练一个模板(滤波器),并与下一帧进行相关运算,相关值最大的位置即下一帧目标的位置。
相关公式:
在这里插入图片描述
卷积公式
在这里插入图片描述

两者关系如下
在这里插入图片描述
可以发现卷积和相关在公式上相差一个负号,由于卷积定理(空域卷积在傅里叶变换下可以变成频域点乘),为简化计算量,在相关滤波中,我们常借用卷积公式来实现相关计算,但切记,两者物理意义相差巨大,只是公式相似可以相互表示
如何简化计算?----将卷积变换到频域
在这里插入图片描述
简写为
在这里插入图片描述
其中 F ( h ( − n ) ) = H ∗ F(h(-n))=H^{*} F(h(n))=H, ⨀ \bigodot 表示点乘,*表示复共轭;由此可见,空域中复杂的相关运算变成频域中的点乘,通过反傅里叶变换便可以得到响应分布,极大提高了计算速度,降低了计算量(降为 O ( P l o g P ) O(PlogP) O(PlogP),P为跟踪窗内的像素数量)。

2.2MOSSE算法跟踪流程

2.2.1预处理

预处理主要包括:

1. 引入log函数,解决低照度照明的情况;

由于自然条件复杂,光照亮暗对图像像素值有极大的影响,引入log主要是提高对比度
2. 引入余弦窗,抑制边缘效应。

由于我们产生的滤波器的大小与我们检测图像的大小一致,只要稍微偏移就会超出,因此我们进行周期卷积时会对输入数据边界进行周期填补(如下图,该图来自博客CVPR2010跟踪算法MOSSE原理及代码解析),但同时也引入一些artifacts,而加余弦窗有利于突出中心,减少边缘效应(边缘效应主要是人为对边界填充的时候带来的)
图片来源于他人博客

注:
FFT卷积算法的一个问题是图像和滤波器被映射到圆环的拓扑结构上。换句话说,它将图像的左边缘连接到右边缘,将顶部连接到底部。在卷积过程中,图像在环形空间中旋转,而不是像在空间域中那样平移。人为地连接图像的边界会引入一个影响相关输出的伪影。

2.2.2滤波器模板训练

首先,滤波器模板 H ∗ H^{*} H与目标区域 F F F进行相关运算,将在目标位置处得到最大响应值,如何表示这个响应值?作者引入高斯响应 G G G,即理想情况下,相关运算将以目标位置为中心,形成一个高斯响应图 G G G
滤波器模板 H ∗ H^{*} H计算公式为:
在这里插入图片描述
但是滤波器模板的训练只用一张图片肯定是不够的(通俗点可以理解为不可能从一个点来求出一条曲线,需要多次采样,得到许多张训练样本,及使用多个点来确定曲线----滤波器模板),实际应用中常常在目标位置附近进行大量的随机采样,通过最小二乘法来最小化误差的平方(Minimum Output Sum of Squared Error名字的由来)来得到滤波器模板 H ∗ H^{*} H。下面公式中,i对应第i张训练样本图像,每个训练样本都有对应的理想高斯输出
在这里插入图片描述
通过最小化滤波器与训练样本相关输出与理想高斯输出的差,得到最佳的滤波器模板 H ∗ H^{*} H
在这里插入图片描述
推导过程

⨀ \bigodot 表示点乘,在此处省略,另外 H ∗ 、 F H^{*}、F HF尺寸一样, H ∗ F = F H ∗ H^{*}F=FH^{*} HF=FH
m i n H ∗ = ∑ i = 1 m ∣ H ∗ F − G i ∣ 2 min_{H^{*}}=\sum_{i=1}^{m}{|H^{*}F-G_{i}|^{2}} minH=i=1mHFGi2
将公式写为每个像素点格式
m i n H w v ∗ = ∑ i = 1 m ∣ H w v ∗ F w v i − G w v i ∣ 2 min_{{H_{wv}}^{*}}=\sum_{i=1}^{m}{|H_{wv}^{*}F_{wvi}-G_{wvi}|^{2}} minHwv=i=1mHwvFwviGwvi2
欲使求出最佳的 H ∗ H^{*} H使上式子取得最小值,可以将整个式子对 H ∗ H^{*} H进行求导,使偏导等于零的 H ∗ H^{*} H即最佳模板。
0 = δ δ H w v ∗ ∑ i ∣ H w v ∗ F w v i − G w v i ∣ 2 0=\frac{\delta }{\delta H_{wv}^{*}}\sum_{i}^{}{|H_{wv}^{*}F_{wvi}-G_{wvi}|^{2}} 0=δHwvδiHwvFwviGwvi2
0 = δ δ H w v ∗ ∑ i ( H w v ∗ F w v i − G w v i ) ( H w v ∗ F w v i − G w v i ) ∗ 0=\frac{\delta }{\delta H_{wv}^{*}}\sum_{i}^{}{(H_{wv}^{*}F_{wvi}-G_{wvi})(H_{wv}^{*}F_{wvi}-G_{wvi})^{*}} 0=δHwvδi(HwvFwviGwvi)(HwvFwviGwvi)
0 = δ δ H w v ∗ ∑ i ( H w v ∗ F w v i ) ( H w v ∗ F w v i ) ∗ − ( H w v ∗ F w v i ) G w v i ∗ − G w v i ( H w v ∗ F w v i ) ∗ + G w v i G w v i ∗ 0=\frac{\delta }{\delta H_{wv}^{*}}\sum_{i}^{}{(H_{wv}^{*}F_{wvi})(H_{wv}^{*}F_{wvi})^{*}-(H_{wv}^{*}F_{wvi})G_{wvi}^{*}-G_{wvi}(H_{wv}^{*}F_{wvi})^{*}+G_{wvi}G_{wvi}^{*}} 0=δHwvδi(HwvFwvi)(HwvFwvi)(HwvFwvi)GwviGwvi(HwvFwvi)+GwviGwvi
0 = δ δ H w v ∗ ∑ i H w v ∗ F w v i H w v F w v i ∗ − H w v ∗ F w v i G w v i ∗ − G w v i H w v F w v i ∗ + G w v i G w v i ∗ 0=\frac{\delta }{\delta H_{wv}^{*}}\sum_{i}^{}{H_{wv}^{*}F_{wvi}H_{wv}F_{wvi}^{*}-H_{wv}^{*}F_{wvi}G_{wvi}^{*}-G_{wvi}H_{wv}F_{wvi}^{*}+G_{wvi}G_{wvi}^{*}} 0=δHwvδiHwvFwviHwvFwviHwvFwviGwviGwviHwvFwvi+GwviGwvi
由于第3、4项不包含 H w v ∗ H_{wv}^{*} Hwv,对其求导为0,故求导后:
0 = ∑ i [ F w v i H w v F w v i ∗ − F w v i G w v i ∗ ] 0=\sum_{i}^{}{[F_{wvi}H_{wv}F_{wvi}^{*}-F_{wvi}G_{wvi}^{*}]} 0=i[FwviHwvFwviFwviGwvi]
H w v = ∑ i = 1 F w v i G w v i ∗ ∑ i F w v i F w v i ∗ H_{wv}=\frac{\sum_{i=1}^{}F_{wvi}G_{wvi}^{*}}{\sum_{i}^{}{F_{wvi}F_{wvi}^{*}}} Hwv=iFwviFwvii=1FwviGwvi
简写为:
H w v = ∑ i F i G i ∗ ∑ i F i F i ∗ H_{wv}=\frac{\sum_{i}^{}F_{i}G_{i}^{*}}{\sum_{i}^{}{F_{i}F_{i}^{*}}} Hwv=iFiFiiFiGi

2.2.3跟踪过程中滤波器模板的更新

由于目标运动过程中存在遮挡,如果每帧都以上一帧目标所在位置进行更新有可能会将模板玷污,作者引入了学习率,使之前帧对模板的影响随着时间逐渐衰减,能在一定程度上抑制遮挡带来的问题。
更新公式如下:
在这里插入图片描述

  1. η \eta η 表示学习率,学习率越大,表示之前的目标外观对滤波器模板影响越小。
  2. A i A_{i} Ai表示当前帧滤波器模板分子, A i − 1 A_{i-1} Ai1表示上一帧分子,B同理。

跟踪完成!
参考博客
CVPR2010跟踪算法MOSSE原理及代码解析
相关滤波跟踪(MOSSE)
mosse跟踪算法c++实现
相关滤波跟踪·MOSSE算法的梳理

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值