Python 在二维点云中查找孔

Python 在二维点云中查找孔,python,geometry,2d,computational-geometry,point-clouds,Python,Geometry,2d,Computational Geometry,Point Clouds,我有一组二维点。它们是标准笛卡尔网格系统上的X,Y坐标。有人知道一种实现算法的方法吗(首选Python),该算法将隔离每个“孔的面积”,以便找到每个孔的最大直径 下面是实际点集的示例: 更新: 我设法用固定数量的簇来隔离每个区域,但是如何根据“洞的区域”的数量来定义簇的数量呢 结果: 已解决 根据估计的簇数识别每个孔,可以使用计算直径。是否可以编辑问题以解释“将为每个孔找到最大直径”与2d点集之间的关系?看起来你的截图上有一些红色圆圈。你只是想找出它们的内径吗?是的,这正是我需要的查找“最大内

我有一组二维点。它们是标准笛卡尔网格系统上的X,Y坐标。有人知道一种实现算法的方法吗(首选Python),该算法将隔离每个“孔的面积”,以便找到每个孔的最大直径

下面是实际点集的示例:

更新:

我设法用固定数量的簇来隔离每个区域,但是如何根据“洞的区域”的数量来定义簇的数量呢

结果:

已解决
根据估计的簇数识别每个孔,可以使用

计算直径。是否可以编辑问题以解释“将为每个孔找到最大直径”与2d点集之间的关系?看起来你的截图上有一些红色圆圈。你只是想找出它们的内径吗?是的,这正是我需要的查找“最大内切圆”问题,这就是你想要解决的问题。请注意,您需要为此隔离集群。在我看来,由于噪音的影响,这将是一个非常糟糕的孔直径估计。@YvesDaoust我如何根据“孔面积”的数量来定义簇的数量?@bestyasser:对不起,我不明白你的意思。
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()