当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。