聚类点算法

时间:2018-11-02 00:46:02

标签: c++ opencv

我已经应用了三种不同的方法来获取点集,如下所示。 每种方法都会产生一个点向量。每种方法都有不同的颜色,分别是红色,蓝色和绿色。

Method 1 Method 2 Method 3

这是组合的图像,覆盖了所有三组点

enter image description here

正如您在合成图像中看到的那样,所有三个集合都“同意”存在点(即通常位于完全相同的点)。我想找到这些特殊的点,并将它们组合成一个坐标。我不确定从哪里着手解决这个问题。我研究了K-means聚类,但是对我来说,问题似乎是K-means将所有点聚类并取周围点的平均值,从而使聚类中心偏离原始位置。我可以遍历存储点的所有向量中的所有点,但是随着这些图像随着点的增加而变大,它变得非常昂贵且效率低下。

有人对如何解决此问题有任何提示吗?我一直在使用C ++的OpenCV。

1 个答案:

答案 0 :(得分:1)

名义上,您要做的是考虑三组点上完整的三方图,其边缘按距离加权。然后按重量顺序选择边缘,直到出现三角形;将这些点称为对应的集合,选择(说)其质心来表示它们,然后从图中删除。当边缘长度超过某些公差时停止。

这种方法的数学理由是它独立于点排序(在极不可能的情况下,点之间的距离存在问题)。

该算法的实用实现(针对大量点)涉及一种搜索数据结构,该结构可以快速找到附近点(不仅仅是最近的点):在阈值大小的情况下,可以使用四叉树或 k - d 树。可能您会为每个点集创建一个,然后将其他集的点用作查询点。

相关问题