Как добиться чрезмерной сегментации с помощью Watershed Transform из OpenCV?

Я пытаюсь пересегментировать изображение, используя реализацию водораздела OpenCV на основе маркеров в Java.

Моя идея состояла в том, чтобы найти все локальные минимумы и использовать их в качестве маркеров. К сожалению, для водораздела требуется матрица типа CV_8U в качестве входных данных маркера, и поэтому я не могу получить более 255 маркеров.

У кого-нибудь есть обходной путь для этой проблемы или другое решение для достижения чрезмерной сегментации с использованием OpenCV?

Исходное изображение слева, маркеры посередине (около 740), результирующая сегментация справа (всего 255 областей)


person NoonR    schedule 07.01.2017    source источник


Ответы (1)


Стохастический водораздел может помочь вам в решении этой задачи. Принцип заключается в применении нескольких водоразделов.

В вашем случае вы можете сделать:

  1. Найдите все локальные минимумы
  2. Выберите N локальных минимумов
  3. Применение водораздела
  4. Сохраните результаты/границы в аккумуляторе
  5. Повторите шаги 2, 3 и 4 M раз
  6. Оставьте в накопителе границы, набравшие не менее X% M голосов.

Другим решением может быть использование библиотеки SMIL. Вы можете вызвать его из Java, и вы уверены, что реализованный алгоритм быстрый и непредвзятый.

person FiReTiTi    schedule 08.01.2017