尽管初始大小固定,但跟踪对象的 BoundingBox/ROI 的大小不断增加

Posted

技术标签:

【中文标题】尽管初始大小固定,但跟踪对象的 BoundingBox/ROI 的大小不断增加【英文标题】:Size of BoundingBox/ROI to track object keeps on increasing despite fixed initial size 【发布时间】:2015-09-06 19:46:12 【问题描述】:

我正在尝试使用 Media Flow Tracker 根据区域跟踪我的手,但边界框在一段时间后不断增加。它在前 10 秒左右正常工作。

这是一个代码sn-p:

def main():
display = SimpleCV.Display()
cam = Kinect()
ts = []
bb = None
img = cam.getDepth().flipHorizontal()
while display.isNotDone():
    depth = cam.getDepth().flipHorizontal()
    filtered = depth.stretch(0, 180).binarize().dilate(1)

    if bb is None:
        blobs = filtered.findBlobs()
        if blobs:
            hand = blobs.filter(abs(7000 - blobs.area()) < 500)
            print hand
            if hand:
                bb = hand[0].boundingBox()
                print bb
    if bb is not None:
        ts = filtered.track("mftrack", ts, img, bb)
        if ts:
            ts.drawBB()
            ts.showPixelVelocityRT()
            ts.drawPath()
    filtered.show()

【问题讨论】:

【参考方案1】:

我将从以下行中删除对 dilate 的调用:

filtered = depth.stretch(0, 180).binarize().dilate(1)

来自 SimpleCV documentation:

扩张(迭代次数=1) 应用形态膨胀。膨胀具有平滑斑点的效果,同时增强了噪声斑点的数量。此实现使用默认的 openCV 3X3 方形内核 Erosion 实际上是一个局部最大值检测器,内核在图像上移动并获取内核内部的最大值。

变量filtered 在每次循环迭代中与filtered.findBlobs() 一起使用。这些斑点的强度和密度用于确定边界框的尺寸。

您正在调用stretch 函数和扩张。随着时间的推移,对dilate 的调用会导致噪声被检测为手的一部分,因此边界框会相应增加。

【讨论】:

我会试一试,让你知道。 我看到了一些改进,但仍然是同样的问题。 盒子最终会达到最大尺寸还是无限增长? 我正在奖励赏金,因为改进得不错,但问题仍然悬而未决。 事实上,我发现 180 最适合我。

以上是关于尽管初始大小固定,但跟踪对象的 BoundingBox/ROI 的大小不断增加的主要内容,如果未能解决你的问题,请参考以下文章

如何创建固定大小的对象数组

固定大小的 3D 表

固定大小的 HashMap 的最佳容量和负载因子是多少?

MongoDB固定集合

使用 boost assign 初始化具有固定大小的向量的向量

目标跟踪入门:使用OpenCV实现质心跟踪