2012-08-13 14 views
6

के लिए कई तरीकों मैं एक काम मिल गया:ओपन सीवी SFM

हम काम कर रहे एक प्रणाली है जहाँ एक कैमरा एक मानव सिर के चारों ओर एक halfcircle करता है। हम कैमरा मैट्रिक्स और प्रत्येक फ्रेम के घूर्णन/अनुवाद को जानते हैं। (विरूपण और अधिक ... लेकिन मैं पहले इन पैरामीटर के बिना काम करना चाहता हूं)

मेरा काम यह है कि मेरे पास केवल कैमरा मैट्रिक्स है, जो इस कदम पर स्थिर है, और छवियां (100 से अधिक)। अब मुझे फ्रेम से फ्रेम से अनुवाद और रोटेशन प्राप्त करना है और वास्तविक दुनिया में घूर्णन और अनुवाद के साथ इसकी तुलना करना है (मेरे पास जो सिस्टम है, लेकिन केवल तुलना के लिए, मैंने इसे साबित कर दिया है!)

पहले चरण I अब तक किया गया:

  1. ओपनसीवी कुकबुक से robustMatcher का उपयोग करें - काम करता है - 40-70 प्रत्येक फ्रेम से मेल खाता है - दृश्यमान यह बहुत अच्छा लगता है!
  2. मुझे getFundamental() के साथ मौलिक मैट्रिक्स मिलता है। मैं robustMatcher और RANSAC से मजबूत अंक का उपयोग करता हूं।
  3. जब मैं एफ मैं इस तरह मेरे 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 

यह मेरी वास्तविक स्थिति है!

मेरी योजनाओं हैं:

  1. सभी बिंदुओं त्रिकोणाकार 3 डी अंक प्राप्त करने के लिए
  2. फ्रेम के साथ फ्रेम मैं जुड़ें i ++
  3. कल्पना मेरी 3 डी उन्हें किसी भी तरह बताते हैं!

अब मेरी प्रश्न हैं:

  1. इस मजबूत मिलान दिनांकित है? क्या कोई और तरीका है?
  2. क्या मेरे दूसरे चरण में वर्णित इस बिंदु का उपयोग करना गलत है? क्या उन्हें विरूपण या कुछ के साथ परिवर्तित किया जाना चाहिए?
  3. क्या मैं आर और टी क्या यह निकाला गया है? क्या यह कैमरा 1 से कैमरे 1 और कैमरा 2 के बीच घूर्णन और अनुवाद है?
  4. जब मैं बाइबल या कागजात या अन्य जगहों पर पढ़ता हूं तो मुझे लगता है कि आर और टी कैसे हो सकते हैं 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 डी अंक कल्पना करने के लिए एक आसान तरीका पता है? मैं मेशलाब को पसंद करता हूं। उसके साथ कुछ अनुभव?

उत्तर

2

कई लोग एक शतरंज का उपयोग करके कैमरा अंशांकन कर रहे हैं, लेकिन मैं बाहरी पैरामीटर प्राप्त करने के लिए इस विधि का उपयोग नहीं कर सकता।

एक शतरंज बोर्ड या चेकर बोर्ड आंतरिक/आंतरिक मैट्रिक्स/पैरामीटर को खोजने के लिए उपयोग किया जाता है, बाहरी पैरामीटर नहीं। आप कह रहे हैं आप पहले से ही आंतरिक मैट्रिक्स मिल गया है, मुझे लगता है कि आप द्वारा

क्या मतलब हम कैमरा मैट्रिक्स जानते हैं और ...

उन वीडियो आप यूट्यूब पर देखा है किया है है वही, कैमरा पहले से ही कैलिब्रेटेड है, यह आंतरिक मैट्रिक्स ज्ञात है।

क्या यह मजबूत मैचर दिनांकित है? क्या कोई और तरीका है?

मेरे पास वह पुस्तक नहीं है इसलिए कोड को देख और उत्तर दें।

क्या मेरे दूसरे चरण में वर्णित इस बिंदु का उपयोग करना गलत है? क्या उन्हें विरूपण या कुछ के साथ परिवर्तित किया जाना चाहिए?

आपको पहले रेडियल विरूपण को रद्द करने की आवश्यकता है, undistortPoints देखें।

क्या मैं आर और टी क्या यह निकाला गया है? क्या यह कैमरा 1 से कैमरे 1 और कैमरा 2 के बीच घूर्णन और अनुवाद है?

आर पहले कैमरे के समन्वय प्रणाली में दूसरे कैमरे का अभिविन्यास है। और टी उस समन्वय प्रणाली में दूसरे कैमरे की स्थिति है। इनका कई उपयोग हैं।

जब मैं बाईबल या कागजात या कहीं और मैं लगता है पर पढ़ने के 4 संभावनाओं कैसे देखते हैं कि ....

बाईबल के प्रासंगिक अनुभाग पढ़ें, यह बहुत अच्छी तरह से, वहाँ से समझाया गया है ट्राईऐन्ग्युलेशंस बेवकूफ विधि है, वहां एक बेहतर दृष्टिकोण समझाया गया है।

क्या कोई मेरे 3 डी पॉइंट्स को देखने का एक आसान तरीका जानता है?

उन्हें Meshlab में देखने के लिए एक बहुत ही आसान तरीका एक प्लाई फ़ाइल में 3 डी अंक की समन्वय को बचाने के लिए है, यह एक बहुत ही सरल प्रारूप और Meshlab द्वारा समर्थित और लगभग सभी अन्य 3 डी मॉडल दर्शकों है।

+0

@ शंबूल: आपकी मदद के लिए धन्यवाद। मुझे अपने शोध के साथ थोड़ा और आगे मिला। मैं वास्तव में undistortPoints का उपयोग करना चाहिए। मैंने सोचा कि आप अंशांकन के साथ बाह्य प्राप्त कर सकते हैं। लेकिन ऐसा लगता है कि मैं गलत हूं। –

+0

लेकिन मुझे अंशांकन में रूचि नहीं थी क्योंकि मेरे पास पहले से ही कैमरा (आंतरिक) मैट्रिक्स है। महत्वपूर्ण यह जानना था कि आर एंड टी मैट्रिक्स पहले कैमरा समन्वय प्रणाली के आधार पर है। अगला चरण: 4 विकल्पों की वजह से सही आर और टी प्राप्त करना। हां यह त्रिभुज के साथ किया जा सकता है। (और चार विकल्प प्राप्त करने के लिए एसवीडी या हॉर्न का बंद फॉर्म) –

+0

लेकिन आप बस कहते हैं कि यह संभव है और बाइबल पर गणितीय वर्णित है, लेकिन मैं किसी ऐसे व्यक्ति की उम्मीद कर रहा था जो पहले से ही ऐसा कर चुका है और अपना कोड साझा करना चाहता है। अंतिम: हाँ पाली फ़ाइल मेशलाब के साथ सबसे अच्छी होनी चाहिए। मैं youtubevideos पर वापस आना चाहता हूं: नहीं उन्होंने कोई अंशांकन नहीं किया है। वे रोम, डबरोवनिक या एक पेड़ से 150.000 Flikrimages की तरह उपयोग करते हैं और एक एसएफएम करते हैं। तो वे पूर्ण अंशांकन नहीं कर सकते हैं! लेकिन मेरे प्रश्न का मतलब यह है कि इस आर और टी समस्या को हल करें। अगर कोई अपना कोड साझा करना चाहता है - तो यह वास्तव में उपयोगी होगा। –

1

इस लेख में "पांच-प्वाइंट रिलेवेटिव पॉज़ समस्या के लिए एक कुशल समाधान", निस्टर यह निर्धारित करने के लिए एक बहुत अच्छी विधि बताता है कि चार कॉन्फ़िगरेशन में से कौन सा सही है (आर और टी के बारे में बात करना)।

मैंने मजबूत मैचर की कोशिश की है और मुझे लगता है कि यह अच्छा है। इस मैचर की समस्याएं वास्तव में धीमी हैं क्योंकि यह एसयूआरएफ का उपयोग करती है, शायद आपको गति सुधारने के लिए अन्य डिटेक्टरों और निकालने वालों के साथ प्रयास करना चाहिए। मुझे यह भी विश्वास है कि मौलिक मैट्रिक्स की गणना करने वाले ओपनसीवी में फ़ंक्शन को रांसैक पैरामीटर की आवश्यकता नहीं है क्योंकि विधियों की दर और समरूपता outliers को हटाने के लिए एक महान काम करते हैं, आपको 8-बिंदु पैरामीटर का प्रयास करना चाहिए।

ओपनसीवी में फ़ंक्शन त्रिभुज है, इसे केवल दो प्रोजेक्शन मैट्रिस की आवश्यकता है, जो पहले और दूसरी छवि में हैं। Calib3d मॉड्यूल की जांच करें।

+0

यह ध्यान देने योग्य है कि ओपनसीवी के नवीनतम संस्करणों में अब आवश्यक मैट्रिक्स को पुनर्प्राप्त करने और निडर के काम के आधार पर इसे हटाने के लिए तीन कार्य शामिल हैं। मैंने पाया कि नया findEssentialMat फ़ंक्शन पुराने डेटा की तुलना में अधिक मजबूत था मेरे डेटा के लिए FundamentalMat फ़ंक्शन। मुझे केवल एक कैमरा ले जाकर ली गई छवियों की एक जोड़ी को सुधारने में बहुत परेशानी हो रही थी; अब मुझे बेहतर भाग्य है। –

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