当对象旋转时,KCF-tracker报告跟踪失败

问题描述

我正在一个项目中,我必须使用颜色作为对象的特征表示来检测和跟踪小型汽车(请参见下图)。 为了检测,我使用了直方图back_projection 参见:https://docs.opencv.org/master/dc/df6/tutorial_py_histogram_backprojection.html

image1

检测代码如下所示:

def back_projectcam1(histm,hsv_histt,hsvt): #hist: model histogram,hsv_histt: target image 
 histogram,hsvt: hsv image of the target image
 track_track=None
 Mask = cv2.calcBackProject([hsvt],[0,1],histm,180,256],1)
 Open=cv2.morphologyEx(Mask,cv2.MORPH_OPEN,kernel1)
 Filter=cv2.filter2D(Open,-1,kernel3,Open)
 
 Close=cv2.morphologyEx(Filter,cv2.MORPH_CLOSE,kernel1)
 _,thresh = cv2.threshold(Close,10,255,cv2.THRESH_BINARY)

 contours =cv2.findContours(Mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
 if contours[2] is not None:
  cntss = imutils.grab_contours(contours)
  cnt=max(cntss,key=cv2.contourArea) 
  x,y,w,h = cv2.boundingRect(cnt)
  track_track=x,h
 return track_track,thresh

用于跟踪,我使用了kcf-tracker(Kernalized Correlation Filter)。

我的算法如下:

-仅在某些帧(每50帧)进行一次检测,并将结果边界框分配给kcf-tracker作为新的初始边界框。

其背后的想法是使过程比仅使用检测时更快。

当我运行代码时,关于速度和准确性,似乎一切正常:

works

除了汽车旋转时(表示在弯曲的铁路上行驶),跟踪器都会发生故障,如下所示:

fails

我怀疑当跟踪的对象旋转时kcf.tracker失败,因为它只是一个相关性,而不是卷积过滤器(内核未旋转!)。但是,这只是一个假设,我可能是错的。

因此,要解决此问题,我只需使每两次检测之间的时间更短(例如,每20帧而不是50帧。但是,如果这样做,处理速度会降低!

所以我的问题是:

仅当汽车在弯道上行驶时,如何有效地告诉我的算法增加检测次数

我试图静态地定义它(但是说当汽车到达弯道像素时,要进行更多的检测),但这并不有效。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)