openTLD 源码解读 .

本文转自http://blog.csdn.net/muzi198783/article/details/7392255

首先是run_TLD 在其次就是tldExample 最后到了初始化函数tldInit

第一个比较关键的函数   bb_scan

将图像网格化,将图片首先 SCALE = 1.2.^[-10:10];(21 个规格),在每个规格上打网格 

这个函数有一个比较重要的方法

ntuples(就是重复) 因为网格上的点很多点有相同的X,或者Y 具体方法大家在matlab中调用一句ntuples([1 2],[1 2,3])看看答案就知道什么意思了。

这个函数返回一个6*n的矩阵,这个矩阵每个列代表一个窗口。

1,代表窗口左上点X

2,代表窗口左上点y

3,代表窗口右下点X

4,代表窗口右下点Y

5,这种规格的编号

6,相同X的窗口数目

产生特征点函数tldGenerateFeatures

就是产生一系列的随机数 大概是(4*特征个数)*树的个数

初始化轨迹

记录连续的图片

训练探测器

规格化和目标的相似度bb_overlap

将每个规格化窗口和目标窗口做运算得到相似度

公式:相交的面积/总面积(不相交则返回0.0)

注意矩阵运算返回一个向量,大小就是规格化的数目length(grid)

取出图片的函数,当参数为4个时会进行变换img_patch

tldGeneratePositiveData产生正样本数据

主要利用的是相似度来判定正负样本既bb_overlap>阈值,则认为正样本,反之亦然。

这里主要就是有个编码问题

随机取出点比较大小进行编码

for (int i=0; i<nFEAT; i++) {
index<<=1; 
int fp0 = img[off[0]+bbox[0]];
int fp1 = img[off[1]+bbox[0]];
if (fp0>fp1) { index |= 1;}
off += 2;
}

(fern.cpp的measure_tree_offset)

这个函数返回一个pX代表编码后的矩阵,pEx代表最靠近目标窗口的规格化窗口(这个窗口进行了处理可以用于后面的训练),

最靠近目标窗口的规格化窗口

类似的负样本情况。

fern(2,......)

开始训练随机树

if (Y[I] == 1) {
if (measure_forest(x) <= thrP)//防止某个特征占的比重太大
update(x,1,1);
} else {
if (measure_forest(x) >= thrN)
update(x,0,1);

void update(double *x, int C, int N) {
for (int i = 0; i < nTREES; i++) {
int idx = (int) x[i];
(C==1) ? nP[i][idx] += N : nN[i][idx] += N;
if (nP[i][idx]==0) {
WEIGHT[i][idx] = 0;
} else {
WEIGHT[i][idx] = ((double) (nP[i][idx])) / (nP[i][idx] + nN[i][idx]);//正样本增加相应位置的权重,集后面的置信度
}
}
}

训练样本产生一个正确的特征集

 tldTrainNN(pEx,nEx,tld)

tld.pex = [tld.pex(:,1:isin(2)) x(:,i) tld.pex(:,isin(2)+1:end)]; % 这个代码就是通过随机树种产生比较高的规格化窗口在这些窗口放到正特征集里面

以后就可以拿这个和目标最比较来判断目标窗口的位置

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值