label#
- scipy.ndimage.label(input, structure=None, output=None)[source]#
標記陣列中的特徵。
- 參數:
- input類陣列
要標記的類陣列物件。 *input* 中的任何非零值都會被視為特徵,而零值則被視為背景。
- structure類陣列,選用性
一個定義特徵連接的結構元素。 *structure* 必須是中心對稱的(請參閱「註釋」)。如果沒有提供結構元素,則會自動產生一個平方連通性等於 1 的結構元素。也就是說,對於 2 維的 *input* 陣列,預設的結構元素是
[[0,1,0], [1,1,1], [0,1,0]]
- output(None、資料類型、類陣列),選用性
如果 *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]]
那麼結構矩陣會指示 *input* 中的條目 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]], 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)