2012-09-30 9 views
5

Tengo dos imágenes capturadas de dos cámaras de la misma marca ubicadas a cierta distancia, capturando la misma escena. Quiero calcular la rotación del mundo real y la traducción entre las dos cámaras. Para lograr esto, primero extraje las características SIFT de ambas imágenes y las comparé.Geometría de vista múltiple

Ahora tengo matriz fundamental así como matriz de homografía. Sin embargo, no puede seguir adelante, mucha confusión. ¿Alguien me puede ayudar a estimar la rotación y la traducción entre dos cámaras?

Estoy usando OpenCV para la extracción de características y el ajuste, cálculos de homografía.

Respuesta

5

Si tiene la Homografía, entonces también tiene la rotación. Una vez que tiene la homografía, es fácil obtener la rotación y la matriz de traducción.

Por ejemplo, si usted está usando OpenCV C++:

param[in] H 
param[out] pose 
void cameraPoseFromHomography(const Mat& H, Mat& pose) 
{ 
    pose = Mat::eye(3, 4, CV_32FC1);  // 3x4 matrix, the camera pose 
    float norm1 = (float)norm(H.col(0)); 
    float norm2 = (float)norm(H.col(1)); 
    float tnorm = (norm1 + norm2)/2.0f; // Normalization value 

    Mat p1 = H.col(0);  // Pointer to first column of H 
    Mat p2 = pose.col(0); // Pointer to first column of pose (empty) 

    cv::normalize(p1, p2); // Normalize the rotation, and copies the column to pose 

    p1 = H.col(1);   // Pointer to second column of H 
    p2 = pose.col(1);  // Pointer to second column of pose (empty) 

    cv::normalize(p1, p2); // Normalize the rotation and copies the column to pose 

    p1 = pose.col(0); 
    p2 = pose.col(1); 

    Mat p3 = p1.cross(p2); // Computes the cross-product of p1 and p2 
    Mat c2 = pose.col(2); // Pointer to third column of pose 
    p3.copyTo(c2);  // Third column is the crossproduct of columns one and two 

    pose.col(3) = H.col(2)/tnorm; //vector t [R|t] is the last column of pose 
} 

Esta función calcula de la cámara pose de homografía, en la que está contenida la rotación. Para obtener más información teórica, siga este thread.

+0

Gracias @Jav_Rock, su respuesta me ayudó a estimar pose. Sin embargo, para cualquier conjunto de imágenes, la matriz de la pose es la misma, las primeras tres columnas forman una matriz de identidad y la última columna está vacía. ¿Tienes alguna idea sobre esto? – Aarambh

+0

También confirmé la matriz de homografía usando warpAffine, mapeando correctamente la vista de una imagen a otra. – Aarambh

+0

@ user1709317: 'H' y' pose' deben ser del mismo formato. Probablemente obtendrá los resultados deseados si cambia 'CV_32FC1'->' CV_64FC1'. – bjoernz

Cuestiones relacionadas