【问题标题】:Automatically detecting clusters in a 2d array/heatmap自动检测二维数组/热图中的集群
【发布时间】:2019-09-04 14:50:29
【问题描述】:

我在视频文件上运行了对象检测,并对每个像素被激活的秒数求和,以找到对象在该区域中显示的时间量,这给了我一个二维时间值数组。由于这些对象大部分时间都位于视频的相同位置,因此会导致屏幕的某些区域比其他区域具有更高的激活度。现在我想找到一种方法来自动检测“集群”,而无需事先知道集群的数量。我考虑过使用 k-means 之类的东西,但也阅读了一些关于查找局部最大值的信息,但我不太清楚如何将所有这些放在一起,或者哪种方法最适合使用。另外,对象的大小各不相同,所以我不确定我是否可以使用局部最大值方法?

最终结果将是每个集群的 id 和最大时间值列表。

[[3, 3, 3, 0, 0, 0, 0, 0, 0]
 [3, 3, 3, 0, 0, 0, 2, 2, 2]
 [3, 3, 3, 0, 0, 0, 2, 2, 2]
 [0, 0, 0, 0, 0, 0, 2, 2, 2]]

从这个示例数组中,我会得到一个列表:

id | Seconds
1  |  3
2  |  2

我没有尝试太多,因为我不知道从哪里开始,任何带有代码示例的方法建议或我可以在哪里找到它来完成此操作的链接将不胜感激! :)

【问题讨论】:

  • 很多 的方法来解决这个问题,具体取决于您未包含的细节。我建议阅读 mixture modelling 而不是聚类,因为您的问题听起来更接近前者。从一维混合物开始,然后继续进行二维
  • @SamMason 非常感谢,我会看看 :)

标签: python machine-learning computer-vision


【解决方案1】:

您可以查看不同的聚类方法:https://scikit-learn.org/stable/modules/clustering.html

如果您事先不知道集群的数量,您可能想要使用与 K-means 不同的算法(一种不依赖于集群数量的算法)。我建议为此任务阅读有关 dbscan 和 hdbscan 的信息。祝你好运:)

【讨论】:

  • 非常感谢您的回复 :) 实际上,在您发表评论之前,我最终使用了 dbscan,它非常适合这项任务,所以我接受了您的回答。我仍然需要对使用相同参数设置对不同结果的泛化效果进行一些测试。我只是随机调整它们,直到我得到可以接受的结果,而不知道它们在做什么。到目前为止,我会用我的结果更新问题。
猜你喜欢
  • 2022-11-17
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
相关资源
最近更新 更多