代码关键点记录:成功不远了!O(∩_∩)O 哈哈~
1. Input : load_video_info.m 读入视频文件groundtruth_rect.txt(里面是4个一组的点,x,y, width ,height ?),得到有用的参数:
target_sz = [ground_truth(1,4), ground_truth(1,3)]; 得到的是目标的尺寸(这里好像是第一张的,也就是一样大)
这个值会用来计算空间带宽的值。通常一个m*n的目标,它的空间带宽为 sqrt(m*n)/16. 也就是后面的:
output_sigma = sqrt(prod(target_sz)) * output_sigma_factor;
这个参数后面再看
sz = floor(target_sz * (1 + padding));
实际计算的时候将目标放大为两倍来计算。
得到sz以后有一部非常重要的操作:
[rs, cs] = ndgrid((1:sz(1)) - floor(sz(1)/2), (1:sz(2)) - floor(sz(2)/2));
y = exp(-0.5 / output_sigma^2 * (rs.^2 + cs.^2));
yf = fft2(y);
首先将范围变成以target中心为原点的分布,然后表示出目标中心可能出现的概率分布;接下来变换到频域里面去。
由此可以看出公式中的y不是我们平时使用的1或者是-1,而是一个可能出现的概率标签。
pos = [ground_truth(1,2), ground_truth(1,1)] + floor(target_sz/2);
pos代表的是目标中心的位置。
cos_window = hann(sz(1)) * hann(sz(2))为了消除边缘的效应和强调中心,使用一个窗口。若是Opencv里面没有我们可以自己写:
一个维度上的表示是这样的: w(n)