Калибровка широкоугольных объективов с помощью Opencv

Я использую широкоугольный объектив (178º Diagonal FOV) и пытаюсь правильно откалибровать его с помощью модуля калибровки Opencv. Все процессы обнаружения и калибровки работают нормально, но результат очень плохой.

Я пробовал много разных конфигураций:

  • Различный набор изображений
  • Различные числа радиальных коэффициентов: 2,3,4,5 и 6.(CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6)
  • Фиксация главной точки и тангенциального искажения до 0 (CV_CALIB_FIX_ASPECT_RATIO, CV_CALIB_FIX_PRINCIPAL_POINT)
  • Использование ожидаемого фокусного расстояния в качестве исходной матрицы камеры. (CV_CALIB_USE_INTRINSIC_GUESS)

Лучшее, что я могу получить, это что-то вроде:Плохая калибровка

Любые идеи о том, как я могу получить хорошую калибровку? Как вы думаете, используя два калибровочных шаблона одновременно или круговую сетку, как калибровочный шаблон поможет?

Я видел в opencv 3.0 тонкие призматические коэффициенты. Я не пробовал, но не думаю, что это что-то изменит, верно? Редактировать: проверил это... ничего

6 ответов

Решение

Начиная с Opencv 2.4.10 и выше, существует специальная модель искажения для широкоугольных объективов / объективов "рыбий глаз", способных справиться с этим сильным радиальным искажением. Я проверил свои наборы данных, и результаты очень хорошие.

Линзы "рыбий глаз" имеют различное моделирование искажений. Для калибровки камеры "рыбий глаз" используйте модуль "рыбий глаз" opencv. Смотрите opnecv документы.

Вы уверены, что используете CV_CALIB_RATIONAL_MODEL флаг? Это скажет OpenCV использовать модель, которая поддерживает широкоугольные объективы.

Вот мои предложения для объектива 150 градусов. Вы также можете попробовать Апрель Кэл, с которым мне повезло.

Возможно, модель камеры / объектива OpenCV недостаточно точно описывает ваш ультра широкоугольный объектив. И поэтому, возможно, вам придется отказаться от встроенной процедуры калибровки OpenCV и написать собственную процедуру калибровки.

Например, поиск в Google дает мне:

Канатани К., "Калибровка сверхширокоугольных объективов типа" рыбий глаз "с помощью минимизации собственных значений", " Анализ паттернов и машинный интеллект", транзакции IEEE, том 35, № 4, с.813 822, апрель 2013 г.

Аннотация: Мы представляем новый метод калибровки сверхширокоугольных камер с "рыбьим глазом", накладывая ограничение на то, чтобы коллинеарные точки были выпрямлены как коллинеарные, параллельные линии были параллельными, а ортогональные линии были ортогональными. Используя тот факт, что подгонка линий сводится к проблеме собственных значений в 3D, мы проводим тщательный анализ возмущений, чтобы получить практическую процедуру калибровки. Проводя эксперименты, мы указываем, что ложные решения существуют, если применяются только коллинеарность и параллелизм. Наша техника имеет много желательных свойств. Например, не требуется никакой метрической информации об эталонном шаблоне или положении камеры, и отдельные шаблоны полос могут отображаться на видеоэкране для создания виртуальной сетки, исключая обработку извлечения точек сетки.

У меня нет опыта работы с линзами типа "рыбий глаз", но если вы планируете сопоставить изображение с перспективной проекцией, у вас возникнут проблемы. Части изображения с большим углом обзора будут отображаться на очень большие расстояния на плоскости изображения. Это может фактически привести к изображению, подобному тому, которое вы предоставили. Определенно, есть некоторые ошибки, но кажется, что большинство прямых "мировых линий" отображаются на прямые "линии изображений".

Что именно вы ожидали в результате и для чего планируете использовать эту калибровку?

OpenCV 2.4.10 и выше имеют модуль калибровки камеры "рыбий глаз". Но этот модуль использует метод, основанный на модели камеры с точечным отверстием. В этой модели у нас есть угол между оптической осью камеры и лучом света от какого-либо объекта перед камерой. У нас также есть угол между оптической осью и направлением, чтобы указать на неискаженное изображение (соответствующее объекту). Если калибровка была выполнена правильно, эти 2 угла будут равны. Это означает, что если угол обзора вашей камеры составляет около 180 градусов, расстояние от центра неискаженного изображения до края неискаженного изображения будет равно бесконечности. В результате модуль коррекции "рыбий глаз" OpenCV (cv::fisheye) не деформирует только центральную часть изображения. В моих собственных результатах я получил 140-150 градусов FOV в неискаженном изображении. Более подробное объяснение я разместил ЗДЕСЬ. Если FOV около 140-150 градусов подходит для вас, вы можете использовать cv:: fisheye без каких-либо изменений

Другие вопросы по тегам