當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python skimage.measure.find_contours用法及代碼示例

用法:

skimage.measure.find_contours(image, level=None, fully_connected='low', positive_orientation='low', *, mask=None)

在二維數組中查找給定級別值的 iso-valued 輪廓。

使用“marching squares” 方法計算特定級別值的輸入二維數組的iso-valued 輪廓。數組值是線性插值的,以便為輸出輪廓提供更好的精度。

參數

image二維數組

輸入要在其中查找輪廓的圖像。

level浮點數,可選

在數組中查找輪廓的值。默認情況下,級別設置為 (max(image) + min(image)) /2

fully_connected字符串,{‘low’, ‘high’}

指示是否考慮低於給定級別值的數組元素fully-connected(因此高於該值的元素將僅麵連接),反之亦然。 (有關詳細信息,請參閱下麵的注釋。)

positive_orientation字符串,{‘low’, ‘high’}

指示輸出等高線是否會在低或 high-valued 元素島周圍生成 positively-oriented 多邊形。如果‘low’ 則輪廓將逆時針圍繞iso-value 下方的元素纏繞。或者,這意味著 low-valued 元素始終位於輪廓的左側。 (詳情見下文。)

maskbool 的 2D ndarray,或無

一個布爾掩碼,True,我們要在其中繪製輪廓。請注意,始終將 NaN 值排除在考慮的區域之外(在 arrayNaN 的地方, mask 設置為 False )。

返回

contours(n,2)-ndarrays 列表

每個輪廓都是一個形狀為 (n, 2) 的 ndarray,由沿輪廓的 n 個 (row, column) 坐標組成。

其他參數

arrayDEPRECATED

已棄用以支持圖像。

注意

行進方塊算法是行進立方體算法 [1] 的一個特例。這裏有一個簡單的解釋:

http://users.polytech.unice.fr/~lingrand/MarchingCubes/algo.html

行進方塊算法中有一個不明確的情況:當給定的2 x 2-元素方塊有兩個high-valued和兩個low-valued元素時,每對對角相鄰。 (其中 high- 和 low-valued 是相對於所尋求的輪廓值。)在這種情況下,可以通過分隔 low-valued 元素的薄地峽將 high-valued 元素“連接在一起”,反之亦然.當元素通過對角線連接在一起時,它們被認為是“完全連接的”(也稱為“face+vertex-connected”或“8-connected”)。隻有high-valued或low-valued元素可以是fully-connected,其他集合將被視為“face-connected”或“4-connected”。默認情況下,low-valued元素被認為是fully-connected;這可以使用‘fully_connected’ 參數進行更改。

輸出輪廓不保證是關閉的:與數組邊或masked-off 區域(掩碼為 False 或數組為 NaN)相交的輪廓將保持打開狀態。所有其他輪廓將被關閉。 (可以通過檢查起點是否與終點相同來測試輪廓的closed-ness。)

輪廓是定向的。默認情況下,低於輪廓值的數組值位於輪廓的左側,大於輪廓值的值位於右側。這意味著輪廓將在 low-valued 像素的島嶼周圍逆時針(即“正向”)纏繞。可以使用 ‘positive_orientation’ 參數更改此行為。

輸出列表中輪廓的順序由輪廓中最小x,y(按字典順序)坐標的位置確定。這是遍曆輸入數組的方式的副作用,但可以依賴。

警告

假定數組坐標/值是指中央的數組元素。舉一個簡單的示例輸入:[0, 1].該數組中 0.5 的插值位置在 0 元素之間(在x=0) 和 1 元素 (在x=1),因此會落在x=0.5.

這意味著要找到合理的等高線,最好在預期的“light” and “dark” 值之間找到等高線。特別是,給定一個二值化數組,不要選擇在數組的低值或高值處查找輪廓。這通常會產生退化的輪廓,尤其是在單個數組元素寬的結構周圍。而是選擇一個中間值,如上所述。

參考

1

Lorensen, William and Harvey E. Cline. Marching Cubes: A High Resolution 3D Surface Construction Algorithm. Computer Graphics (SIGGRAPH 87 Proceedings) 21(4) July 1987, p. 163-170). DOI:10.1145/37401.37422

例子

>>> a = np.zeros((3, 3))
>>> a[0, 0] = 1
>>> a
array([[1., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
>>> find_contours(a, 0.5)
[array([[0. , 0.5],
       [0.5, 0. ]])]

相關用法


注:本文由純淨天空篩選整理自scikit-image.org大神的英文原創作品 skimage.measure.find_contours。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。