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
  /*
	原理很简单:从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做多线程设定,主要还是放在模块化的数据处理并行化上。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值