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

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

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

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

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

1 ответ

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

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

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

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

Другие вопросы по тегам