如何使用GUDHI从binary-mask-png计算正确的持久图

问题描述 投票:0回答:1

我正在尝试从掩码中获取持久性图(用于分段),我的代码如下:

import numpy as np
import gudhi as gd
import matplotlib.pyplot as plt
from PIL.Image import open as open

image = 1 - np.asarray(open(r'./samples/Image_01L_1stHO.png').convert('L'))
plt.imshow(image, cmap='gray')
plt.title("Original Image")
plt.show()

image_vector = image.flatten()

cubical_complex = gd.CubicalComplex(
    dimensions=[image.shape[0], image.shape[1]],
    top_dimensional_cells=image_vector
)

cubical_complex.compute_persistence(homology_coeff_field=2, min_persistence=0)
print(cubical_complex)

cofaces = cubical_complex.cofaces_of_persistence_pairs()

print("Cofaces of persistence pairs:", cofaces)

persistence_diagram = cubical_complex.persistence()
print("Persistence Diagram:", persistence_diagram)

gd.plot_persistence_diagram(persistence_diagram)
plt.show()

我得到了: enter image description hereenter image description here

好像出了什么问题。即使当我尝试更改我的 png,或者甚至尝试随机生成一些二进制蒙版时,持久性图始终显示为这样,只有两个红点。但看起来该函数已经生成了正确的

cofaces_of_persistence_pairs
!那么为什么?!请帮忙!谢谢!

如果我有任何错误,请告诉我!

python pytorch persistence topology
1个回答
0
投票

我认为第一个问题应该是:你想要精确计算什么?持久性图是为过滤定义的,即复合物的递增序列,通常表示为一个复合物,具有与每个单元格关联的值,以指示该单元格出现在过滤的哪一步。

图像被解释为立方体复合体,灰度级表示像素(或顶点)的过滤值。对于黑白图像,只有 2 个值,因此只有 3 个复合体:空→黑色→全。因此,对于每个黑色连通分量,您得到的是一个点(黑色,白色)(除了(黑色,无穷大)。

可以从图像中定义其他过滤。例如,可以定义一个函数,对于平面中的每个点,将其距离与最近的白色像素相关联。这个新函数的持久图将具有几乎相同数量的点,所有 x=0,但 y 坐标将表示相应黑色区域的“内半径”。 Gudhi 没有计算此函数的代码,但如果您自己计算它并将其表示为图像/数组,您可以将其提供给 CubicalPersistence 或 CubicalComplex。

© www.soinside.com 2019 - 2024. All rights reserved.