Отказ от ответственности: Я не специалист с библиотекой изображений 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
свойства.
Спасибо за ваш ответ. Собственность коордов точно соответствует мне. Теперь мне просто нужно получить вертикальное/горизонтальное расстояние между каждым пикселем. Но я думаю, что это не проблема. – Kuchen