У меня фоновое изображение ровной поверхности.
Мои цели - отслеживать объекты, которые расположены / перемещены по поверхности.
Я использую MOG2 для поиска объектов переднего плана со скоростью обучения 0, поэтому фон не обновляется (в противном случае статический объект будет включен в фон).
Результат хороший, но у меня огромная проблема со светом: если освещение меняется после получения фона, различные артефакты обнаруживаются как объекты переднего плана.
Как я могу улучшить устойчивость к освещению?
Обновление
Я экспериментирую с решением, которое работает достаточно хорошо, но требует некоторых исправлений.
Я использую MOG2 следующим образом:
- Получение и изучение фона с использованием первых кадров (BGK)
- Применить MOG2 к текущему кадру со скоростью обучения 0 (без обновления) и получить маску переднего плана (FG_MASK)
- Для следующих кадров я использую FG_MASK для маскировки BGK и использую результат, чтобы примениться к MOG2 с некоторой скоростью обучения (это обновляет фон).
- После этого я обновляю BGK, взяв его из алгоритма MOG2.
Таким образом, объекты маскируются вне фона, а фон все еще обновляется. Это может гарантировать хорошую устойчивость к легким изменениям.
Есть некоторый недостаток, например, когда свет меняется, маска объекта («шарик маски») сохраняется с предыдущей яркостью, и, если разница слишком велика, ее можно обнаружить как новый объект.
На изображении выше вы можете видеть, что текущий кадр является более ярким, а маска для статического объекта темнее.
Моя идея состоит в том, чтобы попытаться адаптировать «маску капли», изменяя ее яркость после смены света. Как я могу получить это с OpenCV?
Исправление предыдущих недостатков
Используя функцию inpaint вместо того, чтобы просто замаскировать BGK (шаг 3), я могу синхронизировать «малярные объекты» с изменениями яркости фона.
Это исправление также имеет недостаток, оно не очень хорошо работает.
Обновление 2
Я думаю, что это интересная тема, поэтому я постоянно обновляю ее.
Функция inpaint очень медленная, поэтому я пытаюсь по-другому.
Использование цветового пространства Hsv позволяет управлять каналом яркости, я могу уменьшить влияние яркости следующим образом:
- получить канал V с функцией Split
- рассчитать среднее значение канала V
- применить усечение порога к каналу V, используя среднее значение
- Восстановление кадра с использованием нового V-канала