作者算法的功能都是在tracker类中实现的,下面分析其头文件和cpp文件,头文件:
#ifndef TRACKER_H
#define TRACKER_H
#include "Rect.h"
#include <vector>
#include <Eigen/Core>
#include <opencv/cv.h>
class Config;
class Features;
class Kernel;
class LaRank;
class ImageRep;
class Tracker
{
public:
Tracker(const Config& conf);
~Tracker();
void Initialise(const cv::Mat& frame, FloatRect bb);//初始化
void Reset();//复位
void Track(const cv::Mat& frame);//跟踪
void Debug();//用于显示跟踪的效果框图,便于调试
inline const FloatRect& GetBB() const { return m_bb; }
inline bool IsInitialised() const { return m_initialised; }
private:
const Config& m_config;//这个指向常量的引用,用来绑定构造器传入的conf
bool m_initialised;//标志这个track是否初始化了
std::vector<Features*> m_features;//存放特征指针
std::vector<Kernel*> m_kernels;
LaRank* m_pLearner;
FloatRect m_bb;//一个矩形框
cv::Mat m_debugImage;//调试时用于显示的图片
bool m_needsIntegralImage;//是否需要积分图,为了方便计算haar特征,当使用haar特征的时候,需要先计算积分图
bool m_needsIntegralHist;//是否需要积分颜色直方图
void UpdateLearner(const ImageRep& image);//更新学习器,也就是更新结构化SVM
void UpdateDebugImage(const std::vector<FloatRect>& samples, const FloatRect& centre, const std::vector<double>& scores);//更新用于调试的显示图片
};
#endif
源文件:
#include "Tracker.h"
#include "Config.h"
#include "ImageRep.h"
#include "Sampler.h"
#include "Sample.h"
#include "GraphUtils.h"
#include "HaarFeatures.h"
#include "RawFeatures.h"
#include "HistogramFeatures.h"
#include "MultiFeatures.h"
#incl