Многокамерная калибровка с помощью opencv: две камеры обращены друг к другу

Я хочу вычислить внешнюю калибровку двух камер по отношению друг к другу, и для этого я использую функцию cv::stereoCalibrate(). Однако результат не соответствует действительности. Что может быть не так?

Установка: Две камеры установлены высотой 7 метров, обращены друг к другу и смотрят вниз. У них много пересечений в поле зрения, и я сделал снимки шахматной доски, которые я использовал при калибровке.

Я не переворачиваю изображения.

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

Примечание: та же функция отлично калибрует камеры, которые расположены рядом друг с другом в одном направлении (как любая обычная стереокамера).

Спасибо

1 ответ

Чтобы "сказать, что камеры на самом деле обращены друг к другу", вам нужно указать imagePoints1 а также imagePoints2 правильно, так что точки с совпадающими индексами соответствуют одной и той же физической точке.

Если в вашем случае функция работает отлично, когда камеры ориентированы в одном направлении и не работает с вашей конфигурацией - расхождение между индексированием точек может быть вероятной причиной (наиболее вероятные точки переворачиваются как по вертикали, так и по горизонтали).

Один из способов отладки - это нарисовать индексы рядом с точками в каждом из кадров или кодировать их цветом и убедиться, что они совпадают между изображениями.

Хотя один вопрос - почему вы используете cv::stereoCalibrate()? Описанная вами настройка, похоже, не подходит для этого. Если вы хотите оценить внешние параметры камер, вы можете использовать cv::calibrateCamera(), Единственным недостатком является то, что предполагается, что внутренние параметры одинаковы для всех представленных видов (все изображения были сделаны с одинаковыми или очень похожими камерами). Если это не так - действительно cv::stereoCalibrate() было бы лучше подойти (но руководство предполагает, что вы по-прежнему оценивать внутренние параметры каждой камеры в отдельности, используя cv::calibrateCamera())

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