Отказ от ответственности: я совсем не разбираюсь в библиотеке изображений scikit, но я решил аналогичные проблемы с помощью MATLAB, поэтому я искал эквивалентные методы в scikit и надеюсь, что мои выводы, приведенные ниже, помогут ты.
Сначала вы можете использовать skimage.measure.label, который возвращает label_image
, то есть изображение, в котором все соединенные области помечены одним и тем же номером. Я считаю, что вы должны вызывать эту функцию с background=255
, потому что из вашего описания кажется, что фон в ваших изображениях - это область while (отсюда значение 255).
По сути, это изображение, где background
пикселям присваивается значение 0
, а пикселям, составляющим каждое (соединенное) пятно, присваивается значение целочисленной метки, поэтому все пиксели одного пятна будут помечены значением 1
, пиксели другого пятна будут помечены значением 2
и так далее. Ниже я буду называть «пятна» и «отмеченные регионы» как синонимы.
Затем вы можете вызвать skimage.measure.regionprops, который принимает в качестве входных данных label_image
, полученный на предыдущем шаге. Эта функция возвращает список из RegionProperties
(по одному для каждой помеченной области), который представляет собой сводку свойств помеченной области.
В зависимости от вашего определения
Цель состоит в том, чтобы найти все черные точки рядом друг с другом.
Существуют различные поля RegionProperties
, которые можно использовать для решения вашей проблемы:
bbox
дает вам набор координат ограничивающей рамки, которая содержит эту помеченную область,
centroid
дает вам координаты пикселя центроида этой помеченной области,
local_centroid
показывает центроид относительно ограничивающей рамки bbox
(Обратите внимание, что есть также свойства area
и bbox_area
, которые вы можете использовать, чтобы решить, выбрасывать ли очень маленькие пятна, которые могут вас не интересовать, тем самым сокращая время вычислений, когда дело доходит до сравнения близости каждой пары пятен)
Если вы ищете грубое сравнение, тогда может быть достаточно сравнения centroid
или local_centroid
между каждой парой помеченных регионов.
В противном случае вы можете использовать bbox
координаты для измерения точного расстояния между внешними границами любых двух регионов.
Если вы хотите основывать решение на точном расстоянии между пикселями каждой пары регионов, которые находятся ближе всего друг к другу, вам, вероятно, придется использовать свойство coords
.
person
etsetnj
schedule
10.08.2016