我想计算给定 numpy 数组结构的周长。周长是指numpy数组中结构的确切周长。该结构可以包括孔。
我目前的做法是这样的:
import numpy
a = numpy.zeros((6,6), dtype=numpy.int)
a[1:5, 1:5] = 1;a[3,3] = 0
# Way 1
s = ndimage.generate_binary_structure(2,1)
c = ndimage.binary_dilation(a,s).astype(a.dtype)
b = c - a
numpy.sum(b) # The result, however the hole is calculated as 1, although there are 4 edges
# Way 2
b = ndimage.distance_transform_cdt(a == 0,metric='taxicab') == 1
b = b.astype(int)
numpy.sum(b) # same as above
如您所见,它显示了所有相邻的单元格,但是它们的总和不等于补丁的周长。示例数组中的孔被计算为 1,尽管它正确有 4 条边。不同形状的较大孔也存在类似问题。
我过去曾问过类似的问题,但所有提供的解决方案最终都无法以正确的输出值解决。有人知道如何做到这一点?除了 numpy、scipy 和基本包之外,请不要使用其他包。