Итак, сегодня я наткнулся на этот очень классный алгоритм, используемый в OpenCV: Алгоритм водораздела.

Прежде всего, я хотел бы объяснить, что такое алгоритм водораздела и для чего он используется. Итак, в географии водораздел — это участок суши, по которому осадки и таяние снега направляются в ручьи, ручьи и реки и, в конечном итоге, в точки оттока, такие как водохранилища, заливы и океаны. Отсюда и название алгоритма.

Затем эти водоразделы можно сегментировать в виде топографических карт с границами.

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

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

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

Здесь, как видите, Алгоритм водораздела определяет идеальный передний план (монеты) и фон (чистый белый).

Проблема с алгоритмом водораздела заключается в том, что нет прямого метода или функции, которая это сделает. Чтобы алгоритм водораздела сделал это, его необходимо размыть, изменить на оттенки серого, удалить из него шум (если изображение зашумлено), применить преобразование расстояния, а затем применить алгоритм водораздела.

И часто людям становится скучно, выполняя всю эту процедуру. Даже при чтении всей этой процедуры (если кто-то читает LOL). И для этого есть еще один метод, поэтому вы прошли через множество этих строк, то есть Пользовательские семена с алгоритмом водораздела.

Итак, этот метод автоматически разбивает одно изображение на непересекающиеся области, согласованные по текстуре и цвету. Используется предположение, что каждая текстурированная или окрашенная область может быть представлена ​​небольшим шаблоном, называемым затравкой.

Как вы можете видеть на изображении, показанном выше, на левом изображении есть крошечные точки разных цветов, которые являются семенами. Синий цвет представляет небо, зеленый — горы сзади, розовый — дорогу, а фиолетовый — гору впереди и поля вдоль дороги.

Я хотел бы показать вам еще несколько результатов на разных изображениях:

Таким образом, алгоритм водораздела в основном используется для сегментации изображения, который используется для определения границ и объектов (линий, кривых и т. д.) на изображении. И лучший способ использовать этот алгоритм — использовать пользовательские семена.