【发布时间】:2018-05-17 12:46:22
【问题描述】:
我有一组二维点。它们是标准笛卡尔网格系统上的 X、Y 坐标。有谁知道一种方法来实现(最好在 Python 中)一种算法,该算法将隔离每个“孔的区域”,以便找到每个孔的最大直径。
以下是实际点集的示例:
更新:
我设法用固定数量的簇来隔离每个区域,但是如何根据“洞的区域”的数量来定义簇的数量?
from sklearn.cluster import KMeans
import numpy as np
import ipyvolume.pylab as p
dat = xyz
xycoors = dat[:,0:2]
fit = KMeans(n_clusters=5).fit(xycoors)
clus_datas={i: xycoors[np.where(fit.labels_ == i)] for i in
range(fit.n_clusters)}
clus_1=clus_datas[0]
clus_2=clus_datas[1]
clus_3=clus_datas[2]
clus_4=clus_datas[3]
clus_5=clus_datas[4]
min_bloc=np.array(nuage)
fig = p.figure(width=1000)
fig.xlabel='x'
fig.ylabel='z'
fig.zlabel='y'
p.scatter(clus_1[:,1], clus_1[:,1]*0, clus_1[:,0], color="black", size=.1)
p.scatter(clus_2[:,1], clus_2[:,1]*0, clus_2[:,0], color="red", size=.1)
p.scatter(clus_3[:,1], clus_3[:,1]*0, clus_3[:,0], color="green", size=.1)
p.scatter(clus_4[:,1], clus_1[:,1]*0, clus_4[:,0], color="bleu", size=.1)
p.scatter(clus_5[:,1], clus_2[:,1]*0, clus_5[:,0], color="red", size=.1)
p.squarelim()
p.show()
【问题讨论】:
-
您能否编辑您的问题以解释“将找到每个孔的最大直径”与 2d 点集之间的关系?看起来您的屏幕截图有一些红色圆圈。你只是想找出这些的内径吗?
-
是的,这正是我需要的
-
查找“最大内切圆”问题,这是您要解决的问题。请注意,您需要为此隔离集群。 IMO,由于噪音,这将是对孔直径的非常差的估计。
-
@YvesDaoust 如何根据“孔的面积”数定义簇数?
-
@bestyasser:对不起,不明白你的意思。
标签: python geometry 2d computational-geometry point-clouds