Рыбий глаз/калибровка широкоугольных линз в OpenCV

Я знаю, что калибровочные системы OpenCV по умолчанию моделируют камеру-обскуру, но я работаю с системой, использующей чрезвычайно широкий объектив FOV (187 градусов). Если есть какой-либо существующий способ сделать это в OpenCV или работать только с широкими линзами? Или мне придется переписать все калибровки / отмены для моей системы?

4 ответов


кажется, нет хорошего способа OpenCV сделать это.

Я закончил использование OCamLib для фактической калибровки, а затем написал свою собственную функцию "undistortPoints" (используя алгоритмы Скарамуццы), чтобы отменить искажение 2D-точек изображения в 3D-векторы (а не 2D-точки). К сожалению, это также нарушает множество других вещей в OpenCV, потому что большинство функций обработки изображений OpenCV ожидают 2D-точек и собственной модели калибровки отверстий, поэтому мне пришлось перестроить значительные части код для этого.

Я приветствую любое другое понимание этого.


есть веская причина, почему люди не используют широкоугольные линзы много-когда изображения неискаженные, результирующее изображение сильно непрямоугольное, а качество по краям настолько плохое, что изображение должно быть обрезано до... 90 град FOV. Итак, вопрос в том, почему бы просто не использовать объектив 90 deg FOV на первом месте? Ситуация становится еще хуже со стереокамерами и исправлением изображения.

Если вам действительно нужно иметь широкий FOV, используйте несколько камер или вращающуюся камеру. Здесь приведем несколько примеров:PointGrey Inc.


для калибровки камеры с чрезвычайно широким объективом FOV вы можете использовать всенаправленный модуль камеры С OpenCV Contrib. Важно отметить, что вам нужно перестроить OpenCV с помощью OpenCV contributors, чтобы использовать его.


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