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

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

// custom annotation
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@interface AesEncrypted {}

// class: CustomRequestBodyAdvice
@Override
public boolean supports(MethodParameter methodParameter,Type targetType,Class<? extends HttpMessageConverter<?>> converterType) {
    return methodParameter.hasParameterAnnotation(AesEncrypted.class);
}

// controller
@PostMapping("one")
String getDecrypted(@AesEncrypted @RequestBody Data data) {
    return data.value;
}

像图片一样,我没有得到一个坐标的整数值

解决方法

遵循以下步骤: 注意:我在 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,image=skeleton,axis=ax)

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

enter image description here

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

with skeleton,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上继续讨论! ?

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...