1. 简介
TLD目标跟踪算法是Tracking-Learning-Detection算法的简称。这个视频跟踪算法框架由英国萨里大学的一个捷克籍博士生Zdenek Kalal提出。TLD将传统的视频跟踪算法的跟踪模块(Tracker)与检测模块(Detector)结合起来,同时加入了学习(Learning)的过程,使得跟踪的效果更佳稳定、可靠。目前算法作者Zdenek Kalal已经拿着这个算法开了公司,最新的版本已经更新到TLD 2.1。在github上作者给出了TLD源码的1.0版本。作者的开源代码是基于matlab的,也有人给出了c++实现,但是运行速度非常慢。
什么是跟踪模块(Tracker)与检测模块(Detector)呢?说白了,Tracker就是根据目标物体在视频流前面的帧中的位置,来预测其在当前帧中的位置;Detector就是在当前帧中根据目标物体的先验信息(形状色彩/灰度、各种特征等),来检测目标物体在当前帧中的位置。作者在2011年发表的文章中Tracker使用的是median flow tracker,detector则是一个级联分类器。对于当前帧i,通过Integrator将tracker与detector的输出结果进行判断整合,最终输出一个目标物体的位置,或者目标物体在i中不存在。TLD算法的突破在于其Learning模块,在不断预测的过程中不断更新正、负样本库,用于后续帧中目标物体的位置检测。
Zdenek Kalal自己录制了TLD算法的演示视频,效果很赞。在成功编译TLD源码并在一些视频跟踪的数据库中运行后发现TLD的跟踪效果确实很不错,并实现了实时跟踪。
2. 源码编译
编译环境: win7 64 bit, matlab2014b, visual studio 2012 64bit compiler, opencv2.4.11
编译过程参考作者源码的wiki。
若遇到问题有可能是下面几种情况:
a. opencv环境变量的设置问题
--solution:系统环境变量PATH中添加 C:\opencv2.4.11\opencv\build\x64\vc12\bin (设置为自己opencv的安装路径,注销计算机使得环境变量生效)
b. compile.m中libpath与include的配置问题
--solution:配置参考下面的图片(注意libpath与include最后一定要添加反斜杠!)
c. 提示没有FSPECIAL函数
--solution:更改为fspecial
3. TLD算法流程图: