相关滤波跟踪是当前目标检测与跟踪领域的一个研究热点,ICCV2010的这篇MOSSE算法可以说是入门必看,镇圈神作了。
一、目的:跟踪
一开始分不清跟踪和目标检测有什么不同,所以查了一些资料,以下只是我自己的理解:
区别于目标检测,跟踪最大的特点是处理的图像序列具有时效性(temporal data)。
跟踪的过程一般是在首帧进行目标识别(indentify)定位(locate),在后序的帧进行目标匹配(找到最相似的目标),再定位;目标检测方法是这个过程中的一种选择。此外,跟踪还有处理一些旋转、尺度变化等问题的功能,并具有一定的预判能力(比如:扫地机器人溜进桌子下面不见了,跟踪也能定位出一个大致的位置)。
不负责任地来说,检测是跟踪的基础,跟踪是高于检测的。
二、原理:相关滤波
接触相关滤波的时候我最容易搞混的地方就是各种空域 频域的转换,所以整理的时候我会特别把在空域还是频域特别标注出来。
2.1 滤波
滤波是一个图像处理,尤其图像增强时常用的方法(比如低通滤波器:把低频部分的信息保留,高频部分的信息滤掉)。很明显,滤波 是一个频域里的概念,但考虑到MOSSE的相关性从空域的角度比较好理解,因此需要暂时把频域滤波转换到空域滤波。
通过卷积模板,可以实现从频域到空域的转换,所以在空域中,滤波基本上通过一个矩阵模板(窗)来实现。简单讲,就是把滤波看做领域操作算子,利用 给定图像像素 周围像素的值 决定 此像素 最终的输出值。也就是说,输入图像与输出结果在像素上是一一对应的关系,滤波器只是一个操作算子。
2.2 相关
相关一开始是信号处理领域的一个概念,用来描述两个信号的相似程度。
空域里的相关公式:
g = f ⨂ h g=f\bigotimes h g=f⨂h
g ( i , j ) = ∑ f ( i + k , j + l ) ⋅ h ( k , l ) g(i,j)=\sum f(i+k,j+l)\cdot h(k,l) g(i,j)=∑f(i+k,j+l)⋅h(k,l)
(其中 f f f是输入信号, h h h是相关核/滤波器, g g g是空域里的响应图。)
步骤:
(1)滑动核,使其中心位于输入图像的$f(i,j)$像素上 (2)利用上式求和,得到输出图像的$g(i,j)$像素值 (3)充分上面操纵,直到求出输出图像的所有像素值
这里参考了(https://blog.youkuaiyun.com/qq_17783559/article/details/82254996)的解释。
很明显,输入信号与响应之间在像素值上是一一对应的,输入信号的信息与核越相似,响应值就越高。
因此,只要在下一帧里利用 h h h找到响应值最高的位置就可以定位实现跟踪了,但问题在于:这样的方法计算太慢了。
考虑将空域的相关转化到频域提高运算速度。
三、算法:Minimum Output Sum of Squared Error (MOSSE) 滤波器
3.1 引入卷积算子
为了使空域的相关滤波转换到频域滤波以提高运算速度,引入卷积算子(注意:这里的卷积算子并没有什么实际的物理意义,可以看做一个把空域相关滤波转到频域的桥梁)。
卷积公式:
g = f ∗ h g=f\ast h g=f∗h
g ( i , j ) = ∑ f ( i − k , j − l ) ⋅ h ( k , l ) g(i,j)=\sum f(i-k,j-l)\cdot h(k,l) g(i,j)=∑f(i−k,j−l)⋅h(k,l)
很明显,相关运算是把 h h h旋转了180°的卷积运算,所以 g = f ⨂ h = f ∗ h ∗ g=f\bigotimes h=f\ast h^* g=f⨂h=f∗h∗
通过卷积定理:函数卷积的傅立叶变换是函数傅立叶变换的乘积,上式可以变换为 F F T ( g ) = F F T ( f ) ⋅ F F T ( h ∗ ) FFT(g)=FFT(f)\cdot FFT(h^*) FFT(g)=FFT(f)⋅FFT(h∗)
表示为 G = F ⋅ H ∗ G=F\cdot H^* G=F⋅H∗
但实际中很难通过 H ∗ = G F H^*=\frac{G} {F} H∗=FG得到滤波器 H H H
3.2 引入最小二乘法
最小二乘法是曲线拟合时的一种方法,通过最小化误差的平方来寻找数据的最佳函数配比。
在MOSSE中通过最小化实际输出的卷积和期望输出卷积之间的方差来得到合适的滤波器(minimizes the sum of squared error between the actual output of the convolution and the desired output of the convolution),即求解
min H ∗ ∑ i ∣ F i ⋅ H ∗ − G i ∣ 2 \min_{H^*}\sum_{i}\left | F_{i}\cdot H^*-G_{i} \right |^{2} H∗mini∑∣Fi⋅H∗−Gi∣2
(其中 i i i 表示第 i i i个训练样本)
为了优化运算(element-wise),将上式转化为
min H ∗ ∑ i ∣ F i ω ν ⋅ H ω ν ∗ − G i ω ν ∣ 2 \min_{H^*}\sum_{i}\left | F_{i\omega\nu}\cdot H_{\omega\nu}^*-G_{i\omega\nu} \right |^{2} minH∗∑i