scipy.ndimage.label

scipy.ndimage.label(input, structure=None, output=None)[源代码]

为阵列中的要素添加标签。

参数
inputarray_like

要标记的类似数组的对象。中的任何非零值 input 被算作特征,零值被认为是背景。

structureARRAY_LIKE,可选

定义要素连接的结构元素。 structure 必须是中心对称的(请参阅注释)。如果没有提供结构化元素,则会自动生成一个连通性平方等于1的元素。也就是说,对于一个2-D input 数组中,默认结构元素为::

[[0,1,0],
 [1,1,1],
 [0,1,0]]
output(NONE,DATA-TYPE,ARRAY_LIKE),可选

如果 output 是一种数据类型,它指定生成的带标签的要素阵列的类型。如果 output 是一个类似数组的对象,则 output 将使用此函数中的已标记要素进行更新。通过传递output=input,该函数可以就地操作。请注意,输出必须能够存储最大的标签,否则此函数将引发异常。

退货
labelndarray或int

整数ndarray,其中每个唯一功能 input 在返回的数组中具有唯一标签。

num_features集成

找到了多少物品。

如果 output 为NONE,则此函数返回 (labeled_arraynum_features )。

如果 output 是ndarray,则它将使用中的值进行更新。 labeled_array 而且只有 num_features 将由此函数返回。

参见

find_objects

为标注的要素(或对象)生成切片列表;用于查找要素的位置或尺寸

注意事项

中心对称矩阵是围绕中心对称的矩阵。看见 [1] 了解更多信息。

这个 structure 矩阵必须是中心对称的,以确保双向连接。例如,如果 structure 矩阵不是中心对称的,定义为:

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

以及 input 是::

[[1,2],
 [0,3]]

则结构矩阵将指示输入中的条目2连接到1,但是1没有连接到2。

参考文献

1

中心对称(交叉对称)矩阵,它们的基本性质,特征值和特征向量。“美国数学月刊”92.10(1985):711-717。

示例

创建具有某些特征的图像,然后使用默认(十字形)结构元素对其进行标记:

>>> from scipy.ndimage import label, generate_binary_structure
>>> a = np.array([[0,0,1,1,0,0],
...               [0,0,0,1,0,0],
...               [1,1,0,0,1,0],
...               [0,0,0,1,0,0]])
>>> labeled_array, num_features = label(a)

这4个要素中的每一个都使用不同的整数进行标记:

>>> num_features
4
>>> labeled_array
array([[0, 0, 1, 1, 0, 0],
       [0, 0, 0, 1, 0, 0],
       [2, 2, 0, 0, 3, 0],
       [0, 0, 0, 4, 0, 0]])

生成结构元素,该结构元素将考虑连接的特征,即使它们对角接触也是如此:

>>> s = generate_binary_structure(2,2)

或,

>>> s = [[1,1,1],
...      [1,1,1],
...      [1,1,1]]

使用新的结构元素标记图像:

>>> labeled_array, num_features = label(a, structure=s)

显示2个已标记的要素(请注意,上面的要素1、3和4现在被视为单个要素):

>>> num_features
2
>>> labeled_array
array([[0, 0, 1, 1, 0, 0],
       [0, 0, 0, 1, 0, 0],
       [2, 2, 0, 0, 1, 0],
       [0, 0, 0, 1, 0, 0]])