Фоновая субстракция с пользовательским вводом
Я ищу алгоритм или, что еще лучше, некоторую библиотеку, которая покрывает вычитание фона из одного статического изображения (фоновая модель недоступна). Что может быть возможно, хотя это какой-то пользовательский ввод, как, например, https://clippingmagic.com/ делает это. К сожалению, мой гугл-фу здесь плох, так как я не могу найти никаких статей по этой теме с моим ограниченным количеством ключевых слов.
1 ответ
Эта веб-страница действительно впечатляет. Если бы я попытался реализовать нечто подобное, я бы, вероятно, использовал бы кластеризацию k-средних с использованием цветового пространства CIELAB. Причина изменения цветового пространства заключается в том, что цвета могут быть представлены двумя точками, а не 3, как обычное изображение RGB. Это должно ускорить кластеризацию. Кроме того, для этой цели было создано цветовое пространство CIELAB, позволяющее находить "расстояния" (сходства) между цветами и учитывать то, как люди воспринимают цвет. Не просто смотреть на необработанные двоичные данные, которые есть у компьютера.
Но краткий обзор kmeans. Для этого примера мы скажем k=2 (имеется в виду только два кластера)
- Инициализируйте каждый кластер со средним значением.
- Просмотрите каждый пиксель вашего изображения и решите, к какому значению он ближе, кластер 1 или 2?
- Вычислите новое среднее значение для ваших кластеров после того, как вы обработали все пиксели
- используя недавно вычисленные средние, повторяйте шаги 2-4 до сходимости (то есть средства не сильно меняются)
Теперь это будет хорошо работать, когда изображение на переднем плане заметно отличается от фона. Скажем, красный шар на синем фоне, но если цвета похожи, это будет более проблематично. Я все еще придерживаюсь kmeans, но имею большее количество кластеров. Таким образом, на этой веб-странице вы можете сделать несколько красных или зеленых выборов. Я бы сделал каждый из этих штрихов кластером и инициализировал свой кластер до среднего. Скажем, я нарисовал 3 красных штриха и 2 зеленых. Это означает, что у меня будет 5 групп. Но как-то внутренне я добавляю дополнительный атрибут в качестве переднего плана / фона. Так что у каждого кластера будет небольшая дисперсия, но в конце я бы отобразил только этот атрибут, передний план или фон. Я надеюсь, что это имело смысл.
Может быть, теперь у вас есть несколько поисковых терминов для начала. Может быть много других методов, но это первое, о чем я подумал, удачи.
РЕДАКТИРОВАТЬ
Поиграв с сайтом немного больше, я вижу, что он использует пространственную близость к кластеру. Скажем, у меня было 2 одинаковых красных пятна на противоположных сторонах изображения. Если я только аннотирую левую сторону изображения, то капля справа не может быть обнаружена. Kmeans не будет повторять это поведение, так как описанный мной метод использует только цвет для кластеризации пикселей, совершенно не обращая внимания на их расположение на изображении.
Я не знаю, какие инструменты есть в вашем распоряжении, но вот хороший пример / учебник по Matlab по цветным kmeans