- •Аннотация
- •Содержание
- •Введение
- •1. Анализ предметной области
- •1.1 Принципы построения систем трехмерного позиционирования на базе двух камер
- •1.2 Обнаружение движущихся объектов
- •1.3 Алгоритмы вычитания фона в OpenCv
- •1.4 Геометрическая модель простой триангуляции в стереосистеме
- •1.5 Особенности получения и синхронизации видеопотоков в ip-сетях
- •1.6 Требования к системе
- •Выводы по первому разделу
- •2. Выбор средств разработки
- •2.1 Выбор языка программирования для серверной части
- •2.2 Библиотеки компьютерного зрения
- •2.3 Протоколы обмена: WebSocket и json
- •Выводы по второму разделу
- •3. Моделирование системы
- •3.1 Архитектура системы
- •3.2 Среда виртуализации стереопары
- •3.3 Модель вычитания фона для стереопары
- •3.4 Архитектура двухканального вычитания фона
- •3.8 Вычисление центра ограничивающего квадрата
- •3.9 Адаптивное управление параметрами
- •3.10 Математическая модель простой триангуляции
- •3.11 Математическая модель простой триангуляции
- •3.12 Модель данных
- •Выводы по третьему разделу
- •4. Разработка приложения
- •4.1 Структура проекта
- •4.2 Реализация модуля захвата видеопотоков
- •4.3 Реализация вычитания фона и детекции объекта
- •4.4 Реализация триангуляции
- •4.5 Реализация клиента визуализации
- •4.6 Тестирование
- •Выводы по четвёртому разделу
- •Заключение
- •Список использованных источников
1.3 Алгоритмы вычитания фона в OpenCv
Библиотека компьютерного зрения OpenCV предоставляет несколько реализаций вычитания фона. Для данной работы наиболее актуальны два алгоритма: MOG2 (Mixture of Gaussians, версия 2) и KNN (K-Nearest Neighbors) [4].
Алгоритм MOG2 был предложен Зивковичем и ван дер Хейденом и развивает классический метод смеси гауссиан [1]. Для каждого пикселя строится модель, состоящая из K гауссовых распределений (обычно K = 3…5), каждое из которых характеризуется весом w_i, средним значением μ_i и дисперсией σ_i². Вероятность наблюдения значения пикселя x вычисляется как взвешенная сумма гауссиан:
P(x) = Σᵢ w_i · η(x | μ_i, σ_i) (1.1)
где η — функция плотности нормального распределения.
При поступлении нового кадра значение пикселя сравнивается с существующими гауссианами. Если значение попадает в интервал |x - μ_i| < 2.5σ_i, соответствующая гауссиана обновляется: её вес увеличивается, среднее и дисперсия сдвигаются в сторону нового значения по правилу скользящего среднего. Если совпадений нет, гауссиана с наименьшим весом заменяется новой со средним, равным текущему значению, высокой дисперсией и малым весом.
Гауссианы сортируются по отношению w_i/σ_i. Считается, что первые B гауссиан, сумма весов которых превышает порог T (обычно T = 0.7), описывают фон. Остальные гауссианы соответствуют переднему плану. Такой подход позволяет моделировать мультимодальные фоны — например, колышущиеся ветки деревьев или мерцающий монитор.
Дополнительным преимуществом MOG2 является встроенный механизм обнаружения теней. Тени классифицируются по признаку того, что они затемняют фон, но сохраняют его цветовую текстуру. Пиксель, идентифицированный как тень, не включается в маску переднего плана, что критически важно для задач стереозрения — тень в левой и правой камерах смещена по-разному, что может привести к ложной диспаратности [15].
Алгоритм KNN (K-Nearest Neighbors) использует иной подход. Для каждого пикселя сохраняется история его последних N значений (обычно N = 20…50) в цветовом пространстве. При классификации текущего значения подсчитывается, сколько исторических образцов находятся на расстоянии меньше порога d по метрике RGB или LAB. Если количество «близких» образцов превышает K (обычно K = 2…4), пиксель относится к фону, иначе — к переднему плану. KNN демонстрирует более высокую точность на сценах с быстрыми изменениями освещения, но требует больше памяти из-за хранения истории каждого пикселя.
Сравнение алгоритмов применительно к задаче стереопозиционирования представлено в таблице 1.1.
Таблица 1.1 - Сравнение алгоритмов применительно к задаче стереопозиционирования
Критерий |
MOG2 |
KNN |
Скорость обработки |
8-10мс |
12-15мс |
Потребление памяти |
низкое |
среднее |
Обнаружение теней |
Да (встроено) |
Нет (требуется постобработка) |
Устойчивость к быстрым изменениям освещения |
Средняя |
Высокая |
Сложность настройки |
Параметров больше |
Параметров меньше |
В контексте трёхмерного позиционирования на основе стереопары вычитание фона выполняется независимо для левого и правого каналов. Это порождает несколько важных особенностей.
Фоновые модели для левой и правой камер строятся отдельно, поскольку камеры имеют разный угол обзора. Даже при идентичных оптических характеристиках и геометрии ближнего расположения края сцены, видимые только одной камерой, создают асимметрию фона. Это штатная ситуация: алгоритм вычитания фона в каждой камере адаптируется к своей области обзора.
Для корректной триангуляции необходимо, чтобы маски переднего плана в левом и правом изображениях соответствовали одному и тому же физическому объекту. Это обеспечивается не только синхронизацией захвата кадров, но и тем, что объект должен находиться в области пересечения полей зрения обеих камер — так называемой стереозоне.
После получения бинарных масок переднего плана производится поиск контуров (cv2.findContours) и выделение наибольшего связного компонента. Центр масс этого компонента вычисляется как среднее арифметическое координат всех входящих в него пикселей:
u_center = (Σ u_i) / N, v_center = (Σ v_i) / N,
где N — количество пикселей в контуре. Такой подход устойчив к небольшим разрывам в маске, которые могут возникнуть из-за шумов или неидеального вычитания фона. Полученные координаты (u_L, v_L) и (u_R, v_R) затем используются в модуле триангуляции для вычисления трёхмерных координат объекта.
Вычитание фона имеет ограничения: метод не работает, если объект неподвижен относительно сцены (он «сливается» с фоном), а также чувствителен к резким скачкам освещения. Для преодоления этих ограничений в данной работе предусмотрено периодическое принудительное переобучение модели фона по команде оператора, а также адаптивная регулировка порога τ в зависимости от глобальной яркости сцены. Тем не менее, для задачи позиционирования движущегося объекта в контролируемых условиях (производственная линия, складской робот) вычитание фона остаётся оптимальным выбором.
