OpenTLD源码解析(1)

Technorati 标签: OpenTLD,TLD,跟踪,视频处理
首先对tldProcessFrame(tld,i)进行分析
 

1.得到img

 
image 
 

2.跟踪过程

 
image 
 

3.检测过程

 
image
 

4.跟踪结果和检测结果的综合

 
image 
检测结果可能有多个,需要bb_cluster_confidence对其进行融合,融合的方法聚类平均。
得到cBB和cConf。
 
初始时,默认使用跟踪的结果

tld.bb(:,I)  = tBB;
tld.conf(I)  = tConf;
tld.size(I)  = 1;
tld.valid(I) = tValid;

如果跟踪的结果和检测的结果overlap的值小余0.5并且检测的conf值也比跟踪的大,则用检测结果初始化跟踪。

这保证了当跟踪丢失时,或者跟踪错误时,可以使用检测代替。

另一种情况,则跟踪有效,将检测结果与跟踪overlap值大于0.7的挑选出来和跟踪结果进行平均,得到最后的结果。

5.学习过程

image

如果结果valid则学习。

6.关于overlap和conf

这两个值非常重要,相当于一个标准尺子。

当你确定一个bb是对的时,与其overlap值越大,则两个是同类的,否则是不同类

conf是用对检测出的结果,给出一个其正确程度的数字量度。而与其对比的,则为不断

更新的Y样本和N样本。

TLD的学习过程,和这两个参数关系很大。

6.1 overlap

overlap值的意思如下:

image

交集占其并集的百分比,作者程序中这部分是用c写的:

image

6.2 conf

6.2.1 从Patch到Pattern

从图像中得到patch

patch = img_patch(img.input,bb(:,i));

image

标准话15X15

patch   = imresize(patch,patchsize); % 'bilinear' is faster

image

变成向量,然后使其均值为0;
pattern = double(patch(:));

pattern = pattern - mean(pattern);

6.2.2 计算Pattern到正样本和负样本的距离

imagetld.nex image tld.pex

nccP = distance(x(:,i),tld.pex,1); % measure NCC to positive examples
nccN = distance(x(:,i),tld.nex,1); % measure NCC to negative examples

NCC距离计算方法:

NCC距离表示两个归一化矢量之间的夹角取值在(-1,1)之间

image

image

代码如下:

// correlation normalized
double ccorr_normed(double *f1,double *f2,int numDim) {
    double corr = 0;
    double norm1 = 0;
    double norm2 = 0;

    for (int i = 0; i<numDim; i++) {
        corr += f1[i]*f2[i];
        norm1 += f1[i]*f1[i];
        norm2 += f2[i]*f2[i];
    }
    // normalization to <0,1>
    return (corr / sqrt(norm1*norm2) + 1) / 2.0;
}

此处定义距离时,因为正负样本有多个,定义距离有两种方法:

% measure Relative Similarity
dN = 1 - max(nccN);
dP = 1 - max(nccP);
% measure Conservative Similarity
maxP = max(nccP(1:ceil(tld.model.valid*size(tld.pex,2))));
dP = 1 - maxP;

6.2.3 确定Pattern接近正样本的程度

image
conf(i) = dN / (dN + dP);

6.2.4 关于isin

image

 

 

 

 

posted @ 2014-02-19 14:04  gghost  阅读(945)  评论(0编辑  收藏  举报