问题描述
我正在使用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
参数,根据文档:
我的问题是:我可以使用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