के लिए कई तरीकों मैं एक काम मिल गया:ओपन सीवी SFM
हम काम कर रहे एक प्रणाली है जहाँ एक कैमरा एक मानव सिर के चारों ओर एक halfcircle करता है। हम कैमरा मैट्रिक्स और प्रत्येक फ्रेम के घूर्णन/अनुवाद को जानते हैं। (विरूपण और अधिक ... लेकिन मैं पहले इन पैरामीटर के बिना काम करना चाहता हूं)
मेरा काम यह है कि मेरे पास केवल कैमरा मैट्रिक्स है, जो इस कदम पर स्थिर है, और छवियां (100 से अधिक)। अब मुझे फ्रेम से फ्रेम से अनुवाद और रोटेशन प्राप्त करना है और वास्तविक दुनिया में घूर्णन और अनुवाद के साथ इसकी तुलना करना है (मेरे पास जो सिस्टम है, लेकिन केवल तुलना के लिए, मैंने इसे साबित कर दिया है!)
पहले चरण I अब तक किया गया:
- ओपनसीवी कुकबुक से robustMatcher का उपयोग करें - काम करता है - 40-70 प्रत्येक फ्रेम से मेल खाता है - दृश्यमान यह बहुत अच्छा लगता है!
- मुझे getFundamental() के साथ मौलिक मैट्रिक्स मिलता है। मैं robustMatcher और RANSAC से मजबूत अंक का उपयोग करता हूं।
- जब मैं एफ मैं इस तरह मेरे CameraMatrix कश्मीर के साथ Essentialmatrix ई प्राप्त कर सकते हैं मिल गया:
cv::Mat E = K.t() * F * K; //Found at the Bible HZ Chapter 9.12
अब हम SVD साथ ई से बाहर आर और टी को निकालने के लिए की जरूरत है। जिस तरह से कैमरा 1 स्थिति शून्य है क्योंकि हमें कहीं से शुरू करना है।
cv::SVD svd(E);
cv::SVD svd(E);
cv::Matx33d W(0,-1,0, //HZ 9.13
1,0,0,
0,0,1);
cv::Matx33d Wt(0,1,0,//W^
-1,0,0,
0,0,1);
cv::Mat R1 = svd.u * cv::Mat(W) * svd.vt; //HZ 9.19
cv::Mat R2 = svd.u * cv::Mat(Wt) * svd.vt; //HZ 9.19
//R1 or R2???
R = R1; //R2
//t=+u3 or t=-u3?
t = svd.u.col(2); //=u3
यह मेरी वास्तविक स्थिति है!
मेरी योजनाओं हैं:
- सभी बिंदुओं त्रिकोणाकार 3 डी अंक प्राप्त करने के लिए
- फ्रेम के साथ फ्रेम मैं जुड़ें i ++
- कल्पना मेरी 3 डी उन्हें किसी भी तरह बताते हैं!
अब मेरी प्रश्न हैं:
- इस मजबूत मिलान दिनांकित है? क्या कोई और तरीका है?
- क्या मेरे दूसरे चरण में वर्णित इस बिंदु का उपयोग करना गलत है? क्या उन्हें विरूपण या कुछ के साथ परिवर्तित किया जाना चाहिए?
- क्या मैं आर और टी क्या यह निकाला गया है? क्या यह कैमरा 1 से कैमरे 1 और कैमरा 2 के बीच घूर्णन और अनुवाद है?
- जब मैं बाइबल या कागजात या अन्य जगहों पर पढ़ता हूं तो मुझे लगता है कि आर और टी कैसे हो सकते हैं 4 संभावनाएं हैं! 'पी' = [यूडब्ल्यूवी^टी | + यू 3] ओडर [यूडब्ल्यूवी^टी | -यू 3] ओडर [यूडब्ल्यू^टीवी^टी | + यू 3] ओडर [यूडब्ल्यू^टीवी^टी | -यू 3] ' पी' है दूसरी छवि के projectionmatrix। इसका मतलब है कि टी हो सकता है - या + और आर कुल अलग हो सकता है ?! मुझे पता चला कि मुझे 3 बिंदु में एक बिंदु की गणना करनी चाहिए और यह पता लगाना चाहिए कि यह बिंदु दोनों कैमरों के सामने है, तो मुझे सही मैट्रिक्स मिल गया है! मैं इंटरनेट पर इस कोड के कुछ मिल गया है और वह सिर्फ इस आगे नहीं कहा की गणना:
cv::Mat R1 = svd.u * cv::Mat(W) * svd.vt
औरt = svd.u.col(2); //=u3
क्यों यह सही है? यदि यह नहीं है - मैं OpenCV में यह त्रिकोण कैसे करूं? मैंने इस अनुवाद की तुलना उस अनुवाद से की जो मुझे दिया गया है। (सबसे पहले मुझे कैमरे 1 के रिश्ते में अनुवाद और रोटेशन स्थानांतरित करना पड़ा लेकिन मुझे अब यह मिला!) लेकिन यह वही नहीं है। मेरे कार्यक्रम के मूल्य सिर्फ इसे बहुत कम से कम कूदने के लिए कहते हैं। लेकिन यह अधिक स्थिर होना चाहिए क्योंकि कैमरा निरंतर सर्कल में आगे बढ़ रहा है। मुझे यकीन है कि कुछ अक्षों को स्विच किया जा सकता है। मुझे पता है कि अनुवाद केवल -1 से 1 तक है, लेकिन मैंने सोचा कि मैं अपने परिणामों से अपने परिणामों में एक कारक निकाल सकता हूं और फिर यह समान होना चाहिए।
क्या किसी ने पहले ऐसा कुछ किया है?
कई लोग एक शतरंज का उपयोग करके कैमरा अंशांकन कर रहे हैं, लेकिन मैं बाहरी पैरामीटर प्राप्त करने के लिए इस विधि का उपयोग नहीं कर सकता।
मुझे पता है कि दृश्य एसएफएम इसे किसी भी तरह से कर सकता है। (यूट्यूब में एक वीडियो है जहां कोई पेड़ के चारों ओर चलता है और इन तस्वीरों से दृश्य एसएफएम का उपयोग करके इस पेड़ का पुनर्निर्माण प्राप्त करता है) यह वही है जो मुझे करना है।
अंतिम प्रश्न:
किसी ने मेरी 3 डी अंक कल्पना करने के लिए एक आसान तरीका पता है? मैं मेशलाब को पसंद करता हूं। उसके साथ कुछ अनुभव?
@ शंबूल: आपकी मदद के लिए धन्यवाद। मुझे अपने शोध के साथ थोड़ा और आगे मिला। मैं वास्तव में undistortPoints का उपयोग करना चाहिए। मैंने सोचा कि आप अंशांकन के साथ बाह्य प्राप्त कर सकते हैं। लेकिन ऐसा लगता है कि मैं गलत हूं। –
लेकिन मुझे अंशांकन में रूचि नहीं थी क्योंकि मेरे पास पहले से ही कैमरा (आंतरिक) मैट्रिक्स है। महत्वपूर्ण यह जानना था कि आर एंड टी मैट्रिक्स पहले कैमरा समन्वय प्रणाली के आधार पर है। अगला चरण: 4 विकल्पों की वजह से सही आर और टी प्राप्त करना। हां यह त्रिभुज के साथ किया जा सकता है। (और चार विकल्प प्राप्त करने के लिए एसवीडी या हॉर्न का बंद फॉर्म) –
लेकिन आप बस कहते हैं कि यह संभव है और बाइबल पर गणितीय वर्णित है, लेकिन मैं किसी ऐसे व्यक्ति की उम्मीद कर रहा था जो पहले से ही ऐसा कर चुका है और अपना कोड साझा करना चाहता है। अंतिम: हाँ पाली फ़ाइल मेशलाब के साथ सबसे अच्छी होनी चाहिए। मैं youtubevideos पर वापस आना चाहता हूं: नहीं उन्होंने कोई अंशांकन नहीं किया है। वे रोम, डबरोवनिक या एक पेड़ से 150.000 Flikrimages की तरह उपयोग करते हैं और एक एसएफएम करते हैं। तो वे पूर्ण अंशांकन नहीं कर सकते हैं! लेकिन मेरे प्रश्न का मतलब यह है कि इस आर और टी समस्या को हल करें। अगर कोई अपना कोड साझा करना चाहता है - तो यह वास्तव में उपयोगी होगा। –