Скажем у вас есть изображение в виде numpy.array
:Scikit изображение: правильный способ подсчета клеток в объектах изображения
vals=numpy.array([[3,24,25,6,2],[8,7,6,3,2],[1,4,23,23,1],[45,4,6,7,8],[17,11,2,86,84]])
И вы хотите, чтобы вычислить, сколько ячеек внутри каждого объекта, учитывая пороговое значение (пример):
from scipy import ndimage
from skimage.measure import regionprops
blobs = numpy.where(vals>17, 1, 0)
labels, no_objects = ndimage.label(blobs)
props = regionprops(blobs)
Если вы проверяете, это дает изображение с 4-х различных объектов на пороге:
In[1]: blobs
Out[1]:
array([[0, 1, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 1, 1, 0],
[1, 0, 0, 0, 0],
[0, 0, 0, 1, 1]])
В самом деле:
In[2]: no_objects
Out[2]: 4
Я хочу, чтобы вычислить число клеток (или области) каждого объекта. Ожидаемый результат представляет собой словарь с форматом object ID: number of cells
:
size={0:2,1:2,2:1,3:2}
Моя попытка:
size={}
for label in props:
size[label]=props[label].area
Возвращает ошибку:
Traceback (most recent call last):
File "<ipython-input-76-e7744547aa17>", line 3, in <module>
size[label]=props[label].area
TypeError: list indices must be integers, not _RegionProperties
Я понимаю, я использую label
неправильно, но цель это перебирать объекты. Как это сделать?
Мне нравится этот, спасибо. Мое решение предназначалось только для решения этой проблемы, но мы знаем, насколько часто это ключ. – FaCoffee