CVPR2015跟踪11---CMT跟踪算法分析

CMT跟踪算法分析

Clustering of Static-Adaptive Correspondences for Deformable Object Tracking

基本原理

对于物体的跟踪,基本的思路就是能够不断检测到物体的特征,从而不断地得到物体的位置实现跟踪。常见的有三种方法:

第一种 基于整体的模型来跟踪,比如说TLD,通过不断地更新模型(学习)来实现对物体特征的良好表示;

第二种 基于物体的局部来跟踪,就是将物体分解为多个部分,对每一部分进行单独的跟踪,采用光流等方法;

第三种 基于物体的特征点来跟踪,就是实时的检测物体的特征点,与一开始的特征点进行匹配的方法来实现物体的跟踪;

从上面的方法看现在的跟踪算法确实不能简单的用跟踪两个字来描述,里面的算法其实使用了物体检测、识别、机器学习等各种各样的方法。只要能框住视频中的一个物体,然后不断跟着,那么这个算法就是跟踪算法,跟踪算法的好坏也完全取决于能不能很好的框住。实际上,现在很多的跟踪算法就是检测算法。

CMT跟踪算法采用的是第三种思路,利用特征点。问题在于如何判断下一帧的图此中哪些特征点是与当前框中的特征点相匹配,只要很好地找到下一帧中物体的特征点,跟踪也就完成。因此,为了解决这个问题,作者做了一个看起来很简单的创新:就是计算特征点的相对位置,以框住中心来计算,对于不变形的物体而言,不管物体怎么移动旋转,其上面的特征点相对中心的距离是在缩放比例下确定的,因此可以由此来排除不是的特征点。

作者获取下一帧的特征点做了两部分工作:一部分是计算前一帧框中的特征点的光流,从而得到当前帧的特征点位置;另一部分是直接计算当前帧的特征点,并与上一帧的特征点进行匹配,得到相匹配的特征点,然后把两个得到的特征点都融合在一起,就得到了下一帧初步的特征点,然后再对特征点进行筛选,采用的就是上一段的方法。

算法流程


输入:视频帧,初始的物体框

输出:每一帧视频的物体框

要求:后继的物体框能够保持框住初始框框住的物体

步骤:

step 1:检测初始视频帧的所有特征点和特征描述,不仅仅是框内的点而是整个图像的点,所以在代码中可以看到,初始的database数据库的特征描述包含了前景和背景的特征。

step 2:将初始框内的特征描述赋给K1

step 3:从第二帧开始

step 4:检测视频帧的特征点P

step 5:将特征点P与O匹配,获取匹配的特征点M

step 6:利用上一帧的特征点使用光流法跟踪得到这一帧的特征点的位置T

step 7:融合特征点M和特征点T得到这一帧总的特征点K’

step 8:根据K’估计特征点相对初始帧特征的缩放比例

step 9:根据K’估计特征点相对初始帧特征的旋转比例

step 10:根据step 7,8,9得到的数据计算每一个特征点的Vote

step 11:采用聚类的方法选取最大的类也就是最一致的VoteC

step 12:将VoteC转换回特征点得到最后这一帧的有效特征点

step 13:判断VoteC的长度是否大于最小阈值,如果是则计算最后新的旋转矩形框的参数,如果不是也就是框太小了则输出0

step 1、2初始化

在CMT.cpp的代码中可以比较清晰的理解,就是使用OpenCV的Fast或者BRISK特征检测及特征描述。然后关键是存储有效的数据在数据库用于之后的匹配。

step 3,4,5,6分析

跟踪和匹配,基本思路就是先使用上一帧的特征点points_prev通过光流计算这一帧的对应位置points_tracked,然后反过来使用points_tracked计算对应的上一帧的位置points_back,然后对比points_prev和points_back之间的距离,按道理应该是接近0才对,但是因为光流计算有误差,因此,有的可能比较大,作者设置了一个阈值thr_fb 30,如果大于该阈值,表示得到的数据有误,删除该点。这么做目的是为了使跟踪得到的结果更可靠。

通过跟踪和特征匹配来获取这一帧的特征点,将跟踪和匹配的点融合在一起

step 8、9估计缩放比率和旋转角度

在开始已经存储了初始的特征点,而且是正则化的特征点points_normalized,计算两两之间的相对距离和相对角度。对于新的特征点,同样也是计算他们的相对距离和相对角度,并与初始的数据相除或相减,就得到变化。最后取他们的中位数作为整体的缩放比率和旋转角度。

step 10、11、12、13  去掉不好的特征点

vote的基本思想就是这些特征点相对中心的相对距离在把缩放、旋转考虑进去之后是相对不变的,也就是按道理下一帧的特征点相对中心的距离是不变的。但是由于图像本身的变化,不可能得到完全一样的相对位置,这个时候,有一些会距离中心近,有一些会偏差很大。


CMT算法评价

缺点:

1)没有跟新模型的过程,导致物体角度变化大时找不到特征点;

2)特征点太多时会导致速度变慢;

3)特征点少时就跟踪不上;

4)移动物体在很多情况下特征点会发生变化,很容易导致跟踪不上;

有点:

1)代码简单,C++和Python都有,使用OpenCV实现;

2)速度还是比较快的;

3)跟踪效果特别静态物体简直近乎完美;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值