2D 点 identification/matching 连续循环,包含新点和旧点

2D Point identification/matching on a continous loop with new and old points

我正在做一个飞镖项目。我正在用激光扫描仪检测飞镖。使用 K-Means 我能够检测到飞镖簇。我从玩家开始轮到他的那一刻开始扫描。这意味着我对第一个飞镖的扫描点最多,对最后一个飞镖的扫描点最少。我用振动传感器检测飞镖命中。我在一个循环中 运行ning K-Means,所以我计算的飞镖点随着时间的推移变得更加准确,因此每个 运行.

有更多的扫描点

现在我想将我的聚类中心分配给飞镖编号。我尝试关注最后一个 运行 的聚类中心,每次都具有相同的聚类中心顺序,但没有为新飞镖生成中心的智能方法,我经常 运行 进入 K-Means 问题由于更大而将现有集群减半。

我正在寻找一种允许我将中心分配给 id (0, 1, ...) 的算法。如果有一个新的集群,它会得到一个新的 id。我想 运行 这个算法在 运行 宁 K-Means 之后,所以它只适用于聚类中心。 我想我可以简单地计算旧点和新点之间的距离并以这种方式识别它们。剩下的就是新的镖点。

如果有帮助,我也愿意从 K-Means 切换到另一个聚类算法。

希望您能理解我面临的问题。感谢您的意见。

如果我答对了你的问题,你需要将一组聚类中心分配给另一组聚类中心并仅使用这些中心的位置。这个问题称为最小权重匹配或线性和分配问题。首先需要计算代价矩阵,即两组聚类中心之间的距离矩阵。然后你使用这个矩阵来找到总距离最小的分配。 Scipy 库有解决这类问题的函数:

from scipy.spatial import distance
from scipy.optimize import linear_sum_assignment
dists = distance.cdist(centers1, centers2, 'euclidean')
indices1, indices2 = linear_sum_assignment(dists)

剩下的索引是新的簇。