Я пытаюсь использовать основной матричный метод в opencv для получения R и t одной позы камеры по отношению к другой. Процедура Я следующее:Оценка относительной позы с использованием существенной матрицы: неправильная R и T
- пометки с помощью SIFT
- Совпадения функции с помощью Flann соответствия
- Compute фундаментальной матрицы.
- Вычисление матрицы существенно
- Выполните СВД, чтобы получить U, W, Вт
- Проверьте, чтобы увидеть, какая комбинация R и т правильно в зависимости от того, являются ли нормированные/гомогенизированные точки в передней части камеры.
Для простой проверки я проверил это с парой изображений, но с одним и тем же изображением дважды (чтобы ни камера, ни точки изображения не сдвинулись), поэтому вектор перевода должен быть нулевым, а поворот должен быть равен идентичность. Но выход программы оказывается неправильным.
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, а матрица вращения не точна. Я смущен тем, что здесь может быть неправильным. Любые предложения были бы очень полезными. Спасибо!
EDIT: Мой код можно посмотреть here
пытаться выяснить, какой ШАГ ваших вычислений является ошибочным. Мое предложение для тестирования: замените '1. Отметить функции с помощью SIFT; 2. Сопоставить функции, используя FLANN-совместимость' с помощью некоторых основополагающих истинностных соответствий. – Micka
Привет Мика, поскольку я использовал одну и ту же картинку дважды, соответствия должны быть одинаковыми в обоих списках. Разве это не должно решить проблему корреспонденции, или вы предлагаете использовать ее как шахматную доску или что-то в этом роде? – HighVoltage
не уверены, работают ли эти алгоритмы, если вообще нет движения. – Micka