Быстрое обнаружение контуров в 4К видео: цвет и сложные формы +2


В предыдущей части «Тренировочные наборы из видео — быстро и качественно» речь шла о сложности применения нейронных сетей для любой задачи, связанной с редкими, необычными или попросту сложными объектами. Обязательно посмотрите примеры, они того стоят.


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

В чем сложность?


Как было показано в предыдущей части, детальная ручная разметка наборов является очень трудоемким процессом и, откровенно говоря, вообще не вариант для любого здравомыслящего человека. Автоматическая разметка, особенно если речь идет о контурах, выглядит куда интереснее, но как получить интересующий контур быстро и точно?

Функция принадлежности


Начать, пожалуй, стоит с функции принадлежности. Предположим, интересующий нас объект характеризуется ярким цветом, который, к тому же, является уникальным для объекта в контексте конкретной сцены:


Учитывая специфику подхода (а именно необходимость в таких сценах, которые легко «разобрать») сформулировать правило отбора примеров для получения тренировочного набора достаточно легко: очень полезными будут такие сцены, для которых правило уникальности цвета искомого объекта будет выполнятся (помним, со всеми сложными случаями иметь дело буде уже нейросеть, успешно обученная с помощью сгенерированного набора).

Собственно, условие уникальности является необходимым минимумом, поскольку с цветом тоже можно и нужно работать:


Цветовое расстояние


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



В существующем решении используется несколько реализаций Delta E, как наиболее точного стандарта. Например, CIE94 в цветовом пространстве LCH (L*C*h):



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



Кит на фото все еще различим для глаза (с трудом, конечно), но контур построен уже неверно. Пример целиком:


Восстанавливаем контур


Предположим, с цветом все отлично, как получить искомый контур? Задача не является простой, поскольку результат, скорее всего, будет достаточно сложным, с полостями, второстепенными элементами и т.д. Какой из вариантов восстановленного контура для отдельно взятого объекта является правильным?


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


Алгоритм для получения такого результата выглядит следующим образом:



  1. исходное изображение
  2. выбор шага сканирования (критично с точки зрения производительности)
  3. горизонтальное сканирование
  4. вертикальное сканирование и анализ пересечений для поиска обособленных «объектов»
  5. построение массива мета-пикселей (для идентификации как формы так и внутренних особенностей объекта) и пост-обработка (фильтрация, сглаживание и т.д.)
  6. «векторизация» восстановленной формы объекта

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



Точность восстанавливаемого контура легко оценить используя следующий пример:



Финальный тест


Больше объектов, больше контуров, лучше точность, волосы и в 4К — уж если проверять свою реализацию, так с песнями и танцами.


До следующего раза и других, не менее интересных, деталей.

Другие результаты





Следить за развитием проекта


   YouTube: RobotsCanSee
   Telegram: RobotsCanSeeUs




К сожалению, не доступен сервер mySQL