trackrobby.m

来自「mean shift tracker mean shift tracker 」· M 代码 · 共 83 行

M
83
字号
function [done] = trackRobby(sequence, trackUntil, rep, firstPoint)

szSt = 28;
epsilon=2;
similar=.9;
maxCount = 10;
frameCount =10;

%Initialize target model with a representative Robby


[frame,sizeim] = getRobby(sequence,1+((rep-1)*szSt),szSt);
targetModel = learnDistribution(frame,1,0);

currentH = targetModel.h
currentCenter = targetModel.center

if(firstPoint ~= 0)
currentCenter = firstPoint;
end
staleTarget=0;
shifting = 1;
haveEstimate=0;
for frm=1:trackUntil
  
  [frame,sizeim] = getRobby(sequence,1+((frm-1)*szSt),szSt);
  shifting = 1;
  haveEstimate = 0;
  while(shifting==1)

  if(haveEstimate==0)
  candidateModel = learnDistribution(frame,[currentCenter currentH],0);
  correlation = bhattachar(targetModel.modelDist,candidateModel.modelDist)
  newCenter = MeanShift(candidateModel,targetModel.modelDist);
  haveEstimate=1;
  end

  newCandidate = learnDistribution(frame,[newCenter,candidateModel.h],0);
  newCorrelation = bhattachar(targetModel.modelDist,newCandidate.modelDist)

  if(newCorrelation < similar)
    staleTarget=1;
  end

%We jumped too far, so back track in half steps
  
  while(abs(newCorrelation - correlation) > similar)
	'Shift Too Extreme'
	halfCenter = floor(.5*(newCenter + currentCenter))
	newCandidate = learnDistribution(frame,[halfCenter newCandidate.h],0);
	newCorrelation =  bhattachar(targetModel.modelDist,newCandidate.modelDist)
	newCenter = halfCenter;
	newCandidate.center = halfCenter;
  end
  correlation = newCorrelation;
  newCenter = MeanShift(newCandidate,targetModel.modelDist);
  drawBox(frame,newCenter,newCandidate.h,'b');
 
  diff = (newCenter-newCandidate.center)
  if( sqrt(diff*diff') < epsilon)
  shifting=0;
  'Close enough for Robby'
  currentCenter = newCenter;
  
  if(staleTarget==1)
    'Stale Target, Learn Fresh Target'
     targetModel = learnDistribution(frame,[currentCenter currentH],0);
     currentCenter = targetModel.center;
     staleTarget=0;
  end
  drawBox(frame,newCenter,newCandidate.h,'b');
  frameCount=frameCount+1;
  end
  
  if(frameCount >= maxCount)
    %frameCount = 0;
    pause
  end
  end

end
done = 1;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?