2013-10-15 2 views
6

Я пытаюсь разделить связанные объекты. Кажется, что Python и алгоритм водораздела (scipy-реализация) хорошо подходят для решения этой проблемы.Сегментация изображений связанных объектов с водоразделом

Вот мое изображение и автоматически сгенерированный водораздел точка семенной (локальные максимумы порогов и расстояние трансформированных изображений):

seeds = myGenSeeds(image_grey) 

enter image description here

До сих пор, так хорошо; есть семя для каждого объекта.

вещи ломаются, когда я бегу водораздел хотя:

segmented = ndimage.measurements.watershed_ift(255 - image_grey, seeds)` 

enter image description here

Оба топ-среднего кластера и центр кластера слабо разделены. В верхнем кластере один объект заливается вокруг двух других. В центральном кластере, хотя это может быть слишком мало, чтобы увидеть здесь, центральное семя залилось всего несколькими пикселями.

У меня есть два вопроса:

  1. ли алгоритм водораздела хороший выбор для разделения объектов, как это?
  2. Если да, есть ли какая-то предварительная обработка, которая у меня есть, чтобы сделать изображение более подходящим для сегментации водоразделов?

ответ

0

Алгоритм водораздела - простой и надежный алгоритм сегментации. Ваши данные, похоже, подходят для такого алгоритма сегментации. Насколько мне известно, специальная предварительная обработка не нужна. Конечно, вы уже сами видели, что в некоторых случаях это немного на грани.

Watershed часто используется, но не требует особых знаний об объектах, которые вы хотите идентифицировать. Таким образом, могут быть доступны более сложные алгоритмы.

Также могут быть более сложные версии алгоритма водораздела. Этот модуль Python с именем Watershed 2.0 имеет параметры (в отличие от версии scipy). Я бы немного изменил параметры и посмотрел, можно ли улучшить результат.

Ilastik - инструмент, часто используемый для автоматической сегментации. Он включает в себя полуавтоматическое обучение (в основном вы даете ему обучение, приводя примеры и из этого он изучает важные функции).

0

Следует применять метод многоуровневого порогового значения после этапа преобразования расстояния. Центр ваших объектов будет иметь самое высокое значение пикселя в полученном изображении уровня серого после преобразования изображения преобразования расстояния в изображение уровня серого. Здесь вы можете найти центры объектов, начиная с самого высокого значения порога. Посмотрите эту статью https://www.researchgate.net/publication/303703322_A_Multi-level_Thresholding_Based_Segmentation_Method_for_Microscopic_Fluorescence_In_Situ_Hybridization_FISH_Images

1

Я нашел эту тему, потому что у меня такая же проблема с watershed_ift. Я рекомендую использовать функцию watershed в skimage.morphology. Он принимает поплавковые входы, поэтому вы не теряете разрешение на изображении в оттенках серого, и это фактически наводняет весь бассейн, тогда как подход ift, похоже, наводняет изовалы, где лежат маркеры.

EDIT: Обязательно умножить ваше расстояние преобразования на -1, так что пики становятся долинами, иначе вы не получите никаких водоразделов!

 Смежные вопросы

  • Нет связанных вопросов^_^