कीस्टोन के 3 डी-पॉइंट का उपयोग करके कीस्टोन सुधार


15

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

मेरा पहला दृष्टिकोण 2 डी में सब कुछ करना था: पहले एक परिप्रेक्ष्य परिवर्तन की गणना करें (ओपनसीवी के उपयोग warpPerspective()से) स्कैन किए गए बिंदुओं से आंतरिक आयत के बिंदुओं के साथ आयत पर उलटा लागू करें। यह काम करने लगा था, लेकिन यह बहुत धीमा था क्योंकि यह GPU पर प्रस्तुत नहीं किया जा सकता था।

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

प्रश्न: क्या इन मापदंडों की गणना करना और उन्हें दो मैट्रिसेस (दृश्य और प्रक्षेपण) में विभाजित करना संभव है? यदि नहीं, तो क्या मेरा एक और तरीका है?


1
XNA एक व्यू और प्रोजेक्शन मैट्रिक्स का उपयोग करता है, लेकिन मुझे लगता है कि अंतिम परिणाम = वेक्टर * व्यू * प्रोजेक्शन। एक पहचान मैट्रिक्स को देखने और उलटा परिप्रेक्ष्य मैट्रिक्स को लॉन्च करने और यह देखने के लिए प्रयास क्यों न करें कि क्या काम करता है? (100% निश्चित नहीं है कि वास्तव में ऐसा ही होता है)
रॉय टी।

1
आपने वास्तव में एक परिप्रेक्ष्य परिवर्तन की गणना कैसे की warpPespective? मैं OpenCV से परिचित नहीं हूं, लेकिन डॉक्टर को यह देखकर ऐसा लग रहा है कि यह फ़ंक्शन किसी छवि पर एक परिप्रेक्ष्य लागू करता है। या मैं भ्रमित हूँ? वैसे भी, शायद आपके पहले कार्यान्वयन पर अधिक विवरण जोड़ने से मदद मिलेगी।
लॉरेंट कौविदो

आप PCL लाइब्रेरी ( pointclouds.org ) पर एक नज़र डालना चाहते हैं । किनेक्ट से गहराई की छवि को बदलना आपको मूल बिंदु पर कैमरे के साथ एक बिंदु बादल देता है, जो z अक्ष के साथ इंगित होता है। फिर आप विमान की खोज करने के लिए रैंसैक या किसी अन्य एल्गोरिदम का उपयोग कर सकते हैं।
22

जवाबों:


1

चूंकि वेक्टर बीजगणित GPU के अनुकूल है, इसलिए सामान्य विमान और डॉट उत्पादों का उपयोग मूल विमान के चार कोनों को खोजने के लिए किया जा सकता है:

यहाँ छवि विवरण दर्ज करें

प्रोजेक्टर पॉइंट (P), अनुमानित बिंदु (B) को देखते हुए, विमान पर एक मनमाना बिंदु जिसमें विकृत आयत (Q), और उस विमान के सामान्य वेक्टर (n), चौराहे का बिंदु (A) है P से B तक की रेखा और विमान द्वारा दी गई है

s = -dot_product(n, P - Q) / dot_product(n, normalized(B - P)) 
A = P + s * normalized(B-P)

स्रोत http://geomalgorithms.com/a05-_intersect-1.html अनुभाग लाइन-प्लेन इंटरसेक्शन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.