我正在尝试在已知 GPS 位置周围聚集照片(GPS + 时间戳)。
3d 点 = 2d + 时间戳。
比如:我在路上走,拍路灯柱,有的很有趣,所以拍了10张,有的没有,所以我就不拍了。
我想把我的照片聚集在灯柱周围,这样我就可以看到正在拍摄哪个灯柱。
我一直在研究像 k-means 聚类这样的东西,并且想要一些智能的东西,而不仅仅是将照片捕捉到最近的灯柱。
(我要用javascript为客户端应用程序编写代码,一次处理大约(2000,500)个点)
我正在尝试在已知 GPS 位置周围聚集照片(GPS + 时间戳)。
3d 点 = 2d + 时间戳。
比如:我在路上走,拍路灯柱,有的很有趣,所以拍了10张,有的没有,所以我就不拍了。
我想把我的照片聚集在灯柱周围,这样我就可以看到正在拍摄哪个灯柱。
我一直在研究像 k-means 聚类这样的东西,并且想要一些智能的东西,而不仅仅是将照片捕捉到最近的灯柱。
(我要用javascript为客户端应用程序编写代码,一次处理大约(2000,500)个点)
基于密度的聚类,例如 DBSCAN,绝对是要走的路。
DBSCAN 的两个参数设置应该很明显:
epsilon:这是集群的半径,所以你可以使用 10 米,假设没有灯柱接近 10 米。(您应该使用大地距离,而不是欧几里得!)
minPts:本质上是集群的最小大小。您甚至可以使用 1 或 2。
距离:这个参数是隐含的,但可能更重要。您可以在这里使用空间和时间的组合。例如,空间上 10 米,时域上 1 年。有关更灵活的版本,请参阅 Generalized DBSCAN,这使得如何使用多个域变得一目了然。
KMeans 聚类确实是一种流行且易于实现的算法,但它有几个问题。
您需要向他提供集群的数量 N
作为输入变量。现在,由于我假设您不知道要拍摄多少“事物”,因此找到正确的 N。使用迭代 KMeans 或类似的变体只会使问题滑到为多集群分区找到合适的评估函数,这绝非易事然后找到 N 本身。
它只能检测线性可分的形状。假设您在凡尔赛宫周围走动,并拍摄了很多外墙的照片。然后你搬进去,给里面的花园拍照。您获得的两个形状是里面有一个圆盘的thorus,但KMeans 无法区分它们。
就个人而言,我会使用某种基于密度的聚类:您仍然需要为算法提供一些变量,但是,由于我们假设空间将是欧几里得,因此找到它们不应该花费太多。另外,它使您能够区分噪声点和聚类点,并让您以不同的方式对待它们。
此外,它可以区分大多数形状,并且您无需事先给出簇的数量。
您可以使用 delaunay 三角剖分来查找最近的点。它为您提供了一个最近邻图,其中点位于 delaunay 边上。或者您可以像照片马赛克一样按颜色进行聚类。它使用反极树。这是一个类似的答案:Algorithm to find for all points in set A the nearest neighbor in set B