scipy.ndimage.

标签#

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

在数组中标记特征。

参数:
输入array_like

一个类似数组的对象,需要进行标记。input 中的非零值被视为特征,而零值被视为背景。

结构类似数组, 可选

定义特征连接的结构元素。structure 必须是中心对称的(见注释)。如果没有提供结构元素,则会自动生成一个连接性等于一的方形结构元素。也就是说,对于一个二维的 input 数组,默认的结构元素是:

[[0,1,0],
 [1,1,1],
 [0,1,0]]
输出(None, 数据类型, 类数组), 可选

如果 output 是一个数据类型,它指定结果标记特征数组的类型。如果 output 是一个类似数组的对象,那么 output 将被更新为此函数标记的特征。此函数可以通过传递 output=input 进行原地操作。请注意,输出必须能够存储最大的标签,否则此函数将引发异常。

返回:
标签ndarray 或 int

一个整数 ndarray,其中 input 中的每个唯一特征在返回的数组中都有一个唯一的标签。

num_features整数

找到了多少个对象。

如果 output 为 None,此函数返回一个元组 (labeled_array, num_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]

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

示例

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

>>> from scipy.ndimage import label, generate_binary_structure
>>> import numpy as np
>>> 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)

显示两个标记的特征(注意,上面的特征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]])