-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLK_update.m
49 lines (44 loc) · 1.45 KB
/
LK_update.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
% --------------------------------------------------------
% MDP Tracking
% Copyright (c) 2015 CVGL Stanford
% Licensed under The MIT License [see LICENSE for details]
% Written by Yu Xiang
% --------------------------------------------------------
%
% update the LK tracker
function tracker = LK_update(frame_id, tracker, img, dres_det, is_change_anchor)
%update kcf
tracker = kcf_update( img,tracker);
medFBs = tracker.medFBs;
if is_change_anchor == 0
% find the template with max FB error but not the anchor
medFBs(tracker.anchor) = -inf;
[~, index] = max(medFBs);
else
[~, index] = max(medFBs);
tracker.anchor = index;
end
% update
tracker.frame_ids(index) = frame_id;
tracker.x1(index) = tracker.bb(1);
tracker.y1(index) = tracker.bb(2);
tracker.x2(index) = tracker.bb(3);
tracker.y2(index) = tracker.bb(4);
tracker.patterns(:,index) = generate_pattern(img, tracker.bb, tracker.patchsize);
% update images and boxes
BB = [tracker.x1(index); tracker.y1(index); tracker.x2(index); tracker.y2(index)];
[I_crop, BB_crop] = LK_crop_image_box(img, BB, tracker);
tracker.Is{index} = I_crop;
tracker.BBs{index} = BB_crop;
% compute overlap
dres.x = tracker.bb(1);
dres.y = tracker.bb(2);
dres.w = tracker.bb(3) - tracker.bb(1);
dres.h = tracker.bb(4) - tracker.bb(2);
num_det = numel(dres_det.fr);
if isempty(dres_det.fr) == 0
o = calc_overlap(dres, 1, dres_det, 1:num_det);
tracker.bb_overlaps(index) = max(o);
else
tracker.bb_overlaps(index) = 0;
end