2015-03-02 2 views
2

Кто-нибудь может использовать функцию openPV 3.0 recoverPose с хорошими результатами? У меня есть:openCV 3.0 recoverPose ошибочные результаты

cv::Mat r; 
cv::Mat t; 
cv::Mat E = cv::findEssentialMat(features1, features2); 
cv::recoverPose(E, features1, features1, r, t); 

float xAngle = radToDeg(atan2f(r.at<float>(2, 1), r.at<float>(2, 2))); 
float yAngle = radToDeg(atan2f(-r.at<float>(2, 0), sqrtf(r.at<float>(2, 1) * r.at<float>(2, 1) + r.at<float>(2, 2) * r.at<float>(2, 2)))); 
float zAngle = radToDeg(atan2f(r.at<float>(1, 0), r.at<float>(0, 0))); 

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

Я ожидаю результат:

xAngle: 0 

yAngle: 0 

zAngle: 90 (or -90 depending on Z direction) 

К сожалению, мои результаты:

xAngle: 90 

yAngle: 0.113659 

zAngle: 180 

Может кто-нибудь помочь мне с этим?

+0

В режиме восстановления вы передаете функции1 вместо функций2. – Ruturaj

ответ

1

Основная матрица не может использоваться для описания чистого вращения. Если вы знаете, что ваши изображения связаны только с переводом без перевода, вам нужно оценить гомографию (ака проективное преобразование) между ними.

+0

Спасибо. Вы знаете, как я могу получить чистое вращение с помощью openCV 3.0? Я прочитал много документов, и я немного смущен. – Bystysz

+2

@ Дима, поразмыслить? –

Смежные вопросы