对于TLD的研究,已有些时日。最开始的时候看Zdenek Kalal的论文,但是有很多啃不动的地方。看完只觉得了解了个大体框架,很多地方都不明白。后来,又看完了各位牛人的分析及讲解(大部分已转载到本博客,大家可以查阅),受益匪浅!但是觉得对很多问题还是不明白!好在网友【冷月无心】给我推荐了C++版本作者的论文,作者分析得很细,看完很受用,解除了很多困惑!最近,打算再根据C++源码深入地走一遍,并把源码功能详细分享给大家!希望后面学习使用TLD算法的朋友通过我的分析,能够不走那么多弯路,也欢迎朋友们和我一起讨论!废话就说到这里,开始分享。。。
1. buildGrid(frame1,box)
输入:
当前帧图像:frame1
初始边界框:box
输出:
所有边界框及其信息:vector<BoundingBox> grid
描述:
使用滑动窗法对整帧图像,按从上到下、从左到右的顺序,取边界框并记录其大
小、位置、尺度、与初始边界框(第一帧中手工所取)重叠度。其中,尺度取初
始边界框的1.2(S次方)倍,S取值为-10、-9、…、9、10。
2. getOverlappingBoxes(box,num_closest_init)
输入:
初始边界框:box
欲得到good_box(与初始边界框最相似的box)的个数:num_closest_init
输出:
最相似边界框:best_box
最相似的num_closest_init个边界框:vector<int> good_boxes
不重叠边界框:vector<int> bad_boxes
描述:
将所有边界框中,与初始框box重叠度最高的边界框信息赋给best_box。把所有重
叠度高于0.6的边界框归类到good_boxes;把所有重叠度低于阈值bad_overlap(读
取自parameters.yml,论文中为0.2)的边界框归类到bad_boxes。如果good_boxes
中边界框个数多于num_closest_init个,则从中取重叠率最高num_closest_init
个边界框good_boxes。
函数末尾调用getBBHull()函数的目的是,得到good_boxes中所有边界框能覆盖到
的最大边界。
3. classifier.prepare(scales):函数位于FerNNClassifier.cpp中。
输入:
所有有效尺度:scales
输出:
所有待获取2bitBP特征(位置):features
阈值:0.5*nstructs
初始化Posteriors、pCounter、nCounter
描述:
对特征提取的位置(均匀任选图像块中两点)进行选取(共计:蕨个数*特征位数
(二进制数位数)*尺度大小(21) 个),声明并初始化每个蕨的可信度、正样
本计数器、负样本计数器。
注:若存在说法看不明白的,请留言询问!
原发文章很多朋友回复问我要文章,这里发到百度网盘供大家下载!
论文下载:Robust Object Tracking Based on Tracking-Learning-Detection.pdf (提取密码:6sfx)
链接: http://pan.baidu.com/s/13yfWq 密码: 6sfx