提取被黑人包围的白人的索引


import numpy as numpy
data = np.array([[0, 0 , 0 , 0 , 0 , 0 , 0 , 0],
                 [0,*1*, 0 , 0 , 0 , 0 , 0 , 0],
                 [1, 0 , 0 , 0 ,*1*, 0 , 0 , 0],
                 [1, 0 , 0 , 0 ,*1*,*1*, 0 , 0],
                 [0, 0 , 0 ,*1*,*1*, 0 , 0 , 1],
                 [1, 0 , 0 , 0 ,*1*, 0 , 1 , 1],
                 [1, 1 , 0 , 0 , 0 , 0 , 1 , 0]])

如果色块在所有四个相邻像素中被黑色(零)包围,我想提取白色(一)斑块的索引。预期位置用斜体表示。

有什么想法吗?

首先,标记图像中的所有连接对象(默认结构元素考虑北-南-东-西方向的邻居)。 然后,删除任何接触边框的对象。 背景标记为 0,其余是完全被它包围的对象。

from __future__ import print_function
import numpy as np
from scipy.ndimage import label
from skimage.segmentation import clear_border
data = np.array([[0, 0 , 0 , 0 , 0 , 0 , 0 , 0],
                 [0, 1 , 0 , 0 , 0 , 0 , 0 , 0],
                 [1, 0 , 0 , 0 , 1 , 0 , 0 , 0],
                 [1, 0 , 0 , 0 , 1 , 1 , 0 , 0],
                 [0, 0 , 0 , 1 , 1 , 0 , 0 , 1],
                 [1, 0 , 0 , 0 , 1 , 0 , 1 , 1],
                 [1, 1 , 0 , 0 , 0 , 0 , 1 , 0]])
objects, count = label(data)
objects_inside = clear_border(objects)
print((objects_inside != 0).astype(int))

结果:

[[0 0 0 0 0 0 0 0]
 [0 1 0 0 0 0 0 0]
 [0 0 0 0 1 0 0 0]
 [0 0 0 0 1 1 0 0]
 [0 0 0 1 1 0 0 0]
 [0 0 0 0 1 0 0 0]
 [0 0 0 0 0 0 0 0]]

相关内容

  • 没有找到相关文章

最新更新