在skimage中为regionprops添加额外的属性

问题描述

我正在使用regionprops e(或scikit-imag)包中的skimage函数,使用同一包中的SLIC超像素算法来计算分割图像的区域特征。 / p>

除了功能中所计算的功能外,我还需要其他功能,主要是:标准差,偏度,峰度。

我使用其他功能作为模板修改_regionprops.py的源代码,以包括这些属性

    @property
    def sd_intensity(self):
        return np.std(self.intensity_image[self.image])

    @property
    def skew_intensity(self):
        return skew(self.intensity_image[self.image])

我知道这是不好的做法,不是长期的解决方案,因为我的代码无法在另一台计算机上运行,​​或者如果我更新skimage,则无法运行。

我发现函数skimage.measure.regionprops()一个extra_properties=None参数,根据文档:

添加skimage不包含的额外属性计算功能

我的问题是:我可以使用np.std获得一个有效的示例吗?我真的不知道如何使用此参数。

谢谢

解决方法

extra_properties仅使用带有区域蒙版和强度图像的函数列表作为参数。这是一个简单的示例:

from skimage import data,util
from skimage.measure import label,regionprops
import numpy as np
img = util.img_as_ubyte(data.coins()) > 110
label_img = label(img,connectivity=img.ndim)

def sd_intensity(regionmask,intensity_image):
        return np.std(intensity_image)

def skew_intensity(regionmask,intensity_image):
        return skew(intensity_image)
    
props = regionprops(label_img,intensity_image=img,extra_properties=(sd_intensity,skew_intensity))

您现在可以使用函数名称访问其他属性

props[0].sd_intensity
>>> 0.4847985617008998
,

我在skimage的dev分支的文档中找到了一个引用。它包含在0.18.dev0版本中

代码源:https://github.com/scikit-image/scikit-image/blob/master/skimage/measure/_regionprops.py#L1028

文档链接:https://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.regionprops

# Add custom measurements by passing functions as ``extra_properties``
from skimage import data,regionprops
import numpy as np

img = util.img_as_ubyte(data.coins()) > 110
label_img = label(img,connectivity=img.ndim)

def pixelcount(regionmask):
    return np.sum(regionmask)

props = regionprops(label_img,extra_properties=(pixelcount,))
props[0].pixelcount
    7741
props[1]['pixelcount']
    42