2012-06-10 5 views
1

Как определить угол поворота из матрицы перспективы?угол поворота матрицы перспективы

Я написал этот код, но приведенный угол не превышает 40 ...

Mat mmat; 
mmat.create(3,3,CV_32FC1); 
mmat=getPerspectiveTransform(templPoints,imgPoints); 
cout<< mmat<<endl<<endl; 
float angle=acos(mmat.at<double>(0,0)); 
angle=(angle*180)/3.14; 
cout<<"angle is"<<angle<<endl; 
+2

Какая ротация, это матрица перспективы? –

+1

Перспективная матрица - это проекция. Он не включает вращения, они хранятся в матрице просмотра модели. –

ответ

2

getPerspectiveTransform возвращает матрицу гомография, которая может быть разложена так:

[R11, R12, Т1 ]

[R21, R22, Т2]

[Р, Р, 1]

R представляет собой матрицу вращения, T представляет собой трансляцию, а P представляет собой перспективную основу.

Более подробную информацию о том, что вращение матрица представляет:

http://en.wikipedia.org/wiki/Rotation_matrix

http://mathworld.wolfram.com/RotationMatrix.html

2

Процесс выглядит следующим образом. Рассмотрим трехмерную точку X, представленную в однородных координатах вектором столбца [x1, x2, x3, 1] '(где я использую простой символ «'», чтобы указать транспонирование). Рассмотрим тогда двумерную точку u = [u1, u2, 1] ', которая является образом X в (перспективной) камере. Затем проекция камеры изображается матрицей Р проекции 3х, такой как

u = P * X.

, где "*" означает, что строка-за-колонке продукта: u1 = Р11 * x1 + P12 * х2 + P13 * х3 + P14 и т.д.

Матрица Р может быть разложен в произведение двух матриц:

Р = к * Q

где к 3х3 верхней диагональной матрицы

K = [ fx s cx 
     0 fy cy 
     0 0 1 ] 

, что представляет собой камеру, и Q представляет собой матрицу 3х4

Q = [R | t] 

где R - матрица вращения 3x3 камеры, а t - вектор трансляции 3x1.

Если вы получили матрицу проекта P, процедура восстановления K, R и т следующим образом:

  1. вычислит «RQ decomposition» Р
  2. Извлечение R из Q (почитайте его левые 3 столбца)
Смежные вопросы