- •Аннотация
- •Содержание
- •Введение
- •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. Анализ предметной области
1.1 Принципы построения систем трехмерного позиционирования на базе двух камер
Системы трёхмерного позиционирования на основе стереоскопического зрения представляют собой инженерную реализацию принципа бинокулярного восприятия глубины, работающего за счет принципа диспаратности — различия в положении проекций одной и той же точки в разных проекциях. Техническая стереосистема воспроизводит этот механизм с помощью двух оптических датчиков (камер), разнесённых на известное расстояние — базис B (обычно 100–300 мм).
блок захвата изображений (две камеры с идентичными характеристиками фокусное расстояние, разрешение матрицы, частота кадров);
модуль калибровки (вычисление внутренних параметров камер — фокусное расстояние f, координаты главной точки (cx, cy), коэффициенты дисторсии k₁, k₂, p₁, p₂ по модели Брауна–Конради и внешних параметров — матриц поворота R и трансляции T между камерами);
алгоритм ректификации (эпипoлярное выравнивание — преобразование изображений так, чтобы соответствующие точки лежали на одной горизонтали);
модуль стереосопоставления (вычисление карты диспаратности — для каждого пикселя левого изображения определяется горизонтальное смещение d соответствующей точки на правом);
блок триангуляции (пересчет диспаратности d в глубину Z по формуле Z = f · B / d, где f — фокусное расстояние в пикселях, B — базис в мм);
система координат (переход от двумерных пиксельных координат (u, v, d) к трехмерным метрическим (X, Y, Z) в мировой системе отсчета).
Критически важен выбор алгоритма стереосопоставления. Классические подходы, основанные на оконной корреляции (Block Matching, BM) и полуглобальном стереосопоставлении (Semi-Global Matching, SGM). BM реализован в OpenCV функцией StereoBM — скорость обработки кадра 1920×1080 на Intel Core i7-10700 достигает 60 FPS при размере окна 5×5 [9]. SGM (функция StereoSGBM в OpenCV) обеспечивает более высокую точность за счет минимизации энергии вдоль множества направлений, но требует больше вычислительных ресурсов — типичная скорость 15–20 FPS при том же разрешении [2].
Синхронизация захвата кадров — ключевой вопрос для движущихся объектов. Десинхронизация даже на 10 мс при скорости объекта 1 м/с приводит к ошибке позиционирования 10 мм. Промышленные камеры поддерживают аппаратную синхронизацию через внешний триггер (Precision Time Protocol, IEEE 1588), но бюджетные IP-камеры требуют программной синхронизации на уровне сервера — буферизация кадров с меткой времени RTCP и выбор пар с минимальной временной разницей.
1.2 Обнаружение движущихся объектов
Вычитание фона представляет собой один из наиболее эффективных и вычислительно простых методов выделения движущихся объектов в видеопотоке. В отличие от нейросетевых детекторов (YOLO, SSD, Detectron2), требующих размеченных датасетов, дорогого обучения и значительных вычислительных ресурсов, методы вычитания фона работают в реальном времени на центральном процессоре и не нуждаются в априорной информации о типе объекта. Это делает их идеальным инструментом для задач, где форма, размер и цвет объекта заранее неизвестны, но известно, что объект движется относительно статической сцены.
Базовое предположение методов вычитания фона заключается в том, что фон сцены остаётся статичным или медленно меняется во времени, а движущийся объект представляет собой локальное отклонение от модели фона. Для каждого пикселя изображения с координатами (u, v) в момент времени t строится статистическая модель фона, после чего текущее значение пикселя I(u, v, t) сравнивается с этой моделью. Если разность превышает порог, пиксель классифицируется как принадлежащий переднему плану (объекту).
Ключевая сложность заключается в построении и постоянном обновлении модели фона. В реальных условиях фон не является идеально статичным: изменяется освещение, возникают тени от движущихся объектов, появляются и исчезают статические элементы (например, открывается дверь) [11]. Поэтому адаптивные методы вычитания фона используют механизмы постепенного обновления модели, чтобы учитывать медленные изменения сцены и одновременно быстро реагировать на появление движущихся объектов.
