Данный проект является реализацией алгоритма для автоматической калибровки камеры, разработанного в рамках магистерской выпускной квалификационной работы по образовательной программе "Технологии разработки компьютерных игр" в университете ИТМО. Текст ВКР находится в файле docs/ВКР.pdf
.
Алгоритм использует изображение с экрана для симуляции перемещения калибровочного шаблона в пространстве. Камера располагается перед экраном и автоматически делает снимки.
Алгоритм позволяет вычислить внутренние параметры камеры, а также nodal offset.
Для запуска проекта требуются следующие зависимости:
Для калибровки nodal offset также необходимо выполнить следующие шаги:
- Откалибровать очки VR с помощью SteamVR
- Расположить один трекер на камере и другой на верху монитора
- Получить координаты трекеров (например, с помощью pyopenxr)
- Записать полученные координаты в файл
tracker_positions.txt
в форматеx y z
:- Координаты камеры на первой строке
- Координаты монитора на второй строке
Координаты трекеров используются для определения позиции плоскости изображения относительно виртуальной камеры.
Перед запуском программы требуется расположить камеру таким образом, чтобы выполнялись следующие условия:
- Изображение камеры должно быть полностью покрыто изображением экрана
- Оптическая ось должна проходить через центр экрана
- Монитор не должен быть изогнутым
Для запуска программы необходимо запустить файл calibrator.py
.
Программа принимает следующие параметры командной строки:
-n
/--num_captures
- количество снимков для калибровки (обязательный параметр)-d
/--distance
- расстояние от камеры до экрана в миллиметрах. Необходимо для корректной калибровки nodal offset. (обязательный параметр)--mode
- режим калибровки. Принимает следующие значения:full
- калибровка внутренних параметров и затем nodal offset (по умолчанию)intrinsic
- калибровка только внутренних параметровextrinsic
- калибровка только nodal offset
--monitor
- ID монитора для вывода калибровочного изображения. По умолчанию0
.
В результате своей работы программа создаёт следующие файлы в папке output
:
camera_matrix.txt
- матрица камерыoptimal_camera_matrix.txt
- оптимальная матрица камеры для исправления дисторсииdistortion.txt
- коэффициенты дисторсииerrors.txt
- ошибки репроекции для каждого снимкаmean_error.txt
- средняя ошибка репроекцииrmse.txt
- среднеквадратическая ошибка репроекции
nodal_offset_translation.txt
- вектор смещенияnodal_offset_rotation.txt
- матрица поворотаnodal_offset_errors.txt
- средняя ошибка репроекцииnodal_offset_rmse.txt
- среднеквадратическая ошибка репроекции