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


Python cucim.skimage.measure.regionprops_table用法及代碼示例

用法:

cucim.skimage.measure.regionprops_table(label_image, intensity_image=None, properties=('label', 'bbox'), *, cache=True, separator='-', extra_properties=None)

計算圖像屬性並將它們作為pandas-compatible 表返回。

該表是將列名映射到值數組的字典。有關詳細信息,請參閱下麵的注釋部分。

0.16 版中的新函數。

參數

label_image(N, M[, P]) 數組

標記的輸入圖像。值為 0 的標簽將被忽略。

intensity_image(M, N[, P][, C]) ndarray,可選

與標記圖像大小相同的強度(即輸入)圖像,以及可選的多通道數據的額外維度。默認為無。

在 0.18.0 版中更改:添加了為通道提供額外維度的函數。

propertiesstr 的元組或列表,可選

將包含在結果字典中的屬性 有關可用屬性的列表,請參閱regionprops()。用戶應記住添加“label” 以跟蹤區域身份。

cache布爾型,可選

確定是否緩存計算的屬性。緩存屬性的計算速度要快得多,而內存消耗會增加。

separatorstr,可選

對於OBJECT_COLUMNS 中未列出的非標量屬性,每個元素將出現在其自己的列中,該元素的索引與屬性名稱通過此分隔符分隔。例如,2D 區域的慣性張量將出現在四列中:inertia_tensor-0-0inertia_tensor-0-1inertia_tensor-1-0inertia_tensor-1-1(其中分隔符為 -)。

對象列是不能以這種方式拆分的列,因為列數會根據對象而變化。例如, imagecoords

extra_properties可調用的迭代

添加不包含在 skimage 中的額外屬性計算函數。屬性的名稱是從函數名稱派生的,dtype 是通過在小樣本上調用函數來推斷的。如果額外屬性的名稱與現有屬性的名稱衝突,則額外屬性將不可見並發出 UserWarning。屬性計算函數必須將區域掩碼作為其第一個參數。如果屬性需要強度圖像,它必須接受強度圖像作為第二個參數。

返回

out_dictdict

字典將屬性名稱映射到該屬性的一組值,每個區域一個值。該字典可用作 pandas DataFrame 的輸入,以將屬性名稱映射到框架中的列,將區域映射到行。如果圖像沒有區域,則數組的長度為 0,但類型正確。

注意

每列包含一個標量屬性、一個對象屬性或多維數組中的一個元素。

每個區域具有標量值的屬性(例如 “eccentricity”)將顯示為浮點數或 int 數組,其中該屬性名稱作為鍵。

給定圖像維度的多維屬性of fixed size,例如“centroid”(無論區域大小,每個質心在 3D 圖像中都將具有三個元素),將被拆分為多個列,名稱為 {property_name }{separator}{element_num}(用於 1D 屬性)、{property_name}{separator}{elem_num0}{separator}{elem_num1}(用於 2D 屬性)等等。

對於沒有固定大小的多維屬性,例如“image”(區域的圖像大小因區域大小而異),將使用對象數組,以對應的屬性名稱作為鍵。

例子

>>> from skimage import data, util, measure
>>> image = data.coins()
>>> label_image = measure.label(image > 110, connectivity=image.ndim)
>>> props = measure.regionprops_table(label_image, image,
...                           properties=['label', 'inertia_tensor',
...                                       'inertia_tensor_eigvals'])
>>> props  
{'label': array([ 1,  2, ...]), ...
 'inertia_tensor-0-0': array([  4.012...e+03,   8.51..., ...]), ...
 ...,
 'inertia_tensor_eigvals-1': array([  2.67...e+02,   2.83..., ...])}

生成的字典可以直接傳遞給 pandas(如果已安裝),以獲得幹淨的 DataFrame:

>>> import pandas as pd  
>>> data = pd.DataFrame(props)  
>>> data.head()  
   label  inertia_tensor-0-0  ...  inertia_tensor_eigvals-1
0      1         4012.909888  ...                267.065503
1      2            8.514739  ...                  2.834806
2      3            0.666667  ...                  0.000000
3      4            0.000000  ...                  0.000000
4      5            0.222222  ...                  0.111111

[5 行 x 7 列]

如果我們想測量一個不是內置屬性的特性,我們可以定義自定義函數並將它們作為 extra_properties 傳遞。例如,我們可以創建一個自定義函數來測量一個區域的強度四分位數:

>>> from skimage import data, util, measure
>>> import numpy as np
>>> def quartiles(regionmask, intensity):
...     return np.percentile(intensity[regionmask], q=(25, 50, 75))
>>>
>>> image = data.coins()
>>> label_image = measure.label(image > 110, connectivity=image.ndim)
>>> props = measure.regionprops_table(label_image, intensity_image=image,
...                                   properties=('label',),
...                                   extra_properties=(quartiles,))
>>> import pandas as pd 
>>> pd.DataFrame(props).head() 
       label  quartiles-0  quartiles-1  quartiles-2
0      1       117.00        123.0        130.0
1      2       111.25        112.0        114.0
2      3       111.00        111.0        111.0
3      4       111.00        111.5        112.5
4      5       112.50        113.0        114.0

相關用法


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