zoukankan      html  css  js  c++  java
  • TLD跟踪算法优化(一)并行化

           

           才学疏浅,仅仅言片语,仅仅求志同道的朋友一起交流研究。

           并行化不算是算法的改进,仅仅是追求执行的实时性。

           简要列举一个样例:

           TLD算法的C++版本号源代码里:

    LKTracker::trackf2f(const Mat& img1, const Mat& img2,vector<Point2f> &points1, vector<cv::Point2f> &points2){

    bool LKTracker::trackf2f(const Mat& img1, const Mat& img2,vector<Point2f> &points1, vector<cv::Point2f> &points2){
      //TODO!:implement c function cvCalcOpticalFlowPyrLK() or Faster tracking function
      //Forward-Backward tracking
    #pragma omp parallel sections //声明该并行区域分为若干个section,section之间的执行顺序为并行的关系    
    	{    
    #pragma omp section //第一个section,由某个线程单独完毕    
    		//前向轨迹跟踪
    		calcOpticalFlowPyrLK( img1,img2, points1, points2, status,similarity, window_size, level, term_criteria, lambda, 0);
    
    
    #pragma omp section //第二个section,由某个线程单独完毕    
    		//后向轨迹跟踪
    		calcOpticalFlowPyrLK( img2,img1, points2, pointsFB, FB_status,FB_error, window_size, level, term_criteria, lambda, 0);
    	}    
      //前向轨迹跟踪
     // calcOpticalFlowPyrLK( img1,img2, points1, points2, status,similarity, window_size, level, term_criteria, lambda, 0);
      //后向轨迹跟踪
      //calcOpticalFlowPyrLK( img2,img1, points2, pointsFB, FB_status,FB_error, window_size, level, term_criteria, lambda, 0);
      
      //Compute the real FB-error
      /*
    	原理非常easy:从t时刻的图像的A点,跟踪到t+1时刻的图像B点;然后倒回来
    	从t+1时刻的图像的B点往回跟踪,假如跟踪到t时刻的图像的C点,这样就产
    	生了前向和后向两个轨迹,比較t时刻中A点和C点的距离,假设距离小于某个
    	阈值,那么就觉得前向跟踪是正确的;这个距离就是FB_error
      */
      //计算前向与后向轨迹的误差。
    	#pragma  omp parallel for  
      for( int i= 0; i<points1.size(); ++i ){
            FB_error[i] = norm(pointsFB[i]-points1[i]); //norm求矩阵或向量的
    													//范数,或绝对值
      }
      //Filter out points with FB_error[i] > median(FB_error) && points with sim_error[i] > median(sim_error)
      normCrossCorrelation(img1,img2,points1,points2);
      return filterPts(points1,points2);
    }
    
     改动后代码执行速度提高了不少。

     只是并行化处理,必须考虑到一些问题

    1.数据的相互排斥问题

    2.线程的分配问题

    3.Release版本号应用程序对于for循环能够自己主动优化,不用对for做多线程设定,主要还是放在模块化的数据处理并行化上。


  • 相关阅读:
    洛谷P3796 【模板】AC自动机(加强版)(AC自动机)
    洛谷P3203 [HNOI2010]弹飞绵羊(LCT,Splay)
    洛谷P1501 [国家集训队]Tree II(LCT,Splay)
    LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
    [BZOJ3172][TJOI2013]单词 AC自动机
    [BZOJ1968][AHOI2005]COMMON约数研究 数学
    [BZOJ1053][SDOI2005]反素数ant 数学
    [BZOJ1045][HAOI2008]糖果传递 数学
    [BZOJ2733][HNOI2012]永无乡 线段树合并
    [BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4388219.html
Copyright © 2011-2022 走看看