2012-09-30 34 views
5

Aynı sahneyi yakalayan, aynı mesafeden iki kameradan çekilen iki görüntü var. İki kamera arasında gerçek dünya rotasyonunu ve çevirisini hesaplamak istiyorum. Bunu başarmak için önce her iki resmin SIFT özelliklerini çıkardım ve eşleştirdim.Çoklu Görünüm Geometri

Şimdi temel matris olarak eşyazımı matris sahiptir. Ancak, daha fazla devam edemez, bir sürü karışıklık. bana iki kamera arasında rotasyon ve çeviri'u tahmin etmede bana yardımcı olabilir mi?

Özellik çıkarma ve eşleme, homografi hesaplamaları için OpenCV kullanıyorum.

cevap

5

Homography'ye sahipseniz, o zaman rotasyonunuz da olur. Homografiye sahip olduğunuzda rotasyon ve çeviri matrisi elde etmek kolaydır. Örneğin

, sen ++ OpenCV c kullanıyorsanız: Kamera rotasyon içinde yer aldığı, homograf gelen poz de

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 
} 

Bu fonksiyon hesaplar. Daha fazla teorik bilgi için bu thread'u izleyin.

+0

Teşekkür ederiz @Jav_Rock, cevabınız bana pozu tahmin etmede yardımcı oldu. Ancak, herhangi bir görüntü kümesi için matrisin aynı olması durumunda, ilk üç sütun bir kimlik matrisi oluşturur ve son sütun boştur. Bunun hakkında bir fikrin var mı? – Aarambh

+0

Ayrıca, homografi matrisini warpAffine kullanarak doğruladım, bir görüntüyü diğerine göre doğru şekilde haritalandırıyor. – Aarambh

+0

@ user1709317: 'H' ve' poz' aynı formatta olmalı. CV_32FC1' -> 'CV_64FC1' değiştirirseniz muhtemelen istenen sonuçları alacaksınız. – bjoernz

İlgili konular