2015-10-08 7 views
6

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

प्रणाली वैश्विक और संदर्भ फ्रेम स्थापित करने के लिए आईआर-परावर्तक मार्करों के साथ बाहरी ट्रैकिंग सिस्टम (पोलारिस स्पेक्ट्ररा स्टीरियो ऑप्टिकल ट्रैकर) का उपयोग करती है। मेरे पास एक मार्कर संलग्न है जिसमें एक मार्कर संलग्न है, जो कि एलएजीओ संरचना का एक 3 डी मॉडल है जो सीएडी का उपयोग करके अपने असली दुनिया के समकक्ष के सटीक चश्मा, एक ट्रैक पॉइंटर टूल और एक विश्व संदर्भ वाला कैमरा है इसके साथ जुड़ा मार्कर। वर्चुअल स्पेस को वास्तविक दुनिया में 3 डी स्लाइसर में एक टूलसेट का उपयोग करके पंजीकृत किया गया था, एक मेडिकल इमेजिंग सॉफ्टवेयर जो पर्यावरण मैं विकसित कर रहा हूं। नीचे कुछ तस्वीरें हैं जो ठीक से सिस्टम को स्पष्ट करने के लिए हैं जो मैं कर रहा हूं (मई या इस मुद्दे के लिए प्रासंगिक नहीं हो सकता है)।

LEGO structure with tracked camera and world reference marker

Scene image 1 with tracker visible in top right and registration checkerboard on left

तो वास्तव में क्या प्रत्येक मार्कर/घटक करता है (मार्करों चार चांदी गेंदों के साथ काले पार कर रहे हैं) का एक संक्षिप्त अवलोकन:

  • दुनिया मार्कर (1 छवि दाईं तरफ) अन्य सभी मार्कर के परिवर्तनों के लिए संदर्भ फ्रेम है। यह लेगो मॉडल के लिए तय है ताकि एलईजीओ के वर्चुअल समकक्ष के लिए एक ही पंजीकरण किया जा सके।
  • कैमरा मार्कर (कैमरा से जुड़ी पहली छवि) कैमरे को ट्रैक करती है। कैमरे को इस मार्कर में cv::solvePnP() का उपयोग करके किए गए बाह्य अंशांकन द्वारा पंजीकृत किया गया है।
  • चेकरबोर्ड का उपयोग ट्रैक किए गए सूचक (अनछुए) और cv::findChessboardCorners() का उपयोग करके बाह्य अंशांकन के लिए डेटा प्राप्त करने के लिए किया जाता है।

अब तक मैं सिस्टम के पीछे गणित के खिलाफ अपना चेहरा तोड़ रहा हूं जब तक कि आखिरकार सब कुछ खत्म नहीं हो जाता। जब मैं स्थानांतरित करता हूं जहां मैं संदर्भ उत्पत्ति के लिए कैमरा उत्पत्ति का अनुमान लगाता हूं, तो दोनों के बीच अनुवाद वेक्टर लगभग [0; 0; 0]। तो सभी पंजीकरण सही ढंग से काम करने लगते हैं। हालांकि, जब मैं अपने आवेदन चलाने के लिए, मैं निम्नलिखित परिणाम प्राप्त:

Offset example 1

Offset example 2

आप देख सकते हैं, वहाँ एक अजीब वृद्धि में ऑफसेट। मैंने छवि पर विरूपण सुधार को हटाने की कोशिश की है (वर्तमान में cv::undistort() के साथ किया गया), लेकिन यह समस्या को और भी खराब कर देता है। घूर्णन सभी सही हैं और जैसा कि मैंने पहले कहा था, अनुवाद सभी ठीक लगते हैं। मैं इसके कारण क्या हो सकता है इसके लिए एक नुकसान में हूँ। निस्संदेह, प्रतिपादन पाइपलाइन के कार्यान्वयन के दौरान बहुत कुछ गलत हो सकता है, इसलिए मैं इसे उम्मीद के तहत यहां पोस्ट कर रहा हूं कि किसी ने भी इसी तरह के मुद्दे का अनुभव किया है। मैंने पहले ही इस प्रोजेक्ट को वेबकैम-आधारित ट्रैकिंग विधि का उपयोग करके किया है और इस तरह के कोई भी समस्या का अनुभव नहीं किया है, भले ही मैंने एक ही प्रतिपादन प्रक्रिया का उपयोग किया हो।

मैं इस पद में थोड़ा सा संदिग्ध रहा हूं ताकि स्थिति के अल्पसंख्यक के साथ पाठकों को दबाने से बच सकें क्योंकि इसमें कई अलग-अलग विवरण शामिल हो सकते हैं। यदि कोई और जानकारी की आवश्यकता है तो मैं इसे प्रदान कर सकता हूं। किसी भी सलाह या अंतर्दृष्टि की सराहना की जाएगी। धन्यवाद!

+0

आप कहते हैं "मान सही हैं", आपका क्या मतलब है बिल्कुल सही है? यह एक जटिल प्रसंस्करण श्रृंखला है, आपके द्वारा देखे जाने वाले ऑफ़सेट आपके मॉड्यूल में से एक या डिज़ाइन दोष में एक छोटी बग के कारण हो सकता है। बताने का एकमात्र तरीका है प्रत्येक मॉड्यूल (उदाहरण के लिए मार्कर ट्रैकर, कैमरा अंशांकन, पाइपलाइन प्रतिपादन, आदि) और अन्य मॉड्यूल के साथ एक दूसरे के एकीकरण का परीक्षण करना। – AldurDisciple

+0

मेरे पास एक डीबग विंडो में आउटपुट के रूप में प्रदर्शित अंतिम कैमरा ट्रांसफॉर्म मैट्रिक्स है। इसके बाद मैं वास्तविक मैट्रिक्स में कैमरे की मूल स्थिति के संबंध में किए गए भौतिक मापों के लिए इस मैट्रिक्स के परिवर्तन वेक्टर की तुलना करता हूं। ये परिवर्तन मूल्य विचलन की हमारी स्वीकार्य सीमा के भीतर हैं, उन श्रेणियों को हमारे पिछले सिस्टम द्वारा निर्धारित किया गया है जो सही तरीके से काम कर रहा है। तो संक्षेप में, दृश्य कैमरे की स्थिति को सेट करने के लिए उपयोग किया जाने वाला हमारा इनपुट सही लगता है, लेकिन पूरी तरह से सिस्टम काम नहीं करता है। – SwarthyMantooth

+0

यदि कैमरा प्रक्षेपण मैट्रिक्स सही है, तो यह शायद प्रतिपादन पाइपलाइन से संबंधित है। लेकिन फिर, इस तरह के ऑफसेट में कई कारण हो सकते हैं और इसे खोजने का सबसे अच्छा तरीका स्वतंत्र रूप से प्रत्येक भाग का परीक्षण करना है: उदा। मॉडल लोडिंग, पूर्वनिर्धारित 3 डी पॉइंट्स का प्रक्षेपण, पूर्वनिर्धारित कैमरा मैट्रिक्स का उपयोग करके मॉडल प्रतिपादन, – AldurDisciple

उत्तर

1

यहां कुछ परीक्षण हैं जो आप यह सत्यापित करने के लिए कर सकते हैं कि प्रत्येक मॉड्यूल अच्छी तरह से काम करता है।

  • चेक कि आभासी लेगो दृश्य के संबंध में आभासी दृश्य-मार्कर की स्थिति सही रूप असली दृश्य की स्थिति से मेल खाती है:

    सबसे पहले अपने बाह्य और आंतरिक calibrations की पुष्टि असली लेगो दृश्य के संबंध में मार्कर (उदाहरण के लिए वास्तविक दृश्य-मार्कर हो सकता है क्योंकि आपने पिछली बार अपनी स्थिति को माप लिया था)।

  • कैमरा-मार्कर के लिए वही है, जो आपने कैमरे ऑप्टिकल सेंटर के संबंध में अपनी स्थिति को आखिरी बार कैलिब्रेट कर दिया है।
  • जांचें कि कैमरे का अंशांकन अभी भी सटीक है। ऐसे कैमरे के लिए, फॉर्म का एक कैमरा मैट्रिक्स पसंद करें [एफएक्स, 0, सीएक्स; 0, एफई, साइ; 0,0,1] (यानी शून्य पर तय एक स्काई के साथ) और कैमरे विरूपण गुणांक का अनुमान लगाएं (एनबी: ओपनसीवी undistort फ़ंक्शंस गैर-शून्य स्कीज़ के साथ कैमरा मैट्रिक्स का समर्थन नहीं करते हैं; ऐसे मैट्रिस का उपयोग करके कोई अपवाद नहीं उठाया जा सकता है लेकिन परिणामस्वरूप गलत त्रुटियां हो सकती हैं)।
  • जांचें कि मार्कर ट्रैकर को पुन: संक्रमित करने की आवश्यकता नहीं है।

फिर प्रतिपादन पाइपलाइन को सत्यापित करें, उदा। कैमरे को ले जाने पर दृश्य-मार्कर कैमरे की छवि में सही तरीके से reprojects जांच कर।

  • इसे सही ढंग से पुनः प्रक्षेपित नहीं करता है, वहाँ शायद जिस तरह से आप ओपन प्रक्षेपण मैट्रिक्स में OpenCV कैमरा मैट्रिक्स मैप करते हैं, या जिस तरह से आप नक्शा OpenCV कैमरा के साथ ओपन मॉडल दृश्य मैट्रिक्स में मुद्रा के साथ एक त्रुटि है। सरल 3 डी अंक और सरल प्रक्षेपण और मॉडलव्यू मैट्रिस के साथ खिलौनों के उदाहरणों का उपयोग करके कौन सा गलत है यह निर्धारित करने का प्रयास करें।
  • यदि यह सही तरीके से reprojects, तो शायद एक अंशांकन समस्या है (ऊपर देखें)।

इसके अलावा, यह अनुमान करना मुश्किल है कि सिस्टम के साथ सीधे बातचीत किए बिना क्या गलत हो सकता है। अगर मैं आप थे और मुझे अभी भी पता नहीं था कि ऊपर दिए गए परीक्षण करने के बाद समस्या कहां हो सकती है, तो मैं स्क्रैच से वापस शुरू करने की कोशिश करता हूं और खिलौनों के उदाहरणों का उपयोग करके प्रत्येक मध्यवर्ती चरण को मान्य करता हूं।

+0

धन्यवाद एक गुच्छा! मैं इस सप्ताह इन परीक्षणों को चलाऊंगा और देख सकता हूं कि क्या आता है – SwarthyMantooth

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