对象跟踪中的遮挡处理
Posted
技术标签:
【中文标题】对象跟踪中的遮挡处理【英文标题】:Occlusion handling in object tracking 【发布时间】:2021-02-09 17:16:11 【问题描述】:我正在实现基于运动的对象跟踪程序,该程序使用背景减法、卡尔曼滤波器和匈牙利算法。除遮挡外,一切正常。当两个对象彼此足够接近时,背景减法会将其识别为这两个对象之一。在它们拆分后,程序会正确识别这两个对象。我正在寻找可以检测遮挡的解决方案/算法,如以下示例中的点 c) 所示。
在使用背景减法时,我将不胜感激任何涉及遮挡检测问题的参考或代码示例。
【问题讨论】:
请分享代码-到目前为止您尝试了什么。 我假设您将这些图像作为视频。一种方法是跨多个帧跟踪单个对象。如果两个对象突然合并在一起,您可以假设它仍然是两个对象。如果他们已经作为一个 blob 进入框架,这将不起作用。另一种方法可能是尝试腐蚀你得到的面具。如果经过几次侵蚀迭代后,斑点分开,那么您就知道它们很可能是两个靠得很近的物体。这只有在它们只有一点重叠时才有效。 【参考方案1】:使用机器学习算法的对象检测应该可靠地区分这些对象,即使有明显的遮挡。您还没有分享任何关于您的环境的信息,所以我不知道您有什么样的限制,但是使用 ML 方法,我将如何解决您的问题。
import cv2
from sort import *
tracker = Sort() # Create instance of tracker (see link below for repo)
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
# Not sure what your environment is,
#but get your objects bounding boxes like this
detected_objects = detector.detect(frame) #pseudo code
# Get tracking IDs for objects and bounding boxes
detected_objects_with_ids = tracker.update(detected_objects)
...
上面的例子使用了这个Kalman Filter and Hungarian algorithm,它可以实时跟踪多个对象。
同样,不确定您的环境,但您可以找到pre-built object detection algorithms on the Tensorflow site。
【讨论】:
以上是关于对象跟踪中的遮挡处理的主要内容,如果未能解决你的问题,请参考以下文章
SiameseFC遮挡跟踪应用matconvnet工具箱,实现基于Fully-Convolutional Siamese Networks全卷积孪生网络的车辆跟踪matlab仿真