Калибровка камеры (OpenCV 2.3)-как использовать параметры искажения?

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

Некоторое время я пытался POSIT (после этого)никогда не получая приемлемых результатов, пока я не понял, что мне нужно откалибровать камеру в первую очередь. Основываясь на этом и используя некоторые изображения, полученные с помощью калибровочного тела, я получил внутреннюю матрицу камеры и параметры искажения. У меня тоже плохо (?)относительно -ошибка проекции 1,276.

  1. Ошибка проецирования re -слишком велика? Как я могу улучшить его? (Я использовал больше изображений и добился небольшого уменьшения значения ).
  2. Могу ли я использовать параметры искажения в POSIT? Как?

Спасибо.


Кажется, что единственный способ уменьшить ошибку повторного проецирования (, которая изменилась с ~1,3 до ~0,7 ), — установить значение «0» для следующих параметров в файле конфигурации XML:

 0 
 0 
 0 

Использование большего количества изображений не меняет ошибку, и я до сих пор не уверен, приемлема ли эта новая ошибка.

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

Матрица камеры у меня получилась после калибровки:


3
3
d
2.0613885351075501e+003 0. 2.2865517805186334e+002 0. 2.2546461307897816e+003 2.5261706201677623e+002 0. 0. 1.

и то, как я использовал это в POSIT:

#define FOCAL_LENGTH 2158.0175
#define FOCAL_LENGTH_X 2061.389 
#define FOCAL_LENGTH_Y 2254.646
#define cX 203.655
#define cY 205.117

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

Я использую POSIT на двух разных изображениях, где теоретически я должен получить 0 (для первого )и 10 (для второго )градусов между моделью и системой координат камеры. После того, как я получил матрицу вращения для каждого изображения, я определил единичный вектор в системе координат камеры и вычислил его в системе координат модели, умножив его на обратную из двух матриц вращения, заданных POSIT, получив два новых вектора в модели. система координат. Когда я вычисляю угол между этими двумя векторами в системе координат модели, результат не такой, как должен быть -10 градусов.

Кто-нибудь знает, где я ошибаюсь?

6
задан Bill the Lizard 12 July 2012 в 11:11
поделиться