Манипулирование результатами 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 на любой индекс, который вам нужно изменить.