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

Ben*_*red 4 python numpy computer-vision scikit-image superpixels

我使用的regionprops从函数scikit-imagE(或skimage)包使用从同一个包SLIC超像素算法分割图像的计算区域的特性。

我需要比函数中计算的那些额外的特征,主要是:标准偏差、偏度、峰度。

我修改了_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])
Run Code Online (Sandbox Code Playgroud)

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

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

添加不包含在 skimage 中的额外属性计算函数。

我的问题是:我可以用 np.std 得到一个工作示例吗?我真的不知道如何使用这个参数。

谢谢

fil*_*ppo 6

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[regionmask])

def skew_intensity(regionmask, intensity_image):
        return skew(intensity_image[regionmask])
    
props = regionprops(label_img, intensity_image=img,
                    extra_properties=(sd_intensity, skew_intensity))
Run Code Online (Sandbox Code Playgroud)

您现在可以使用您的函数名称访问您的额外属性

props[0].sd_intensity
>>> 0.4847985617008998
Run Code Online (Sandbox Code Playgroud)

编辑 2021 年 8 月 28 日,更新了示例以实际计算 @CrisLuengo 和 @JDWarner 指出的区域本地统计数据(谢谢大家)