2012-09-30 16 views
5

मेरे पास दो कैमरों से दो छवियां कैप्चर की गई हैं, जो एक ही दृश्य को कैप्चर करते हुए कुछ दूरी दूर रखती हैं। मैं दो कैमरों के बीच असली दुनिया रोटेशन और अनुवाद की गणना करना चाहता हूं। इसे प्राप्त करने के लिए, मैंने पहली बार दोनों छवियों की एसआईएफटी सुविधाओं को निकाला और उन्हें मिलान किया।एकाधिक-दृश्य ज्यामिति

मैं अब मौलिक मैट्रिक्स के साथ-साथ homography मैट्रिक्स है। हालांकि आगे बढ़ने में असमर्थ, बहुत भ्रम। क्या कोई मुझे में दो कैमरों के बीच घूर्णन और अनुवाद का अनुमान लगा सकता है?

मैं सुविधा निष्कर्षण और मिलान, होमोग्राफी गणना के लिए ओपनसीवी का उपयोग कर रहा हूं।

उत्तर

5

यदि आपके पास होमोग्राफी है तो आपके पास घूर्णन भी है। एक बार आपके पास होमोग्राफी हो जाने के बाद घूर्णन और अनुवाद मैट्रिक्स प्राप्त करना आसान होता है।

उदाहरण के लिए, यदि आप OpenCV ग का उपयोग कर रहे ++:

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 
} 

इस समारोह की गणना करता है डी कैमरा है, जिसमें रोटेशन निहित है homography से पेश करती हैं। आगे सैद्धांतिक जानकारी के लिए इस thread का पालन करें।

+0

धन्यवाद @Jav_Rock, आपके उत्तर ने मुझे अनुमान लगाने में मदद की। हालांकि किसी भी छवि सेट के लिए पॉज़ मैट्रिक्स समान आ रहा है, पहले तीन कॉलम एक पहचान मैट्रिक्स बनाते हैं और अंतिम कॉलम खाली होता है। क्या आपको इस पर कोई विचार है? – Aarambh

+0

मैंने warpAffine का उपयोग करके होमोग्राफी मैट्रिक्स की भी पुष्टि की, यह एक छवि के दृश्य को सही तरीके से मैप कर रहा है। – Aarambh

+0

@ user1709317: 'एच' और 'पॉज़' को उसी प्रारूप के होने की आवश्यकता है। यदि आप 'CV_32FC1'->' CV_64FC1' बदलते हैं तो आपको शायद वांछित परिणाम मिलेंगे। – bjoernz

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^