aihot  2017-04-26 11:51:54  OpenCV |   查看评论   

 

四、算法描述

         简单的算法描述如下,编程实现其实也是这个过程。(另外,不知道我的尺度更新的位置对不对,望指点)

(1)t帧:

         根据该帧图像I和得到的目标位置x*。顺序进行以下计算:

1)学习空间上下文模型:

时空上下文视觉跟踪(STC)算法的解读与代码复现


2)更新跟踪下一帧目标需要的时空上下文模型:

时空上下文视觉跟踪(STC)算法的解读与代码复现


3)更新尺度等参数:

时空上下文视觉跟踪(STC)算法的解读与代码复现

 

(2)t+1帧:

1)计算置信图:

时空上下文视觉跟踪(STC)算法的解读与代码复现


2)找到最大值,这个最大值的位置就是我们要求的目标位置:

时空上下文视觉跟踪(STC)算法的解读与代码复现

 

五、代码实现

       我的代码是基于VS2010+OpenCV2.4.2的(暂时还没加入边界处理,也就是跟踪框到达图像边缘的时候就会出错)。代码可以读入视频,也可以读摄像头,两者的选择只需要在代码中稍微修改即可。对于视频来说,运行会先显示第一帧,然后我们用鼠标框选要跟踪的目标,然后跟踪器开始跟踪每一帧。对摄像头来说,就会一直采集图像,然后我们用鼠标框选要跟踪的目标,接着跟踪器开始跟踪后面的每一帧。

       另外,为了消去光照的影响,需要先对图像去均值化,还需要加Hamming窗以减少图像边缘对FFT带来的频率影响。Hamming窗如下:

时空上下文视觉跟踪(STC)算法的解读与代码复现

 

       另外,OpenCV没有复数(FFT后是复数)的乘除运算,所以需要自己编写,参考如下:

复数除法:

时空上下文视觉跟踪(STC)算法的解读与代码复现


复数乘法:

时空上下文视觉跟踪(STC)算法的解读与代码复现

 

具体代码如下:

STCTracker.h

  1. // 快速对象跟踪算法
  2.   
  3. #include <opencv2/opencv.hpp>  
  4.   
  5. using namespace cv;  
  6. using namespace std;  
  7.   
  8. class STCTracker  
  9. {  
  10. public:  
  11.     STCTracker();  
  12.     ~STCTracker();  
  13.     void init(const Mat frame, const Rect box);   
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自时空上下文视觉跟踪(STC)算法的解读与代码复现

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]