压缩感知在目标跟踪的应用

本文通过Real-Time Compressive Tracking论文,介绍了如何使用压缩感知算法进行目标跟踪。作者提供了详细的代码实现,包括初始化(init)和处理帧(processFrame)两个关键步骤,涉及Harr特征计算、样本模板获取、积分图计算以及分类器更新。文章通过实例解释了压缩感知在目标跟踪中的具体运用。
摘要由CSDN通过智能技术生成

压缩感知感觉很高大上,理论分析一套一套的,本人数学水平有限,理论介绍就免了,来看看Real-Time Compressive Tracking这篇论文是怎样用压缩感知算法来进行目标跟踪的。感谢《Real-Time Compressive Tracking》的作者Kaihua Zhang、Lei Zhang、Ming-Hsuan Yang,把该论文实验所用的代码也给出来了(c++版、matlab版本应有尽有),业界良心啊,让我等小白,看完之后茅塞顿开。下面是那边论文的网页:

http://www4.comp.polyu.edu.hk/~cslzhang/CT/CT.htm

我也是在看了别人对这篇文章的介绍之后,才发现有这么好的资源,分享果然是个好东西:

http://blog.csdn.net/zouxy09/article/details/8118360

这篇博客对论文的思想和怎样运用压缩感知的工作过程有个详细的介绍。

别人都已经写过了,那我写这篇文章的意义何在呢?主要还是对自己所学知识的一个记录和总结吧,哈哈,我就从代码来看看压缩感知怎样运用于目标跟踪吧。阅读源代码,能够丰富程序设计的思路,我看的是c++版,抛开怎样读入视频或图像序列的细节不说,主要看看作者写的CompressiveTracker类。初看之下,类里面的数据函数一大堆,但真正运用的时候只要调用两个接口函数。一个是init(Mat& _frame, Rect& _objectBox),另一个是processFrame(Mat& _frame, Rect& _objectBox)。其他的函数都是为它们服务的。排版不清晰,还请见谅。接下来我干脆贴代码了:

void CompressiveTracker::init(Mat& _frame, Rect& _objectBox)
{
// compute feature template 用到了Harr特征,该函数取了featureNum种不同的harr模板组合
HaarFeature(_objectBox, featureNum);


// compute sample templates

        //获取正样本图片和负样图片本用于训练
sampleRect(_frame, _objectBox, rOuterPositive, 0, 1000000, samplePositiveBox);
sampleRect(_frame, _objectBox, rSearchWindow*1.5, rOuterPositive+4.0, 100, sampleNegativeBox);

        //计算积分图
integral(_frame, imageIntegral, CV_32F);

        //分别计算正样本图片和负样本图片的harr特征值
getFeatureValue(imageIntegral, samplePositiveBox, samplePositiveFeatureValue);
getFeatureValue(imageIntegral, sampleNegativeBox, sampleNegativeFeatureValue);

        

        //分别计算正样本和负样本中每个特征的平均值和标准差

classifierUpdate(samplePositiveFeatureValue, muPositive, sigmaPositive, learnRate);
classifierUpdate(sampleNegativeFeatureValue, muNegative, sigmaNegative, learnRate);
}

具体来看看init中这几个函数的作用:

void CompressiveTracker::HaarFeature(Rect& _objectBox, int _numFeature)
/*Description: compute Haar features
  Arguments:
  -_objectBox: [x y width height] object rectangle
  -_numFeature: total number of features.The default is 50.
*/
{

        //初始化features为_numFeature个包含Rect的容器
features = vector<vector<Rect>>(_numFeature, vector<Rect>());  

        //初始化featuresWeight为_numFeature个包含Rect权重的容器
featuresWeight = vector<vector<float>>(_numFeature, vector<float>());

int numRect;
Rect rectTemp;
float weightTemp;
      
for (int i=0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值