Fast Compressive Tracking(快速压缩跟踪)算法的C++代码实现

                                      本文系原创,转载请注明。

                               有问题请留言或发邮箱:[email protected]

           因为实验室项目工程的需要,最近在研究目标跟踪算法。这里提的Fast Compressive Tracking (快速压缩跟踪)算法是张开华教授在其之前的Compressive Tracking 算法(网站看这里)上做了一些简单的优化,本人测试的结果是FCT算法的处理速度在59帧/s左右(windows下),而之前的CT算法大概是29帧/s,修改后的速度还是不错的(这里的工程都是读图片帧序列,后面给出的工程资源有自带资源)。因为FCT的网站上没有给出代码的C++实现(只有MATLAB的代码,网站看这里),这里就贴出我按照其论文的意思给出C++的代码实现,这里的C++代码也是从其CT算法的c++代码上修改而来的,修改的地方我会在代码中说明。另外为了将代码能够移植到linux上,我对代码的初始运行的地方也做了修改,所以这里贴出的代码是可以运行在linux上的。代码中的注释参考了zouxy09大神的博客,最后为了方便大家运行,我会将FCT C++工程以及linux下运行的代码分别打包供大家下载。因为我也是初学者,能力有限,所以若文中有纰漏请读者指正,有问题请留言或者发我邮箱,thanks。

---------------------------------------------------------------------------------------------------

2015/1/24 补充:该版本C++代码没有实现多尺度的情况。我在看论文的时候没有仔细阅读论文(细看了CT,而没细看FCT),以为FCT论文中没有给出尺度变换的设计。后来有网友指出论文中有尺度变换,罪过罪过,很久之前的东西了,所以暂时没办法更新代码。

/************************************************************************
* File:	CompressiveTracker.h
* Brief: C++ demo for paper: Kaihua Zhang, Lei Zhang, Ming-Hsuan Yang,"Real-Time Compressive Tracking," ECCV 2012.
* Version: 1.0
* Author: Yang Xian
* Email: [email protected]
* Date:	2012/08/03
* History:
* Revised by Kaihua Zhang on 14/8/2012, 23/8/2012
* Email: [email protected]
* Homepage: http://www4.comp.polyu.edu.hk/~cskhzhang/
* Project Website: http://www4.comp.polyu.edu.hk/~cslzhang/CT/CT.htm
************************************************************************/
#pragma once
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <vector>

using std::vector;
using namespace cv;
//---------------------------------------------------
class CompressiveTracker
{
public:
	CompressiveTracker(void);
	~CompressiveTracker(void);

private:
	int featureMinNumRect;
	int featureMaxNumRect;
	int featureNum;//每个box的harr特征个数(也就是弱分类器个数)  
	vector<vector<Rect>> features;
	vector<vector<float>> featuresWeight;
	int rOuterPositive;//在离上一帧跟踪到的目标位置的距离小于rOuterPositive的范围内采集 正样本  
	vector<Rect> samplePositiveBox;//采集的正样本box集  
	vector<Rect> sampleNegativeBox;//采集的负样本box集  
	int rSearchWindow;//扫描窗口的大小,或者说检测box的大小  
	Mat imageIntegral; //图像的积分图 
	Mat samplePositiveFeatureValue;//采集的正样本的harr特征值 ???特征值是矩阵??
	Mat sampleNegativeFeatureValue;//采集的负样本的harr特征值  
	//对每个样本z(m维向量),它的低维表示是v(n维向量,n远小于m)。假定v中的各元素是独立分布的。  
    //假定在分类器H(v)中的条件概率p(vi|y=1)和p(vi|y=0)属于高斯分布,并且可以用以下四个参数来描述:  
    //分别是描述正负样本的高斯分布的均值u和方差sigma  
	vector<float> muPositive;
	vector<float> sigmaPositive;
	vector<float> muNegative;
	vector<float> sigmaNegative;
	float learnRate;//学习速率,控制分类器参数更新的步长 
	vector<Rect> detectBox; //需要检测的box 
	Mat detectFeatureValue;
	RNG rng; //随机数 

private:
	void HaarFeature(Rect& _objectBox, int _numFeature);
	void sampleRect(Mat& _image, Rect& _objectBox, float _rInner, float _rOuter, int _maxSampleNum, vector<Rect>& _sampleBox);
<span style&
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值