# kernelTracker

## PURPOSE

Kernel Tracker from Comaniciu, Ramesh and Meer PAMI 2003.

## SYNOPSIS

function [allRct, allSim, allIc] = kernelTracker( I, prm )

## DESCRIPTION

     Kernel Tracker from Comaniciu, Ramesh and Meer PAMI 2003.

     Implements the algorithm described in "Kernel-Based Object Tracking" by
     Dorin Comaniciu, Visvanathan Ramesh and Peter Meer, PAMI 25, 564-577,
     2003.  This is a fast tracking algorithm that utilizes a histogram
     representation of an object (in this implementation we use color
     histograms, as in the original work).  The idea is given a histogram q in
     frame t, find histogram p in frame t+1 that is most similar to q. It
     turns out that this can be formulated as a mean shift problem. Here, the
     kernel is fixed to the Epanechnikov kernel.

     This implementation uses mex files to optimize speed, it is significantly
     faster than  real time for a single object on a 2GHz standard laptop (as
     of 2007).

     If I==[], toy data is created.  If rctS==0, the user is queried to
     specify the first rectangle.  rctE, denoting the object location in the
     last frame, can optionally be specified.  If rctE is given, the model
     histogram at fraction r of the video is (1-r)*histS+r*histE where histS
     and histE are the model histograms from the first and last frame.  If
     rctE==0 rectangle in final frame is queried, if rectE==-1 it is not used.

     Let T denote the length of the video. Returned values are of length t,
     where t==T if the object was tracked through the whole sequence (ie sim
     does not fall below simThr), otherwise t<=T is equal to the last frame in
     which obj was found.  You can test if the object was tracked using:
       success = (size(allRct,1)==size(I,4));

     USAGE
      [allRct, allIc, allSim] = kernelTracker( [I], [prm] )

     INPUTS
      I            - MxNx3xT input video
      [prm]
       .rctS       - [0] rectangle denoting initial object location
       .rctE       - [-1] rectangle denoting final object location
       .dispFlag   - [1] show interactive display
       .scaleSrch  - [1] if true search over scale
       .nBit       - [4] n=2^nBit, color histograms are [n x n x n]
       .simThr     - [.7] sim thr for when obj is considered lost
       .scaleDel   - [.9] multiplicative diff between consecutive scales

     OUTPUTS
      allRct       - [t x 4] array of t locations [x,y,wd,ht]
      allSim       - [1 x t] array of similarity measures during tracking
      allIc        - [1 x t] cell array of cropped windows containing obj

     EXAMPLE
      disp('Select a rectangular region for tracking');
      [allRct,allSim,allIc] = kernelTracker();
      figure(2); clf; plot(allRct);
      figure(3); clf; montage2(allIc,struct('hasChn',true));

     See also

     Piotr's Image&Video Toolbox      Version 3.22
     Copyright 2013 Piotr Dollar.  [pdollar-at-caltech.edu]
     Please email me if you find bugs, or have suggestions or questions!
     Licensed under the Simplified BSD License [see external/bsd.txt]