对象跟踪中的遮挡处理

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仿真

图像处理:啥是遮挡?

Occlusion(遮挡剔除)

原创 我的OpenGL学习进阶之旅介绍一下OpenGL ES的 遮挡查询

原创 我的OpenGL学习进阶之旅介绍一下OpenGL ES的 遮挡查询