#python #matplotlib #scipy #scikit-image #ndimage
#python #matplotlib #сципи #scikit-изображение #изображение
Вопрос:
Выше приведено изображение, которое было введено ndi.label()
и отображено с помощью matplotlib, где каждая цветная область представляет отдельный объект. Поверх изображения нанесены красные точки, каждая из которых представляет пару координат. Все координаты сохраняются, и ndi.label возвращает количество объектов. Есть ли у skimage, scipy или ndimage функция, которая проверяет, находится ли данный набор координат внутри помеченного объекта?
Первоначально я намеревался использовать поле привязки (слева, справа, сверху, снизу) каждого объекта, но из-за того, что не все области являются четырехугольными, это не сработает.
код для создания изображения:
image = io.import("image path")
labelledImage, featureNumber = ndi.label(image)
plt.imshow(labelledImage)
for i in range(len(list))
y, x = list[i]
plt.scatter(y,x, c='r', s=40)
Комментарии:
1. Как хранятся координаты? Является ли помеченное изображение массивом numpy? Можете ли вы показать код, который его генерирует?
2. @user13044086 Изображение представляет собой числовой массив, это значение по умолчанию через skimage. Координаты хранятся в расположении списка таким образом, что: для i пар координат: x, y = list[i]
3. Можете ли вы просто проверить, что все элементы labelledImage одинаковы для заданных координат? Вот так:
[labelledImage[y, x] for x, y in list]
а затем проверьте, совпадают ли элементы ell
Ответ №1:
Вы можете использовать ndi.map_coordinates
, чтобы найти значение в определенной координате (или группе координат) на изображении:
labels_at_coords = ndi.map_coordinates(
labelledImage, np.transpose(list), order=0
)
Примечания:
- массив координат должен иметь форму
(ndim, npoints)
, а не иногда более интуитивную(npoints, ndim)
, отсюда и транспонирование. - в идеале было бы лучше переименовать ваш список точек на что-то вроде
points_list
, чтобы вы не перезаписывали встроенную функцию Pythonlist
.