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 後續。。。