2015-07-28 4 views
0

Я пытаюсь использовать основной матричный метод в opencv для получения R и t одной позы камеры по отношению к другой. Процедура Я следующее:Оценка относительной позы с использованием существенной матрицы: неправильная R и T

  1. пометки с помощью SIFT
  2. Совпадения функции с помощью Flann соответствия
  3. Compute фундаментальной матрицы.
  4. Вычисление матрицы существенно
  5. Выполните СВД, чтобы получить U, W, Вт
  6. Проверьте, чтобы увидеть, какая комбинация 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

+0

пытаться выяснить, какой ШАГ ваших вычислений является ошибочным. Мое предложение для тестирования: замените '1. Отметить функции с помощью SIFT; 2. Сопоставить функции, используя FLANN-совместимость' с помощью некоторых основополагающих истинностных соответствий. – Micka

+0

Привет Мика, поскольку я использовал одну и ту же картинку дважды, соответствия должны быть одинаковыми в обоих списках. Разве это не должно решить проблему корреспонденции, или вы предлагаете использовать ее как шахматную доску или что-то в этом роде? – HighVoltage

+0

не уверены, работают ли эти алгоритмы, если вообще нет движения. – Micka

ответ

0

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