与えられた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
ご覧のとおり、隣接するすべてのセルが表示されますが、それらの合計はパッチの周囲と等しくありません。例の配列の穴は、正しく4つのエッジがありますが、1として計算されます。さまざまな形状の大きな穴にも同様の問題があります。
私は過去に同様の質問をしましたが、すべてが解決策を提供しましたが、最終的には正しい出力値で解決されませんでした。誰かがこれを達成する方法を知っていますか?numpy、scipy、および基本パッケージ以外のパッケージはご遠慮ください。