【发布时间】:2018-01-22 01:10:12
【问题描述】:
我有一个大小为n 的二维数组,代表n 3D 空间中的点数,position[][] 代表 XYZ(例如,position[0][0] 是 X,position[0][1] 是 Y,position[0][2]是点0的Z坐标。
我需要做的是对点进行聚类,所以要拥有n/k 大小为k 的集群数量,这样每个集群都包含k 最接近 点3D空间。例如,如果 n=100 和 k=5,我想要 20 个 5 个点的集群,它们是空间中最近的邻居。
我怎样才能做到这一点? (我需要伪代码。对于 sn-ps 最好用 Java)
到目前为止,我所做的是基于每个组件的简单排序。但这确实不给了我最近的邻居。
- 基于 X 排序 (
position[0][0]) - 然后根据 Y 排序 (
position[0][1]) - 然后根据 Z 排序 (
position[0][2])
for (int i=0; i<position.length; i++){
for (int j=i+1; j<position.length; j++){
if(position[i][0] > position[i+1][0]){
swap (position[i+1][0], position[i][0]);
}
}
}
// and do this for position[i][1] (i.e. Y) and then position[i+2][2] (i.e. Z)
我相信我的问题与 使用 kd-trees 的最近邻搜索略有不同,因为每次迭代中的邻居不应与其他邻居重叠。我想我们可能需要将它用作组件,但如何使用,这是个问题。
【问题讨论】:
-
到目前为止,您对 3d 或点云聚类技术的搜索结果如何?
-
我在 3D 空间中找不到 k 个最近邻居的聚类。如上所述,我想出了自己的算法。
-
@TinaJ 我将创建一个低分辨率 3D 体素图来计算每个单元格的点密度。如果高于阈值(递归地)增加该单元格的分辨率,直到您找到您的近似簇位置...然后按与它们的距离对点进行分组...类似于密度图的Finding holes in 2d point sets? 和聚类的Effective gif/image color quantization? .. .
-
@TinaJ 我创建了一个 aswer 并描述了我的意思....
标签: java arrays algorithm 3d k-means