Оценка относительной позы с использованием необходимой матрицы: неправильные R и T
Я пытаюсь использовать метод основных матриц в opencv, чтобы получить R и t одной позы камеры относительно другой. Процедура, которой я придерживаюсь:
- Отметить объекты с помощью SIFT
- Сопоставление функций с использованием сопоставления FLANN
- Вычислить фундаментальную матрицу.
- Вычислить необходимую матрицу
- Выполните SVD, чтобы получить U, W, Vt
- Проверьте, какая комбинация 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 ответ
Я думаю, что прежде чем приступить к согласованию функций, вам нужно не искажать изображения, используя матрицы камеры и коэффициенты искажения. Я знаю, что это слишком поздно, но я надеюсь, что это поможет другим.