2013-08-23 46 views
1

我想要围绕已知的GPS位置聚集照片(GPS +时间戳)。寻找一种算法来聚集3d点,大约2d点

3d分= 2d +时间戳。

例如: 我沿着路走,拍照灯柱,有些很有意思,所以我拍了10张照片,其他人都没有,所以我不采取任何措施。

我想将照片聚集在灯柱周围,让我看看正在拍摄哪个灯柱。

我一直在寻找像k-means聚类这样的东西,并希望能够将照片贴到最近的灯柱上。

(我将使用JavaScript编写的代码大约在同一时间(2000,500)点的客户端应用程序移交)

+0

我真的不确定谁是正确的,但我会让你知道什么在下个月适合我。再次感谢您的帮助。 –

回答

1

KMeans Clustering确实是一种流行且易于实现的算法,但它有一些问题。

  1. 你需要给他喂数字集群N作为输入 变量。现在,因为我认为你不知道有多少“事物”想要写图片,所以找到正确的N.使用迭代KMeans或类似的变体只能将问题推到找到一个适用于多集群分区的正确评估函数,这绝不是问题更容易找到N本身。

  2. 它只能检测到线性可分形状。假设你在凡尔赛附近散步,并且你会拍摄很多外墙的照片。然后你进入里面,拍下里面的花园。你获得的两个形状是一个带有磁盘的图案,但KMeans无法区分它们。

就个人而言,我会用某种Density Based Clustering去:你仍然得养活算法一些变数,但是,因为我们假设的空间将是欧几里得,发现他们不应该太拿许多。此外,它使您能够从集群点中区分不同的噪声点,并让您以不同的方式对待它们。

此外,它可以区分大多数形状,并且您不需要预先给出集群的数量。

+0

首先尝试基于密度的聚类。感谢您的建议 –

0

可以使用德劳内三角测量来寻找最近点。它给你一个最近邻图,点在delaunay边上。或者您可以像照片马赛克一样按照颜色进行聚类。它使用反极树。这里有一个类似的答案:Algorithm to find for all points in set A the nearest neighbor in set B

+0

这将是很多工作来弄清楚什么点靠得很近。或者这会给你的信息,而不是通过计算配对距离找到的信息? – Teepeemm

+0

但是,您仍然需要将图表转换为群集。而且我没有看到图表如何让这个过程变得更加容易,因此建立图表很麻烦。 – Teepeemm

+0

我已经开始使用http://harthur.github.io/clusterfck/ 我打算使用层次聚类,然后将聚类捕捉到最近的兴趣点(灯柱),我应该有足够的差距指出他们不合并。 再次感谢您的帮助。 –

1

基于密度的聚类,比如DBSCAN,肯定是要走的路。

DBSCAN的两个参数应该是相当明显的设置:

  • 小量:这是用于聚类的半径,所以例如你可以使用10米,假设没有灯柱接近10米。 (你应该使用大地测量距离,而不是欧几里得!)

  • minPts:本质上是一个簇的最小尺寸。你甚至可以使用1或2。

  • 距离:此参数是隐含的,但可能更重要。您可以在这里使用空间和时间的组合。例如。空间10米,时域1年。请参阅广义DBSCAN以获得更灵活的版本,从而明确了如何使用多个域。