骨架图(python)坐标错误

骨架图(python)坐标错误,python,coordinates,error-reporting,Python,Coordinates,Error Reporting,我正在使用skeleton-to-csgraph()分析我获得的骨架,该函数应该会将一些数据发送回我,其中包括矩阵[(N+1)x 2]中骨架所有点的所有坐标,其中N是点数。然而,有一种情况是,这个函数给了我一个坐标矩阵,但没有任何理由会有一些错误。 有人知道错误可能来自哪里吗 有关函数和包的更多信息,请参见此处: 对于grid,一个int32[200100]的数据数组,其值为1或0。此链接中的文件: 如图所示,我获得了一个坐标的非整数值,如下步骤: 注意:我在jupyter笔记本上运行了这

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

有关函数和包的更多信息,请参见此处:

对于grid,一个int32[200100]的数据数组,其值为1或0。此链接中的文件:


如图所示,我获得了一个坐标的非整数值,如下步骤: 注意:我在jupyter笔记本上运行了这个,所以您将看到!安装开始时

!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);


在某些特定情况下,函数
skeleton-to-csgraph()
存在问题。但要克服此错误,以下代码提供了您应该得到的结果:

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

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

您遇到的问题是因为skan需要将连接像素折叠到其质心中,以生成连贯的图形。有关详细信息,请参阅。抱歉,这没有更好的记录。我已经提出了一个问题,以在将来改进这一点:

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


欢迎继续讨论github!请添加您的代码和完整的错误跟踪日志。谢谢我的错误来自我代码的另一部分,但这是由于我在这里描述的错误,函数骨架图应该给我发送一些它没有的东西。我在这里描述的错误不会产生错误,这是matterI在这个平台上是新出现的,我不知道如何与您共享导致此错误的输入当我运行时,我能够获得图形,最终能够生成图像
draw.overlay\u skeleton\u networkx(图形,坐标,图像=骨架,轴=ax)
和在坐标中接收的值,且均不为零。图像是你的目标吗?我想要下一个只有整数值的坐标矩阵,你可以在坐标矩阵325行中查看吗?因为它在那里,我有两个我不应该有的值(不是整数的值)!我也可以运行和绘制这个,但奇怪的是,坐标矩阵中没有整数值,我们应该只有整数,因为它指的是矩阵中的位置,所以如果我想处理这个数据(坐标),我不能,因为这个错误,这些是值(float-[115.33333333 11.33333333])都是基于网格的。如果你想覆盖它,你可以做坐标[325]=[115,11],然后把它输入到下一个处理中。我有一个解决方案来克服这个问题:a=np.where(skeleton==1)/b=np.array([a[0],a[1]])。transpose()/coordinates=np.vstack([0,0],b))/但是我们一致认为这个函数有问题!它不应该返回浮点值great!由于这是skan的lib,请查看您是否可以与lib的作者一起记录问题。我将拭目以待。感谢您的时间和确认。:)谢谢你的回答!我会在github上检查,我以前没有检查过,我也没有去的反射。但是如果我能很好地理解,获得这个错误值是不正常的?它应该是索引而不是浮点坐标?不,它们是节点坐标,它们可以是浮点(“亚像素”)。但有时我也会获得两次坐标(在我的第一篇文章/问题中,是节点328),这也正常吗?也正常,只是不太正常
a = np.where(skeleton == 1 )
b = np.array([a[0], a[1]]).transpose()
coordinates = np.vstack(([0,0],b))