matlab求kcf算法响应图_matlab求kcf算法响应图_剖析KCF

本文深入浅出地介绍了Kernelized Correlation Filters (KCF)算法,从岭回归理论推导开始,探讨了循环矩阵、对偶空间、核函数在算法中的应用。通过循环矩阵与岭回归的结合,简化了运算复杂度。同时,讨论了核函数如何解决线性不可分问题,并详细阐述了模板图像获取、特征提取(f-HOG)和多尺度检测的过程。最后,分析了KCF算法在目标形变和遮挡情况下的局限性。
摘要由CSDN通过智能技术生成

6e35ea5179a3dd45c7f719a4712762d1.png

来源自我的博客

前言

核相关滤波算法是单目标跟踪领域一个举足轻重的算法,而kernelized correlation filters(KCF)是其原始形态,下面我以一个小白的角度慢慢揭开其神秘面纱。

(知乎的公式编辑跟mathjax有冲突,部分公式我用图片代替,如果阅读观感不好,请移步原博客)

1.岭回归理论推导

岭回归的理论比较简单,类似于一个单层神经网络加上一个正则项,不同于支撑向量机中的结构风险最小化,岭回归更像是一个逻辑回归,是在保证误差风险最小的情况下尽量使得结构风险小。另外支撑向量机对于高维数据的训练比较快,因为它只取对分类有影响的 support 向量。不过在此处 KCF 的训练样本也不多,所以二者其实都可以,再加上 KCF 中岭回归还引用了对偶空间、傅里叶变换以及核函数,二者的差别就比较小了。 ​ 岭回归的算法形式如下:

news_show_1289824.shtml

其中X 为特征矩阵,w 为权值,y 为样本标签/响应,其中每一项都采用了L2 范数的平方,即矩阵内所有元素的平方和。因此,该优化的关键在于求最优的 w,求解方法则是使用了最直接的拉格朗日乘子法:

e78e52015df70723a2b72d6934ae4208.png

我们假设当前的权重W和输出y都是一维向量,则矩阵的求导公式满足:

news_show_1289824.shtml

不过,由于后面要引入复频域空间,所以我们这里做一些微调:

news_show_1289824.shtml

其中,H 代表共轭转置,即在转置的同时将矩阵内所有元素变为其共轭形式,原因很简单:

news_show_1289824.shtml

2. 循环矩阵

2.1 循环矩阵的引入

由于在目标跟踪中定位目标时如果采用循环移位的方式定位其中心,则需要采用循环的方式逐步判断,这样做太耗时,因此作者引入了循环矩阵。这样做的话,我们的待选目标框不用移动,直接将原图像矩阵循环移位。以一维矩阵为例:

07660205fd3bd95804159a1eff6a3345.png

矩阵的每一行相对上一行都向右移动了一位,这里举这个矩阵例子是有用意的,通过该矩阵的n阶形式,我们可以轻松的实现任意矩阵 X 的右移

news_show_1289824.shtml 或者下移

news_show_1289824.shtml ,如:

4a9ff720801b68f1fb9b5504e2a6e99f.png

b2e54250e08e0e380d3237c695d5c592.png

2.2 循环矩阵的转换

循环矩阵本身是将循环移位的结果整合到了一个矩阵中,虽然可以将循环计算过程优化为矩阵运算,但对于图像这类二维矩阵,则会生成一个很大的循环矩阵,从而耗费内存。这里作者巧妙地引入了离散傅里叶变换(DFT),将循环矩阵X等价为:

news_show_1289824.shtml

其中 F 与离散傅里叶变换中的矩阵有所差异,

news_show_1289824.shtml 就是原矩阵的傅里叶变换,

diag是将矩阵变为对角形式,后面会详细解释。

先以一维矩阵为例来证明:

Step1 定义循环矩阵 X 的多项式函数为:

news_show_1289824.shtml

这里先说明一下,单位矩阵 I 其实也是一个循环矩阵,而

news_show_1289824.shtml 其实就是将矩阵

I所有元素右移

n 个单位。

Step2 求矩阵K的特征值和特征向量:

219abe885f2216ecbb26aad0af122b34.png

可以发现矩阵 K 的特征矩阵与 DFT 的变换矩阵 W 一致,再利用多项式矩阵的性质可知,循环矩阵 X 的特征值为

news_show_1289824.shtml , 利用矩阵与其特征值矩阵相似的特点, 可以很容易的证明该性质。

Step3 求循环矩阵 X 的特征值和特征向量:

1888e229461cc3959f23b02d9dea0c75.png

可以发现循环矩阵 X 的特征值就是其原矩阵 x 的离散傅里叶变换,对于循环矩阵的特征向量,推导过程如下:

6bc6febc24a5d5df282907edfdb4b756.png

在这里我们将

news_show_1289824.shtml替换为

DFT 变换矩阵

W ,利用矩阵对角化可知:

news_show_1289824.shtml

Step4 利用 DFT 变换矩阵 W 的性质修正 X :

通过观察可知 W 为对称矩阵,另外也可以轻松证明

news_show_1289824.shtml ,在这里呢,我们可以对W 进行适当地变换:

news_show_1289824.shtml 因此

news_show_1289824.shtml ,则

F 为酉矩阵,同时它也满足

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KCF(Kernelized Correlation Filter)算法是一种基于相关滤波器的目标跟踪算法,它在目标跟踪领域具有很高的实时性和准确性。 在Matlab中,可以通过以下步骤实现KCF算法: 1. 加载视频或像序列,并选择要跟踪的目标。 2. 提取目标的特征,例如HoG(Histogram of Oriented Gradients)特征或CNN(Convolutional Neural Network)特征。 3. 利用初始帧中的目标位置和特征,训练KCF模型。 4. 在后续的帧中,提取目标的特征,并使用KCF模型预测目标的位置。 5. 根据预测的位置,更新KCF模型,以适应目标的变化。 在Matlab中,可以使用MATLAB Computer Vision Toolbox中的vision.KCFTracker对象来实现KCF算法。该对象封装了KCF算法的实现细节,使得KCF算法的使用变得非常简单。 以下是一个简单的Matlab代码示例,展示了如何使用vision.KCFTracker对象实现KCF算法: ```matlab % 加载视频序列 video = VideoReader('example_video.mp4'); % 选择要跟踪的目标 target = [100, 100, 50, 50]; % [x, y, width, height] % 提取目标特征 features = extractFeatures(video.readFrame(), target); % 训练KCF模型 tracker = vision.KCFTracker(); initialize(tracker, features, target); % 在后续帧中跟踪目标 while hasFrame(video) frame = video.readFrame(); features = extractFeatures(frame, target); target = predict(tracker, features); imshow(frame); rectangle('Position', target, 'EdgeColor', 'g', 'LineWidth', 2); end ``` 在上述示例中,视频序列被加载并读取帧。然后,选择要跟踪的目标,并从初始帧中提取目标特征。使用提取的特征和目标位置,训练KCF模型。在后续的帧中,提取目标特征并使用KCF模型预测目标位置。最后,将目标位置绘制在帧中,并显示帧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值