这个问题困扰了我很长一段时间。基本车辆计数程序包括:1。识别车辆。 2.按功能跟踪车辆。
然而,如果在时间t找到车辆#1,那么在t + 1时程序开始跟踪车辆,但是通过识别过程也可以找到#1,然后将跟踪t + 2程序两辆车辆,但实际上只是帧中的一个#1。如何识别车辆避免重复检测?
提前致谢!
答案 0 :(得分:1)
如果我理解正确,您会担心检测到您正在跟踪的物体(缺少探测器/跟踪器通信)。在这种情况下,您可以:
有几种可能的实施方式。
<强>面膜即可。创建一个二进制掩码,其中跟踪对象附近的区域被标记为&#34; (例如,跟踪对象附近和其他地方的零)。给定这样的掩码,在特定位置检测之前,您可以快速检查是否在那里跟踪某些内容,并中止检测(预检方法)或删除检测到的对象,如果您坚持使用检查后方法。
<强>蛮力即可。计算特定位置与每个跟踪位置之间的距离(您还可以检查重叠区域和其他特征)。然后,您可以丢弃与已跟踪对象太近和/或类似的检测。
让我们考虑哪种方式更好(以及何时)。
掩码需要O( N )操作才能将所有跟踪对象添加到掩码中并执行O( M )操作以进行检查所有感兴趣的地点。那个O( N + M )= O(最大( N , M )),其中 N 是跟踪对象的数量, M 是已检查位置的数量(例如,检测到的对象)。哪个号码( N 或 M )会更大取决于您的应用。保存二进制掩码也需要额外的内存(通常它不是很重要,但同样取决于应用程序)。
暴力需要O( N * M )操作(每个 M 位置根据 N 候选人进行检查。它不需要额外的内存,并允许在检查期间执行更复杂的逻辑。例如,如果对象在一帧内突然改变大小/颜色/任何东西 - 我们可能不应该跟踪它(因为它可能是一个完全不同的对象遮挡原始对象)而是做其他事情。
总结一下:
如果您碰巧需要介于两者之间 - 您必须更具创造性,并以某种方式在掩码中编码对象属性(以实现持续的查找时间)或使用更复杂的数据结构(以加快&# 34;蛮力&#34;搜索)。