Python中的二维alpha形状/凹壳问题

2024-05-29 10:07:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的2D点集,我已将其下采样为44x2 numpy数组(稍后定义的数组)。我试图找到这些点的边界形状,它们实际上是一个凹壳。在第二幅图中,我手动标记了一个我希望得到的近似边界形状

pointspoints+overlay

我尝试过使用alphashapehere的Delauney三角剖分方法,这两种方法提供了相同的答案

不幸的是,不管alpha参数如何,我似乎无法实现我所需要的。我尝试了一些手动设置和alphaoptimize,下面是一些示例

alpha=0.1alpha=0.5alpha=1.0

我对alphashape有什么重要的误解吗?文档看起来很清楚,但显然我遗漏了一些东西

import numpy as np
import alphashape
from descartes import PolygonPatch
import matplotlib.pyplot as plt

points = np.array(
[[0.16,3.98],
[-0.48,3.33],
[-0.48,4.53],
[0.1,3.67],
[0.04,5.67],
[-7.94,3.02],
[-18.16,3.07],
[-0.15,5.67],
[-0.26,5.14],
[-0.1,5.11],
[-0.96,5.48],
[-0.03,3.86],
[-0.12,3.16],
[0.32,4.64],
[-0.1,4.32],
[-0.84,4.28],
[-0.56,3.16],
[-6.85,3.28],
[-0.7,3.24],
[-7.2,3.03],
[-1.0,3.28],
[-1.1,3.28],
[-2.4,3.28],
[-2.6,3.28],
[-2.9,3.28],
[-4.5,3.28],
[-12.3,3.28],
[-14.8,3.28],
[-16.7,3.28],
[-17.8,3.28],
[-0,3.03],
[-1,3.03],
[-2.1,3.03],
[-2.8,3.03],
[-3.2,3.03],
[-5,3.03],
[-12,3.03],
[-14,3.03],
[-17,3.03],
[-18,3.03],
[-0.68,4.86],
[-1.26,3.66],
[-1.71,3.51],
[-9.49,3.25]])

alpha = 0.1
alphashape = alphashape.alphashape(points, alpha)

fig = plt.figure()
ax = plt.gca()
ax.scatter(points[:,0],points[:,1])
ax.add_patch(PolygonPatch(alphashape,alpha=0.2))
plt.show()

Tags: 方法importalphanumpyasnpplt数组
1条回答
网友
1楼 · 发布于 2024-05-29 10:07:14

由于x轴和y轴上的比例非常不同,因此您附加的图具有误导性。如果将两个轴设置为相同的比例,将获得以下绘图:

point cloud

由于点的x坐标之间的差异平均远大于y坐标之间的差异,因此无法获得与所需结果相似的alpha形状。对于较大值的alpha,沿x轴散布的点将不会通过边连接,因为alpha形状将使用太小的圆来连接这些点。对于足够小的alpha值,使这些点连接起来,您将获得绘图右侧的长边

通过重新缩放所有点的y坐标,有效地在垂直方向上拉伸绘图,可以解决此问题。例如,将y坐标乘以7并设置alpha = 0.4可以得到以下图片:

alpha shape

相关问题 更多 >

    热门问题