我需要标记一个已经分类的 img。问题是,图像是非二进制的,我需要分别计算不同值的相邻补丁。
考虑以下数据集:
import numpy as np
data = np.zeros((6,6), dtype=np.uint16)
data[2:4, 2:4] = 10
data[4, 4] = 10
data[:2, :3] = 22
data[0, 5] = 22
data
>>>
array([[22, 22, 22, 0, 0, 22],
[22, 22, 22, 0, 0, 0],
[0, 0, 10, 10, 0, 0],
[0, 0, 10, 10, 0, 0],
[0, 0, 0, 0, 10, 0],
[0, 0, 0, 0, 0, 0]], dtype=uint16)
我想获得(使用 8 个 neigbours 结构元素)以下内容:
array([[1, 1, 1, 0, 0, 3],
[1, 1, 1, 0, 0, 0],
[0, 0, 2, 2, 0, 0],
[0, 0, 2, 2, 0, 0],
[0, 0, 0, 0, 2, 0],
[0, 0, 0, 0, 0, 0]], dtype=uint16)
但是使用 scipy.label 函数我得到了完全不同的结果:
from scipy import ndimage as ndi
s = ndi.generate_binary_structure(2,2)
labeled_array, num_features = ndi.label(data, structure=s)
labeled_array
>>>
array([[1, 1, 1, 0, 0, 2],
[1, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0]], dtype=int16)
那么有没有一个技巧来分离不同价值的补丁?