光线的聚类算法

时间:2018-09-27 03:46:05

标签: algorithm cluster-analysis

我知道显然有针对点的聚类算法,但是我有不同的情况。我有很多射线,所有射线的起点都在3D球体上,并且方向矢量向内指向球体。有些光线指向A点,有些光线指向B点,依此类推,但有一些噪音(即,光线彼此之间并不完全相交)。是否存在一种聚类算法,可以使我根据射线指向的点对射线进行聚类?我不知道点A,B等的位置,仅知道射线的起点和方向矢量。

例如,in this picture是一个示例设置,但是在2D模式下,我不知道开始时是红色还是蓝色。我如何将光线聚集成红色和蓝色?或者,我如何找到他们指向的点的位置?

我想到的一个解决方案是获取成对的射线,找到这两条射线之间的最接近点(在2D中,如果您延伸射线,则为相交点),然后对每对射线执行此操作(所以我d获得n(n-1)/ 2点,其中n是射线数)。然后,我可以在这些点上使用常规的聚类算法。但是,这似乎不起作用-我在原点只得到一大块积分,我不知道为什么会这样。

3 个答案:

答案 0 :(得分:1)

根据https://en.wikipedia.org/wiki/Random_sample_consensushttps://en.wikipedia.org/wiki/K-means_clustering,可以尝试以下方法。它会尝试爬升至解决方案,因此您可能需要尝试使用不同的随机开始多次尝试。

我们尝试找到点和簇的排列,以使从每个簇中的光线(延伸为线)到与每个簇相关的点的平方距离的平方和最小。我们知道点到直线的距离的平方是二次方(https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line),因此,如果您知道哪条线进入哪个簇,则可以找到该簇的点,从而使平方距离之和最小为此。

如果您知道点,但不知道哪些线进入哪个簇,则可以将每条线分配给点最接近它的簇。

因此,首先将线随机分配到簇中。现在找到每个聚类的点,该点使平方距离的总和最小。现在您有了点,将每条线放入点最接近的簇中,进一步减小了平方距离的总和。现在,您将线的排列改为了不同的簇,重新计算了点,再次减小了平方距离的和。显然,您可以重复此过程,减少每一步的平方和,直到收敛到某个局部最小值为止。

我建议您尝试多次,每次都从不同的随机起点开始,然后查看同一答案是否在结束时出现多次,在这种情况下,您可能会发现一些接近整体的问题最佳,或者至少是非常突出的局部最小值。

答案 1 :(得分:0)

我建议以下内容:

给出一条射线,找出它的终点-箭头如果延伸,将与球体相交的点。可以使用诸如this之类的例程来完成。

收集所有交集(x1,y1,z1),...,(xp,yp,zp)

现在,一旦掌握了这些要点,就可以运行3D版本的多源Weber problem(MWP)。

如果您正在寻找m集群,请为m源求解MWP。这将产生最佳 m簇。

顺便说一句:解决MWP是一个NP-Hard问题。您可能将不得不使用某种枚举算法来解决它。 Here是一种方法。

答案 2 :(得分:0)

您可以尝试使用Hough transform

之类的方法

使3d网格(在球体内部?)具有一定的像元大小(应选择精度和计算空间/时间之间的折衷方案)

对于它接触的所有单元格的每个射线增量计数器(如果您有足够的可用内存,则可能将射线ID添加到该单元格的射线列表中)

选择票数最多的最佳候选单元(较大的计数器)(也许将它们聚集在一起)。

构建单元格(或簇)和通过它的射线的对应关系,将这些射线分组(如果已经构建,它们已经在列表中)