Real-Time Compressive Tracking
matlab源码在作者主页上可以下载:http://www4.comp.polyu.edu.hk/~cslzhang/CT/CT.htm
下面是全部matlab主要文件的代码及注释
注:为了注释在博客中方便地显示,将代码中%都替换为了//
Runtracker.m
// Demo for paper "Real-Time Compressive Tracking,"Kaihua Zhang, Lei Zhang, and Ming-Hsuan Yang
// To appear in European Conference on Computer Vision (ECCV 2012), Florence, Italy, October, 2012
// Implemented by Kaihua Zhang, Dept.of Computing, HK PolyU.
// Email: zhkhua@gmail.com
// Date: 11/12/2011
// Revised by Kaihua Zhang, 15/12/2011
// Revised by Kaihua Zhang, 11/7/2012
// clc是清除命令行里面的内容,clear是清除那一堆存在内存里的数据的,close是关闭打开了的文件
//clear 清空工作区,clear all 清空工作区与全局变量,close 关闭当前窗口,close all 关闭所有窗口
clc;clear all;close all;
//----------------------------------
// 设置随机数生成器状态为0,每次就可以产生相同的随机数,但是产生随机数后状态将改变
rand('state',0);
//----------------------------------
// 如果要添加文件夹内所有子文件夹到路径的话,需使用genpath,pwd指当前工作路径
addpath('./data');
//----------------------------------
// load对象时txt格式时,以ASCII码格式读取,要求每一行数据个数一致
// initstate=[x y w h],x是图像水平方向,y是图像竖直方向,起点是图像的左上点。当图像变成矩阵进行处理时,索引方式和图像相反。
load init.txt;
initstate = init;//initial tracker
//----------------------------Set path
// 提取文件夹中格式为jpg的文件名
img_dir = dir('./data/*.png');
//---------------------------
// 图像读取结果是0~255的无符号整型数据
img = imread(img_dir(1).name);
// 先转换成浮点数据类型再惊进行计算。如果是三通道,仅使用第一个通道
img = double(img(:,:,1));
//----------------------------------------------------------------
trparams.init_negnumtrain = 50;//number of trained negative samples
trparams.init_postrainrad = 4.0;//radical scope of positive samples
trparams.initstate = initstate;// object position [x y width height]
trparams.srchwinsz = 20;// size of search window
// Sometimes, it affects the results.
//-------------------------
// classifier parameters,width和height表示目标框的宽和高
clfparams.width = trparams.initstate(3);
clfparams.height= trparams.initstate(4);
//-------------------------
// feature parameters
// number of rectangle from 2 to 4.
ftrparams.minNumRect = 2;
ftrparams.maxNumRect = 4;
//-------------------------
M = 50;// number of all weaker classifiers, i.e,feature pool
//-------------------------
posx.mu = zeros(M,1);// mean of positive features
negx.mu = zeros(M,1);
posx.sig= ones(M,1);// variance of positive features
negx.sig= ones(M,1);
//-------------------------Learning rate parameter
lRate = 0.85;
//-------------------------
//compute feature template,xywh属于图像坐标系
[ftr.px,ftr.py,ftr.pw,ftr.ph,ftr.pwt] = HaarFtr(clfparams,ftrparams,M);
//-------------------------
//compute sample templates,xywh属于图像坐标系
posx.sampleImage = sampleImg(img,initstate,trparams.init_postrainrad,0,100000);
negx.sampleImage = sampleImg(img,initstate,1.5*trparams.srchwinsz,4+trparams.init_postrainrad,50);
//-----------------------------------
//--------Feature extraction
iH = integral(img);//Compute integral image
posx.feature = getFtrVal(iH,posx.sampleImage,ftr);
negx.feature = getFtrVal(iH,negx.sampleImage,ftr);
//--------------------------------------------------
// update distribution parameters
[posx.mu,posx.sig,negx.mu,negx.sig] = classiferUpdate(posx,negx,posx.mu,posx.sig,negx.mu,negx.sig,lRate);
//-------------------------------------------------
num = length(img_dir);// number of frames
//--------------------------------------------------------
x = initstate(1);// x axis at the Top left corner
y = initstate(2);
w = initstate(3);// width of the rectangle
h = initstate(4);// height of the rectangle
//--------------------------------------------------------
for i = 2:num
img = imread(img_dir(i).name);
imgSr = img;// imgSr is used for showing tracking results.
img = double(img(:,:,1));
detectx.sampleImage = sampleImg(img,initstate,trparams.srchwinsz,0,100000);
iH = integral(img);//Compute integral image