我正在使用来自skimage的skeletonize,它提供了一个8-neigborhood连接的结果:
import numpy as np
from skimage.morphology import skeletonize
image = np.array(
[[0, 0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 1, 1, 1, 1, 1, 1]])
print image
print
skel = skeletonize(image)
print skel.astype(np.uint8)
# result
#[[0 0 0 0 0 0 0 0 0]
# [0 0 0 1 1 1 0 0 0]
# [0 0 0 0 0 0 1 1 1]
# [0 0 0 0 0 0 0 0 0]]
我想要获得的是4连接结果,例如:
#[[0 0 0 0 0 0 0 0 0]
#[0 0 0 1 1 1 1 0 0]
#[0 0 0 0 0 0 1 1 1]
#[0 0 0 0 0 0 0 0 0]]
或
#[[0 0 0 0 0 0 0 0 0]
#[0 0 0 1 1 1 0 0 0]
#[0 0 0 0 0 1 1 1 1]
#[0 0 0 0 0 0 0 0 0]]
但不是
#[[0 0 0 0 0 0 0 0 0]
#[0 0 0 1 1 1 0 0 0]
#[0 0 0 0 1 1 1 1 1]
#[0 0 0 0 0 0 0 0 0]]
我该怎么做?在骨架化中没有neigborhood选项。
我之所以要问的是,我想用skimage.measure.find_contours进一步处理连接线,如果它们不是4连接则会将线分成两行。
答案 0 :(得分:2)
skeletonize
和medial_axis
都不支持连接参数。但也许你可以通过后处理过程逃脱:
from scipy import ndimage as ndi
diagonals = ndi.correlate(skel.astype(int), [[0, 1, 0], [0, 0, 1], [0, 0, 0]])
skel2 = skel.copy()
skel2[diagonals == 2] = 1
这会产生
[[0 0 0 0 0 0 0 0 0]
[0 0 0 1 1 1 0 0 0]
[0 0 0 0 0 1 1 1 1]
[0 0 0 0 0 0 0 0 0]]
通过修改掩码,您可以获得您描述的其他示例输出。