XNA के साथ, मैं एक साधारण आयत प्रदर्शित कर रहा हूं, जिसे फर्श पर पेश किया गया है। प्रोजेक्टर को एक मनमाने स्थान पर रखा जा सकता है। जाहिर है, अनुमानित आयत प्रोजेक्टर की स्थिति और कोण के अनुसार विकृत हो जाती है। एक काइनेट चार कोनों की तलाश में फर्श को स्कैन करता है। अब मेरा लक्ष्य मूल आयत को रूपांतरित करना है ताकि आयत को मूल रूप से पूर्व-वार करके प्रक्षेपण अब विकृत न हो।
मेरा पहला दृष्टिकोण 2 डी में सब कुछ करना था: पहले एक परिप्रेक्ष्य परिवर्तन की गणना करें (ओपनसीवी के उपयोग warpPerspective()
से) स्कैन किए गए बिंदुओं से आंतरिक आयत के बिंदुओं के साथ आयत पर उलटा लागू करें। यह काम करने लगा था, लेकिन यह बहुत धीमा था क्योंकि यह GPU पर प्रस्तुत नहीं किया जा सकता था।
XNA की रेंडरिंग सुविधाओं का उपयोग करने के लिए दूसरा तरीका 3 डी में सब कुछ करना था। सबसे पहले, मैं एक प्लेन प्रदर्शित करूंगा, किनेक्ट के साथ इसके कोनों को स्कैन करूँगा और प्राप्त 3 डी-पॉइंट को मूल प्लेन में मैप करूँगा। सैद्धांतिक रूप से, मैं विमान में परिप्रेक्ष्य परिवर्तन के व्युत्क्रम को लागू कर सकता था, जैसा कि मैंने 2 डी-एप्रोच में किया था। हालाँकि, चूंकि XNA एक दृश्य और प्रक्षेपण मैट्रिक्स के साथ काम करता है, मैं सिर्फ एक फ़ंक्शन को कॉल नहीं कर सकता warpPerspective()
और वांछित परिणाम प्राप्त कर सकता हूं । मुझे कैमरे के दृश्य और प्रक्षेपण मैट्रिक्स के लिए नए मापदंडों की गणना करने की आवश्यकता होगी।
प्रश्न: क्या इन मापदंडों की गणना करना और उन्हें दो मैट्रिसेस (दृश्य और प्रक्षेपण) में विभाजित करना संभव है? यदि नहीं, तो क्या मेरा एक और तरीका है?
warpPespective
? मैं OpenCV से परिचित नहीं हूं, लेकिन डॉक्टर को यह देखकर ऐसा लग रहा है कि यह फ़ंक्शन किसी छवि पर एक परिप्रेक्ष्य लागू करता है। या मैं भ्रमित हूँ? वैसे भी, शायद आपके पहले कार्यान्वयन पर अधिक विवरण जोड़ने से मदद मिलेगी।