High-Speed Tracking with Kernelized Correlation Filters
2015年的一篇论文,可参考:http://blog.csdn.net/carrierlxksuper/article/details/46461245。
另参考:http://www.skyoung.org/kcf-tracking-method/
其中提到了redge regression(岭回归),可参考:http://www.cnblogs.com/zhangchaoyang/articles/2802806.html
这篇论文的第一个创新点,是用回归的思想和相关滤波产生联系,10年的那篇论文是用滤波的思想。
其次是用到了循环矩阵的性质。所有的循环矩阵可以通过DFT变成对角矩阵(不明白)。而对角矩阵之间的运算是element-wise的,这个就频率域是一样的了。
然后是用到了kernel trick,将特征转换到高维。通过使用循环矩阵的性质,提高kernel regression的速度。
在计算kernel时,通过对角的性质,将其转换到频域,能很容易的得到kernel correlation。
然后是多通道,也就是用到了HOG特征,也是我最想了解的,可惜作者说的并不多。
最后提到了linear kernel,有句结论,要想能fast element-wise,要么选择多通道,要么选择多样本,但不能同时得到(不理解)。
下面分析下代码。
和CSK的代码相比,这个代码量增加了不少,增加了很多函数,慢慢看。
首先分析下tracker.m这个函数,因为这个函数和CSK太像了,从熟人开始下手。
和CSK一样,首先得到一个以目标为中心的高斯函数分布并进行汉明窗口的处理。
进入循环。首先进行灰度和图像大小的处理。至此分成了两部分。
如果是第一帧,则首先得到背景框,然后提取图像特征xf(傅里叶域,这个函数稍后分析),根据kernel的不同形式,选择不同的kernel表达式,训练得到alpha。保留得到的alpha和xf。保存中心点位置,并绘图。
如果不是第一帧,首先得到新来背景和背景对应的特征zf,根据kernel type的不同,选择不同的detection表达式,得到kzf,进而得到response最大的点,即中心点。后面就与第一帧一样了:得到背景框,然后提取图像特征xf,根据kernel的不同形式,选择不同的kernel表达式,训练得到alpha。和第一帧的不同的地方就在于xf和alpha需要更新。
下面要分析的是get_features函数与各种核的correlation函数