Оценка относительной позы с использованием необходимой матрицы: неправильные R и T

Я пытаюсь использовать метод основных матриц в opencv, чтобы получить R и t одной позы камеры относительно другой. Процедура, которой я придерживаюсь:

  1. Отметить объекты с помощью SIFT
  2. Сопоставление функций с использованием сопоставления FLANN
  3. Вычислить фундаментальную матрицу.
  4. Вычислить необходимую матрицу
  5. Выполните SVD, чтобы получить U, W, Vt
  6. Проверьте, какая комбинация R и t является правильной в зависимости от того, находятся ли нормализованные / гомогенизированные точки перед камерой.

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

The fundamental matrix is
[[  3.59955121e-17  -5.77350269e-01   2.88675135e-01]
 [  5.77350269e-01   5.55111512e-17   2.88675135e-01]
 [ -2.88675135e-01  -2.88675135e-01   0.00000000e+00]]

Fundamental matrix error check: 0.000000

The essential matrix is
[[  4.51463713e-10  -7.25229650e+06  -2.37367600e+06]
 [  7.25229650e+06   6.98357978e-10   4.27847619e+06]
 [  2.37367600e+06  -4.27847619e+06  -1.33013600e-10]]

Translation matrix is
[-0.48905495 -0.2713251   0.82898007]

Rotation matrix is
[[ 0.52165052 -0.26538577  0.8108336 ]
 [-0.26538577  0.85276538  0.4498462 ]
 [ 0.8108336   0.4498462  -0.3744159 ]]
Roll: -26.965168, Pitch: 129.775110, Yaw: -54.179055

Я также использовал этот код с парой камер, смещенных на определенное расстояние в X: но углы Эйлера и перевод, которые я получаю, используя эту технику (там я рассматриваю две матрицы камер вместо одной), все еще неверны. Вектор перевода говорит мне, что я переместился как по X, так и по Z, и матрица вращения не точна. Я не понимаю, что здесь может пойти не так. Любые предложения будут очень полезны. Спасибо!

РЕДАКТИРОВАТЬ: мой код можно посмотреть здесь

1 ответ

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

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