KCF全称为KernelCorrelation Filter 核相关滤波算法。相关滤波算法算是判别式跟踪,主要是通过核相关滤波器使用给出的样本去训练一个判别分类器,判断跟踪到的是目标还是周围的背景信息。主要使用轮转矩阵对样本进行采集,使用快速傅里叶变化对算法进行加速计算。

相关滤波器是根据之前的MOSSE算法改进的,可以说是后来CSK、STC、Color Attributes等tracker的鼻祖。Correlation Filter(以下简称CF)源于信号处理领域,后被运用于图像分类等方面。而Correlation Filter应用于tracking方面最朴素的想法就是:相关是衡量两个信号相似值的度量,如果两个信号越相似,那么其相关值就越高,而在tracking的应用里,就是需要设计一个滤波模板,使得当它作用在跟踪目标上时,得到的响应最大,最大响应值的位置就是目标的位置。

android opencv追踪图像 opencv kcf跟踪_滤波算法


在跟踪的过程中,我们只需要把以上模板与当前帧的图像作相关操作,将得到的响应结果中最大的那点对应坐标作为目标在当前帧位置就可以了(相当于在2维上平移我们的模板)。然后,模板的更新方式可以按照如下的方式进行:

android opencv追踪图像 opencv kcf跟踪_KCF基本原理_02

KCF算法基本原理

1.在第一帧中通过HOG检测得到目标图像,循环矩阵对样本进行处理,得到大量的虚拟样本,通过这些样本训练分类器,而这些大量的虚拟样本的计算可以得益于循环矩阵的快速计算而得到迅速的处理。

2.相关滤波,就是寻找两幅图片的相关性,通过大量的样本学习得到一个模板,也就是数字信号处理中的冲激响应,然后,以下一帧图片作为输入,寻找输出中相应最大的点即为最相似的点,也就是新目标的位置。

3.在创建模板的相关滤波的算法中,用到了核函数(其实就是数学上的最小二乘法的一种应用,得到一个函数用来处理数据,使得训练的模板与实际值之间的差值最小),通过找到能使显示输出的目标位置与理想目标位置之间的误差最小的核函数,在该算法中用到的是岭回归函数,训练的目的就是去找到这样一个函数使得误差最小,然后带入输入,求其极值即可得到新的目标位置。