struck(结构化SVM用于视觉跟踪)--源代码详解--sampler.cpp

Posted sloanqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struck(结构化SVM用于视觉跟踪)--源代码详解--sampler.cpp相关的知识,希望对你有一定的参考价值。

struck中,作者的的采样方式都很简单,采用的都是均匀采样;

在进行预测评估eval的时候,使用的是基于像素的采样,也就是每个像素点变化,都采样一次;

在进行更新update的时候,采用的是radial和regular的采样,就是根据半径和角度的变化确定采样框,其中有5种半径,16种方向,再加上(0,0),最后有81个采样框;

代码以及注释如下:


#include "Sampler.h"
#include "Config.h"

#define _USE_MATH_DEFINES
#include <cmath>
#include <math.h>

using namespace std;

vector<FloatRect> Sampler::RadialSamples(FloatRect centre, int radius, int nr, int nt)

	vector<FloatRect> samples;
	
	FloatRect s(centre);
	float rstep = (float)radius/nr;//半径变化的步长
	float tstep = 2*(float)M_PI/nt;//角度变化的步长
	samples.push_back(centre);
	
	for (int ir = 1; ir <= nr; ++ir)
	
		float phase = (ir % 2)*tstep/2;//这个phase可加可不加,加之后可以使得sample分布更加均匀,准确的来说,角度划分为了2*nt种
		for (int it = 0; it < nt; ++it)
		
			float dx = ir*rstep*cosf(it*tstep+phase);//半径乘以角度的余弦
			float dy = ir*rstep*sinf(it*tstep+phase);//半径乘以角度的正弦
			s.SetXMin(centre.XMin()+dx);
			s.SetYMin(centre.YMin()+dy);
			samples.push_back(s);
		
	
	
	return samples;


vector<FloatRect> Sampler::PixelSamples(FloatRect centre, int radius, bool halfSample)

	vector<FloatRect> samples;//作者在30为半径的园内进行搜索,有pi*30*30 = 2831
	
	IntRect s(centre);
	samples.push_back(s);//上一帧的rect放在vector的第一个,也即是这一帧的搜索中心
	
	int r2 = radius*radius;
	for (int iy = -radius; iy <= radius; ++iy)
	
		for (int ix = -radius; ix <= radius; ++ix)
		
			if (ix*ix+iy*iy > r2) continue;//这种情况就不会发生
			if (iy == 0 && ix == 0) continue; // already put this one at the start
			
			int x = (int)centre.XMin() + ix;
			int y = (int)centre.YMin() + iy;
			if (halfSample && (ix % 2 != 0 || iy % 2 != 0)) continue;//如果是半采样,逢偶数就跳过
			
			s.SetXMin(x);
			s.SetYMin(y);
			samples.push_back(s);
		
	
	
	return samples;












以上是关于struck(结构化SVM用于视觉跟踪)--源代码详解--sampler.cpp的主要内容,如果未能解决你的问题,请参考以下文章

struck(结构化SVM用于视觉跟踪)--源代码详解--tracker.cpp

struck(结构化SVM用于视觉跟踪)--源代码详解--tracker.cpp

struck(结构化SVM用于视觉跟踪)--源代码详解--sampler.cpp

struck(结构化SVM用于视觉跟踪)--源代码详解--sampler.cpp

目标跟踪学习系列十:Struck:Structured Output Tracking with Kernels 代码调试

MDNet(multi domain CNN用于视觉跟踪)--源代码详解--mdnet_features_fcX.m