mosse论文解读:https://blog.csdn.net/fjswcjswzy/article/details/106172434
mosse作为使用相关滤波进行目标跟踪的鼻祖,必须得把这玩意弄明白才能进行接下来的研究,我就从代码的角度,一行一行理解代码,保证弄得一清二楚。此文的代码为matlab,其他语言类似
步骤一: 读取视频帧
首先,要做的事将视频帧读入,代码应该比较好理解
datadir = '../data/';
dataset = 'Surfer';
path = [datadir dataset];
img_path = [path '/img/'];
D = dir([img_path, '*.jpg']);
seq_len = length(D(not([D.isdir])));
if exist([img_path num2str(1, '%04i.jpg')], 'file'),
img_files = num2str((1:seq_len)', [img_path '%04i.jpg']);
else
error('No image files found in the directory.');
end
步骤二:在第一帧中选择要跟踪的目标
在把视频帧读入后,就要在第一帧中用矩形框 选出我们要跟踪的目标,并且找出所选矩形框的中心center
im = imread(img_files(1,:));
f = figure('Name', 'Select object to track'); imshow(im);
rect = getrect;
close(f); clear f;
center = [rect(2)+rect(4)/2 rect(1)+rect(3)/2];
这里我们的第一帧和要跟踪的目标如下图:
步骤三:画出高斯图像
画出高斯的代码为:
sigma = 100;
gsize = size(im);
[R,C] = ndgrid(1:gsize(1), 1:gsize(2));
g = gaussC(R,C, sigma, center);
g = mat2gray(g);
这里高斯滤波器的函数为:
function val = gaussC(x, y, sigma, center)
xc = center(1);
yc = center(2);
exponent = ((x-xc).^2 + (y-yc).^2)./(2*sigma);
val = (exp(-exponent));
-
这里我们使用的图片大小是360x480 ,所以R和C都是大小为360x480的矩阵,
-
将R,C, sigma,center当做参数传入gaussC函数,注意这里的高斯做了一些改变,正常来说二维高斯曲面的公式(x,y代表像素的模板坐标,模板中心位置为原点)为:
g ( x , y ) =