Я использую функцию regionprops из пакета scikit-imag e (или 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])

Я знаю, что это плохая практика и не долгосрочное решение, потому что мой код не сможет работать на другой машине или если я обновлю skimage.

Я обнаружил, что функция skimage.measure.regionprops() имеет параметр extra_properties=None, который согласно документу:

Добавьте дополнительные функции вычисления свойств, которые не включены в skimage.

У меня вопрос: могу ли я получить рабочий пример с np.std? Я действительно не знаю, как использовать этот параметр.

Благодарность

3
Benson_YoureFired 19 Авг 2020 в 10:23

2 ответа

Лучший ответ

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
2
filippo 19 Авг 2020 в 09:36

Я нашел ссылку в документации ветки разработчиков skimage. Он включен в версию 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, 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 pixelcount(regionmask):
    return np.sum(regionmask)

props = regionprops(label_img, extra_properties=(pixelcount,))
props[0].pixelcount
    7741
props[1]['pixelcount']
    42
1
Benson_YoureFired 19 Авг 2020 в 08:54