尽管初始大小固定,但跟踪对象的 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 的大小不断增加的主要内容,如果未能解决你的问题,请参考以下文章