Манипулирование результатами scikit-image regionprops

Я совершенно новичок в Python и немного борюсь с обработкой данных. До сих пор я использовал Matlab для большей части моего анализа данных.

Я анализирую изображение с помощью Skimage.measure.regionprops, который выводит список свойств. Теперь я обрабатываю изображение в субрегионах и хочу изменить элементы в этом списке.

В частности, я разрезал одну область на две, работая над подизображением. Теперь я хочу включить мои обновленные регионы в список. Так как я работаю в субрегионе, свойство centroid не дает мне координаты на полном изображении. Итак, я хотел бы добавить значения смещения, чтобы исправить это.

Но я не могу редактировать список вывода regionprops. Сначала я попытался отредактировать свойство centroid, но это кортеж, и они, по-видимому, неизменяемы. Затем я попытался удалить поле центроида и заменить его новыми значениями, но, очевидно, я также не могу изменить список свойств вообще.

Есть ли способ манипулировать списком результатов regionprops?

Я работаю над обходным путем, но мне было интересно, если это вообще возможно...

1 ответ

from skimage.measure import regionprops
import numpy as np

arr = np.zeros((10, 10))

arr[[1, 4, 9], [1, 4, 9]] = 1
arr[[4, 7, 8], [2, 4, 6]] = 2

Это создает массив, который выглядит следующим образом:

array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  2.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  2.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  2.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.]])


list_from_regprops = regionprops(arr.astype(int))

Это генерирует ваш список регионов, и вы можете получить доступ, проиндексировав список и извлекая значение, которое вы хотите изменить, а затем просто перезаписать, используя тот же механизм

#list_from_regprops = [r1, r2, r3]


old_centroid_x, old_centroid_y = list_from_regprops[0].centroid
new_centroid_x, new_centroid_y = old_centroid_x + 4, old_centroid_y - 4#for example
list_from_regprops[0].centroid = new_centroid_x, new_centroid_y

Это должно делать то, что вам нужно, просто замените 0 на любой индекс, который вам нужно изменить.

Другие вопросы по тегам