www.pudn.com > Matlab_Tracker.rar > testTracker.m
%%% main file for running trackers
clear all;
close all;
%directory and filename prefix
prefix = 'E:\code_matlab\Matlab_Tracker\Sample\frame0';
% start frame
fstart = 1;
% first frame
fname = sprintf('%s%04d.jpg',prefix,fstart);
im = imread(fname);
fprintf('Intialize frame: %s\n', fname);
%get size
nrows = size(im,1);
ncols = size(im,2);
%display image
figure(1);clf;
imagesc(im);
%axis equal;
%get 4 vertices of object
%fprintf('Please click 4 corners of the object to track:');
%[xbox,ybox] = ginput(4); %user inputs corners of bounding box
xbox = [225 265 304 262];
ybox = [255 248 311 324];
%get object mask;
[xx, yy] = meshgrid(1:ncols, 1:nrows);
in = inpolygon(xx,yy,xbox,ybox);
objMask = zeros(nrows, ncols);
objMask(find(in)) = 255;
objMask = uint8(objMask);
% figure(2);
% imagesc(objMask);
%get object bounding box
xbox = round(xbox);
ybox = round(ybox);
left = min(xbox);
right = max(xbox);
top = min(ybox);
bottom = max(ybox);
objCenterx = round((left+right)/2);
objCentery = round((top+bottom)/2);
objBox = [left,right,top,bottom];
figure(1);
drawboxmm(objBox(1),objBox(2),objBox(3),objBox(4),'b',3);
%use object mask or not
maskFlag = 1;
%tracker selection
trackerIdx = 1;
%initialize tracker on first frame
switch trackerIdx
case 1
if maskFlag == 1
initModel = tkTemplateMatch_Init(im, objBox, objMask);
else
initModel = tkTemplateMatch_Init(im, objBox);
end
case 2
if maskFlag == 1
initModel = tkMeanshift_Init(im, objBox, objMask);
else
initModel = tkMeanshift_Init(im, objBox);
end
case 3
if maskFlag == 1
initModel = tkVarianceRatio_Init(im, objBox,objMask);
else
initModel = tkVarianceRatio_Init(im, objBox);
end
case 4
if maskFlag == 1
initModel = tkPeakDifference_Init(im, objBox,objMask);
else
initModel = tkPeakDifference_Init(im, objBox);
end
case 5
if maskFlag == 1
initModel = tkRatioShift_Init(im, objBox,objMask);
else
initModel = tkRatioShift_Init(im, objBox);
end
end
% now go to next frame...
nextframe = fstart+1;
step=1;
loopCount = 9;
for findex = nextframe:step:nextframe+loopCount*step-1
trainframe=findex;
% read the next frame
fname = sprintf('%s%04d.jpg',prefix,trainframe);
im = imread(fname);
fprintf('tracking frame: %s\n', fname);
% display image
figure(1); clf;
imagesc(im)
%axis equal;
switch trackerIdx
case 1
[rstBox, objMask] = tkTemplateMatch_Next(initModel, im, objBox);
case 2
[rstBox, objMask] = tkMeanShift_Next(initModel, im, objBox);
case 3
[rstBox, objMask] = tkVarianceRatio_Next(initModel, im, objBox);
case 4
[rstBox, objMask] = tkPeakDifference_Next(initModel, im, objBox);
case 5
[rstBox, objMask] = tkRatioShift_Next(initModel, im, objBox);
end
objBox = rstBox;
% inner bounding box (containing object)
figure(1);
drawboxmm(objBox(1),objBox(2),objBox(3),objBox(4),'k',3);
% display mask
% figure(3); clf;
% imagesc(objMask)
end % loop back and continue