OpenTLD 代码
首先要
1:compile 其中是一些cpp文件,使用mex命令可以产生 mexw32文件,这部分牵涉到c和matlal 混编,有关mexfunction 和mxarray ,还是第一次接触,查了点资料写了个小测试cpp mex一下可以通过,然后继续:
2: runtld 这里是将参数初始化的部分 patchsize = [15 15];这句在TLD 的论文里有就是以15*15作为一个patch
opt.p_par_init = struct('num_closest',10,'num_warps',20,'noise',5,'angle',20,'shift',0.02,'scale',0.02);
opt.p_par_update = struct('num_closest',10,'num_warps',10,'noise',5,'angle',10,'shift',0.02,'scale',0.02);
这两句论文的5.6部分也提及了,就是第一帧选了框之后 提取初始的正样本,不是一个而是200 了,对选的框周围10个框进行旋转,移动,放大放小等变化产生的,而负样本没有经过这些变化就是 initial bounding box 周围的背景框
[bb,conf] = tldExample(opt); 这句话讲 初始化信息输入tldExample 脚本,进行另一部分工作。
3 :tldExample 里面包含进一步具体的初始化
opt.source = tldInitSource(opt.source); 对opt里的source域更改,添加了source.idx这个field 如果是图片序列则 添加 source.file域。
source.idx = 1:length(source.files); 可见 idx 就是图片序列的编号
这种不断变化的变量 有时候让读者 很是头疼,不仅要记得名字还要记住经过几个脚本后变量内容的变化
figure(2); set(2,'KeyPressFcn', @handleKey);这其实是设置一个nested funtion作为回调函数,意思大概 就是 只要按下键 就调用handleKey 函数。
tldInitFirstFrame 就是根据input 文件的第一张图片让你画一框 或者是调用摄像头
source = tldInitFirstFrame(tld,opt.source,opt.model.min_win); 这一句对source 添加了source.im0 表示第一帧图片,source.bb 表示框的座标
tld = tldInit(opt,[]); 初始化tld这个 global 变量 因为已经选择了框 所以可以对detector初始化, 对于tracker 用的是 opencv提供的光流算法函数,所以这个不用作者自己再写什么东西。
4:tldInit 后续。。。