坐标 skeleton_to_csgraph (python) 错误

Error with coordinates of skeleton_to_csgraph (python)

我正在使用 skeleton-to-csgraph() 来分析我获得的骨架,这个函数应该给我发回一些数据,其中包括矩阵中骨架所有点的所有坐标 [( N+1) x 2],点数为 N。然而,有一种情况是这个函数无缘无故地给我一个带有一些错误的坐标矩阵。 有人知道错误可能来自哪里吗?

有关函数​​和包的更多信息,请点击此处: https://jni.github.io/skan/

Lines of the coordinates matrix given by skeleton-to-csgraph function. At the line 326 an unexplained error, it should be an int and not a float value because it is a pixel index

带网格,int32 [200,100] 的 ndarray,值为 1 或 0。文件在此 link: https://drive.google.com/drive/folders/12xwZBv3RKQ4Q802jXPAhtYZXHrsMytMl?usp=sharing

skeleton, distance = medial_axis(grid, return_distance=True)
graph, coordinates, degrees = skeleton_to_csgraph(skeleton)

如图,我得到了none一个坐标的整数值

执行了以下步骤: 注意:我运行这个在jupyter notebook上,所以你会看到!安装开始时

!pip install git+https://github.com/jni/skan # install latest version github

加载数据,并处理它。

import numpy as np
from skimage.morphology import medial_axis
from skan import skeleton_to_csgraph
from skan import _testdata
from skan import draw
from matplotlib import pyplot as plt
grid = np.load('grid.npy') # this is the file you shared through google drive

skeleton, distance = medial_axis(grid, return_distance=True)
graph, coordinates, degrees = skeleton_to_csgraph(skeleton)
fig, ax = plt.subplots()
draw.overlay_skeleton_networkx(graph,coordinates, image=skeleton,axis=ax)

fig, ax = plt.subplots()
draw.overlay_skeleton_2d(grid, skeleton, dilate=1, axes=ax);

Complete code screen snap

在某些特定情况下,函数 skeleton-to-csgraph() 似乎存在问题。但是为了克服这个错误,下面的代码提供了你应该得到的结果:

a = np.where(skeleton == 1 )
b = np.array([a[0], a[1]]).transpose()
coordinates = np.vstack(([0,0],b))

对于骨架,带有骨架图像和坐标的 numpy 数组,您应该使用 skeleton-to-csgraph() 获得的结果,其中包含骨架点的所有坐标。

您遇到的问题是因为 skan 需要将交汇点像素折叠到它们的质心中以生成连贯的图形。有关详细信息,请参阅 https://doi.org/10.7717/peerj.4312/supp-2。抱歉,这没有更好的记录。我已经提出了一个问题以在将来改进它:

https://github.com/jni/skan/issues/121

这个问题也相关:坐标数组包含所有节点坐标但也有一些垃圾坐标:

https://github.com/jni/skan/issues/108

欢迎继续讨论 github!