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_featuresint
找到多少个对象。
如果 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,“中心对称(交叉对称)矩阵,其基本性质、特征值和特征向量。” The American Mathematical Monthly 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]], dtype=int32)
生成一个结构元素,该元素会考虑即使它们对角线接触也连接的特征
>>> 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]], dtype=int32)