我对视频文件进行了对象检测,并对每个像素被激活的秒数求和,以求出该区域显示对象的时间,这使我获得了一个二维数组的时间值。由于这些对象大多数时候都位于视频的同一位置,因此导致屏幕上的某些区域具有比其他区域更高的激活性。现在,我想找到一种自动检测“群集”而无需事先知道群集数量的方法。我考虑过使用类似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
我没有做太多的尝试,因为我不知道从哪里开始,并且对任何建议的方法示例(包括代码示例或指向我可以找到的方法的链接)都将不胜感激! :)
答案 0 :(得分:1)
您可以查看以下不同的群集方法:https://scikit-learn.org/stable/modules/clustering.html
如果您事先不知道簇数,则可能要使用与K-means不同的算法(一种算法不依赖于簇数)。我建议阅读有关此任务的dbscan和hdbscan。祝你好运:)