Дорисовка 3D-модели в кадр Гумин Егор Щербаков Александр Задача Реалистично дорисовать в кадр объект Реализации Дорисовка куба по маркеру в видео (OpenCV) Дорисовка модели чайника на фото с коробкой (OpenCV, OpenGL, PyGame) Дорисовка модели на коробку в видео (OpenCV, OpenGL) Технологии Python OpenCV PyOpenGL PyGame Реализация 1: видео и маркер • Калибруем камеру по заранее сделанным фотографиям с шахматной доской (метод Zhengyou Zhang), получаем матрицу внутренних параметров камеры и значение дисторсии • Выполняем поиск черного квадрата в каждом кадре видеопотока • Если квадрат найден, получаем координаты его углов (в коорд. экрана) • Сопоставляем каждому из углов на кадре его позицию в виртуальных трехмерных координатах, получаем вектор поворота и сдвига виртуальной камеры • Назначаем точки куба в виртуальном пространстве и проецируем на экран, используя параметры виртуальной камеры Реализация 1: видео и маркер Реализация 1: видео и маркер • Калибруем камеру по заранее сделанным фотографиям с шахматной доской (метод Zhengyou Zhang), получаем матрицу внутренних параметров камеры и значение дисторсии • Выполняем поиск черного квадрата в каждом кадре видеопотока • Если маркер найден, получаем координаты его углов (в коорд. экрана) • Сопоставляем каждому из углов на кадре его позицию в виртуальных трехмерных координатах, получаем вектор поворота и сдвига виртуальной камеры • Назначаем точки куба в виртуальном пространстве и проецируем на экран, используя параметры виртуальной камеры Реализация 1: скриншоты Реализация 2: фото и OpenGL • Калибруем камеру, получаем матрицу внутренних параметров • Делаем фото поверхности с разных ракурсов, включая вид сверху • С помощью SIFT ищем ключевые точки поверхности на двух фото (вид сверху, и фото, куда хотим дорисовать модель) • Находим матрицу гомографии между этими группами точек • Зная, что на первом фото камера сверху, получаем векторы сдвига и поворота камеры для второго фото, преобразуем их в матрицу внешних параметров Реализация 2: фото и OpenGL Реализация 2: фото и OpenGL • Калибруем камеру, получаем матрицу внутренних параметров • Делаем фото поверхности с разных ракурсов, включая вид сверху • С помощью SIFT ищем ключевые точки поверхности на двух фото (вид сверху, и фото, куда хотим дорисовать модель) • Находим матрицу гомографии между этими группами точек • Зная, что на первом фото камера сверху, получаем векторы сдвига и поворота камеры для второго фото, преобразуем их в матрицу внешних параметров Реализация 2: фото и OpenGL • Отрисовываем фон (конвертируем фото в текстуру и натягиваем на полигон, расположенный перед камерой) • Зададим ModelView-матрицу OpenGL, на основе внешних параметров камеры • Зададим Projection-матрицу на основе внутренних параметров • Отрисуем объект на фото средствами OpenGL Реализация 2: скриншот Реализация 3: видео и OpenGL Реализация 3: видео и OpenGL