提取被黑人包围的白人的指数

Extract the indices of whites surrounded by blacks

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]]