次のバイナリ イメージがあるとします。
0010
0101
0101
0010
0100
1010
0100
0000
0 は背景のピクセルを表し、1 は画像のピクセルを表します。ご覧のとおり、この画像には 2 つの穴があります。アルゴリズムを使用してこの画像の穴の数を取得する方法はありますか?(Java または Python で、Matlab ではありません)
次のバイナリ イメージがあるとします。
0010
0101
0101
0010
0100
1010
0100
0000
0 は背景のピクセルを表し、1 は画像のピクセルを表します。ご覧のとおり、この画像には 2 つの穴があります。アルゴリズムを使用してこの画像の穴の数を取得する方法はありますか?(Java または Python で、Matlab ではありません)
コードとして提示されたいくつかのアイデアを次に示します (必要なものではない可能性があります)。
問題は、私があなたの例を理解していないことです。近傍定義に応じて、異なる結果が生じる可能性があります。
import numpy as np
from skimage.measure import label
img = np.array([[0,0,1,0],
[0,1,0,1],
[0,1,0,1],
[0,0,1,0],
[0,1,0,0],
[1,0,1,0],
[0,1,0,0],
[0,0,0,0]])
labels = label(img, connectivity=1, background=-1) # conn=1 -> 4 neighbors
label_vals = np.unique(labels) # conn=2 -> 8 neighbors
counter = 0
for i in label_vals:
indices = np.where(labels == i)
if indices:
if img[indices][0] == 0:
print('hole: ', indices)
counter += 1
print(img)
print(labels)
print(counter)
('hole: ', (array([0, 0, 1, 2, 3, 3, 4]), array([0, 1, 0, 0, 0, 1, 0])))
('hole: ', (array([0]), array([3])))
('hole: ', (array([1, 2]), array([2, 2])))
('hole: ', (array([3, 4, 4, 5, 6, 6, 6, 7, 7, 7, 7]), array([3, 2, 3, 3, 0, 2, 3, 0, 1, 2, 3])))
('hole: ', (array([5]), array([1])))
[[0 0 1 0]
[0 1 0 1]
[0 1 0 1]
[0 0 1 0]
[0 1 0 0]
[1 0 1 0]
[0 1 0 0]
[0 0 0 0]]
[[ 1 1 2 3]
[ 1 4 5 6]
[ 1 4 5 6]
[ 1 1 7 8]
[ 1 9 8 8]
[10 11 12 8]
[ 8 13 8 8]
[ 8 8 8 8]]
5