alekseev_ap
@alekseev_ap
Свободный разработчик

Как автоматически выделить объект на изображении?

Есть видео, преобразованное в последовательность кадров. На одних кадрах имеется только фоновая картинка, на других с объектами. И то и другое выбирает пользователь. Какие существуют алгоритмы для качественного автоматического выделения объектов с учётом того, что съёмка происходит не в фото студии, а в реальных городских условиях? Я имею в виду, что шевелёнка листвы и небольшое изменение освещённости вследствие переменной облачности - естественные атрибуты такой съёмки. То есть, хотелось бы чтобы выделение объектов осуществлялось программно.
Вот что у меня получилось с использованием разницы между кадрами:
7.jpg
Но результатом не доволен по причине многочисленных артефактов.
  • Вопрос задан
  • 2120 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Quiensabe
VR-разработчик
Самое простое в данном случае - использовать ту же разность, но не для изображения в целом, а для отдельных каналов. В том числе насыщенности и оттенка.

Найдя маску для каждой пары каналов - их можно объединить и получить более точную маску.

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

Если хочется пойти дальше - нужно разбить изображения по уровням детализации (посмотрите вейвлет обработку фото). Находя маски по каждому уровню отдельно, и комбинируя их - вероятно существенно улучшите результат.
Ответ написан
Комментировать
@SeptiM
В общем случае могу посоветовать такой метод: opencv-python-tutroals.readthedocs.org/en/latest/p...

Хотя на самом деле на разнице уже много чего интересного можно сделать. Можно понизить порог, и удалить все маленькие компоненты связности. Это можно сделать через морфологические преобразования или просто BFS запустить в каждой компоненте.
Ответ написан
Комментировать
@polar_winter
Попробуйте Matlab (Image processing toolbox).
Ответ написан
Комментировать
Если в вашей маске убрать пятна малого размера, а пятна внутри объекта-машины залить цветом маски для получения однородного цвета, то должно получиться что-то типа этого:
27d1c0a8373745228c979fe2a8466b3d.png2c1a4ad560744e399e64cecbc8ff6f81.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы