首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用opencv跟踪车辆轨迹

利用opencv跟踪车辆轨迹
EN

Stack Overflow用户
提问于 2016-10-23 21:02:17
回答 1查看 406关注 0票数 0

这个问题困扰了我很长时间。基本的车辆计数程序包括: 1.识别车辆。2.根据特征跟踪车辆。

但是,如果在t时刻发现了车辆#1,那么在t+1程序就开始跟踪车辆,但是通过识别过程也可以找到#1,那么t+2程序将跟踪两辆车,但实际上在车架中只有一辆车。识别车辆如何避免重复检测?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-23 23:31:44

如果我的理解是正确的,那么您就会关心检测您已经跟踪的对象(缺少检测器/跟踪器通信)。在这种情况下,您可以:

  • 预检查-在检测期间排除您已经跟踪对象或
  • 事后检查-丢弃检测到的对象,这些对象接近跟踪对象(如果由于某种原因“选择性”检测是不可能的)

有几种可能的实现。

  1. Mask.创建二进制掩码,其中跟踪对象附近的区域被“标记”(例如,靠近跟踪对象的区域和其他任何地方的零)。给定这样的掩码,在检测特定位置之前,您可以快速检查是否有什么东西在那里被跟踪,如果您坚持使用事后检查方法,则可以中止检测(预检查方法)或删除检测对象。
  2. Brute-force.计算特定位置与每个跟踪位置之间的距离(还可以检查重叠区域和其他特征)。然后,您可以丢弃太接近和/或类似于已经跟踪的对象的检测。

让我们考虑哪种方式更好(以及什么时候)。

  1. 掩码需要O(N)操作将所有跟踪对象添加到掩码中,而O(M)操作需要检查所有感兴趣的位置。这是O(N + M) =O(NM),其中Ne 241是跟踪对象的数量,E 142ME 243是检查位置的数量(例如,检测到的对象)。哪个数字(、N、或M)将更大,取决于您的应用程序。还需要额外的内存来保存二进制掩码(通常不是很重要,但同样取决于应用程序)。
  2. Brute-需要O(N * M)操作(每个M位置都与NE 259候选点进行检查)。它不需要额外的内存,并且允许在检查期间执行更复杂的逻辑。例如,如果对象突然改变了一个帧中的大小/颜色/任何东西--我们可能不应该跟踪它(因为它可能是一个完全不同的对象,包含了原始的对象),而是做其他的事情。

总括而言:

  1. 当您有很多对象时,掩码是渐近性更好的。如果在检测期间执行类似滑动窗口搜索的操作,并且可以排除某些区域(因为在这种情况下,您可能有一个较大的M),这几乎是至关重要的。您可能会在预检查中使用它。
  2. Brute--当您有很少的对象并且需要进行涉及不同属性的检查时,强制是可以的。与的事后检查一起使用它是最有意义的。

如果你碰巧需要一些介于两者之间的东西--你必须更有创造力,或者以某种方式对对象属性进行编码(以达到恒定的查找时间),或者使用更复杂的数据结构(以加快“布鲁特力”搜索)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40207763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档