Homography मैट्रिक्स से कैमरा पोज़ की गणना कैसे करें?


13

कहते हैं कि मैं केवल एक कैलिब्रेटेड कैमरे का उपयोग करता हूं। इस कैमरे से, मुझे A और B के चित्र मिलते हैं। मैं जानता हूँ कि OpenCV की खोजहोमोग्राफी () के माध्यम से A और B के बीच की गणना है ।

मुझे पता है कि छवि A की मुद्रा (रोटेशन मैट्रिक्स R और अनुवाद वेक्टर t) है, और मुझे छवि B की मुद्रा की आवश्यकता है। एक बार जब मैं इसे प्राप्त करता हूं, तो मुझे लगता है कि मैं निम्नलिखित छवियों के प्रत्येक आगे की पंक्तियों की गणना करने में सक्षम हूं।

क्या आप कंप्यूटिंग बी के पोज को लागू करते हैं? मुझे वेब पर कई लेख मिले, लेकिन मुझे आसानी से लागू करने योग्य समाधान नहीं मिला ...


मुझे यकीन नहीं है कि मैं समझता हूं कि आपको अपने कोड का उपयोग कैसे करना है। मैं होमोग्राफी को पुनः प्राप्त करने के लिए OpenCV का उपयोग करता हूं, लेकिन जब मैं उस होमोग्राफी को एल्गोरिथ्म के माध्यम से भेजता हूं, तो यह हमेशा इसे वापस करता है। कैमरापोस [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 1, 0]
LeRoss

जवाबों:


8

यहां तक ​​कि अगर मेरा जवाब आपके लिए बहुत देर से आता है, तो शायद अन्य लोगों को यह उपयोगी लगता है। मेरे पास होमोग्राफी से एक ओपनसीवी पोज के लिए कोड हैं। मुझे यह वास्तव में उपयोगी वेबसाइट, यूक्लिडियनस्पेस में विधि मिली ।

void cameraPoseFromHomography(const Mat& H, Mat& pose)
{
    pose = Mat::eye(3, 4, CV_64FC1); //3x4 matrix
    float norm1 = (float)norm(H.col(0)); 
    float norm2 = (float)norm(H.col(1));
    float tnorm = (norm1 + norm2) / 2.0f;

    Mat v1 = H.col(0);
    Mat v2 = pose.col(0);

    cv::normalize(v1, v2); // Normalize the rotation

    v1 = H.col(1);
    v2 = pose.col(1);

    cv::normalize(v1, v2);

    v1 = pose.col(0);
    v2 = pose.col(1);

    Mat v3 = v1.cross(v2);  //Computes the cross-product of v1 and v2
    Mat c2 = pose.col(2);
    v3.copyTo(c2);      

    pose.col(3) = H.col(2) / tnorm; //vector t [R|t]
}

////


मैंने अपने फ़ंक्शन का उपयोग अपने कोड में किया है। इस तरह से गणना की गई मैट्रिक्स हमेशा [1 0 0 0 0] का उपयोग किया जाता है; 0 1 0 0; 0 0 1 0; 0 0 0 0]। क्या आपके पास कोई स्पष्टीकरण है?
मुहम्मते अली आसन

क्या आप A की मुद्रा का उपयोग कर रहे हैं? ऐसा लगता है कि आप केवल
गुइग

यह विधि वास्तव में सटीक नहीं है, यहां तक ​​कि एक होमोग्राफ मैट्रिक्स के साथ एक ज्ञात मुद्रा से सीधे गणना की जाती है। परिणाम में सुधार किया जा सकता है, हालांकि, एक पुनरावृत्ति प्रक्रिया का उपयोग करके जहां आपको अनुमानित मुद्रा से एक मैट्रिक्स मिलता है, इसे उल्टा करें और मूल इनपुट पर लागू करें। इस अवशेष होमोग्राफी से पोज़ पैरामीटर प्राप्त करें, अपने पोज़ अनुमान को अपडेट करें और इसी तरह जब तक यह परिवर्तित न हो जाए।
डिवाइडबीज़रो


0

आप Opencv 3.0+ में कार्यान्वित होमोग्राफी अपघटन विधि का उपयोग कर सकते हैं

decomposeHomographyMat

  • Opencv का फ़ंक्शन संभावित घुमाव, कैमरा मानदंड और अनुवाद मैट्रिसेस का सेट देता है।
  • पहली छवि कैप्चर होने पर आपको कैमरे के सामान्य के साथ कैमरा मानदंडों की तुलना करके उनके बीच सही सेट का चयन करना होगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.