Python:计算contou的面积

2024-03-28 14:02:13 发布

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

我想计算一个未知函数轮廓内的面积。我的函数值保存在一个Numpy数组中,绘制时如下所示: enter image description here

我想计算不同高度的横截面积,例如峰高的50%。在

此外,有时特征周围会有噪声,因此会出现其他峰值,这意味着特定高度的轮廓可能会导致创建多个区域。如果从上面看的话,我只对围绕“兴趣峰”的轮廓内的区域感兴趣。在

在上图中,“感兴趣的峰值”是在其顶点有红点的那个。我有一个算法可以识别感兴趣的峰值,所以我总是知道我对哪个特定的峰值感兴趣。在

有人能帮我吗? 非常感谢


我找到了this question,但无法运行给定的示例。我对vs = contour.get_paths()[0].vertices行有问题,列表索引超出范围。在

我还需要修改代码,以确保该区域包含了峰值位置


这是尝试查找区域的代码部分 水平=[0.5,0.75]

calc_levels = (radial[x_peak,y_peak])*np.transpose(levels)
cs = plt.contour(Z,X_,radial, levels = calc_levels,colors='k')
plt.clabel(cs, inline=2, fontsize=10)
for loop in range(len(levels)):
    vs = None
    contour_ = None
    contour_ = cs.collections[loop]
    vs = contour_.get_paths()[0].vertices
    ax.scatter(vs[:,0],vs[:,1],calc_levels[loop],c='red',s=20)
    # Compute area enclosed by vertices
    a = area(vs)
    features['Radial_Area_' + str(levels[loop]*100)] = area(vs)
    print("r = {}: a = {}".format(levels[loop],a))

在哪里

^{pr2}$

以这个问题的链接帖子为例。但是,it代码总是在contour_ = cs.collections[loop]行崩溃,显然列表索引超出范围。我已经尝试了我能想到的每一个代码修改来让它工作,但是我现在没有主意了。在


有趣的是,如果我一行一行地运行代码,那么它不会崩溃并提供输出,即使它是一个不太可能的小值


有趣的是,我最终让这段代码在一个简单的例子中工作,其中只包含了感兴趣的峰值。我不知道我改变了上面的代码让它工作。我仍然需要一些帮助,以确定在存在多个峰值的情况下计算哪个区域。如果你能帮我这个忙,请告诉我


Tags: 函数代码loop区域高度calcareacs