एक प्वाइंट क्लाउड में प्रोफ़ाइल मिलान


14

के लिए एक समान यादृच्छिक फ़ंक्शन का उपयोग करके एक बिंदु क्लाउड उत्पन्न किया जाता है (x,y,z)। जैसा कि निम्नलिखित आंकड़े पर दिखाया गया है, एक फ्लैट इंटरसेक्टिंग प्लेन ( प्रोफ़ाइल ) की जांच की जा रही है जो बाएं कोने में दिए गए लक्ष्य के अनुसार सबसे अच्छा (भले ही सटीक नहीं) हो। तो सवाल यह है:

1- निम्नलिखित नोटों / शर्तों पर विचार करने के target 2D point mapमाध्यम से दिए गए इस तरह के मैच को कैसे point cloudखोजें?
2- तब क्या निर्देशांक / झुकाव / समानता की डिग्री आदि हैं?

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

नोट 2: एक सहिष्णुता मूल्य को प्रोफ़ाइल से बिंदुओं की दूरी माना जा सकता है। निम्न आकृति के लिए इसे प्रदर्शित करने के लिए 0.01सबसे छोटे आयाम को कई बार सहन करना (~1)चाहिए tol=0.01। इसलिए यदि हम बाकी को हटाते हैं और जांच की जा रही प्रोफ़ाइल के विमान पर शेष सभी बिंदुओं को प्रोजेक्ट करते हैं तो हम लक्ष्य प्रोफ़ाइल के साथ इसकी समानता की जांच करने में सक्षम होंगे।

नोट 3: एक संबंधित विषय बिंदु पैटर्न मान्यता पर पाया जा सकता है ।

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


@Developer Off विषय लेकिन आप उन भूखंडों को बनाने के लिए किस सॉफ्टवेयर का उपयोग कर रहे हैं?
Spacey

1
@ मोहम्मद मैं अपने शोध करने के लिए और रेखांकन आदि बनाने के लिए Python+ MatPlotLibका उपयोग करता हूं
डेवलपर

@ डिवर्टर फैंटास्टिक - यह पायथन के माध्यम से है, लेकिन उनका क्या अर्थ है 'पायथन शेल अला मतलाब'?
स्पेसी

बिंदु बादलों को कैसे संग्रहीत किया जाता है? प्रत्येक बिंदु के केंद्र के लिए निर्देशांक के रूप में या एक बड़ा डेटासेट के रूप में जो बिंदुओं के आसपास निर्देशांक में गैर-शून्य मान है?
एंडोलिथ

@endolith सभी बिंदुओं के रूप में संबंधित निर्देशांक हैं P:{x,y,z}। वे वास्तव में आयामहीन बिंदु हैं। हालांकि कुछ सन्निकटन के साथ उन्हें 3 डी सरणियों के रूप में एक-पिक्सेल आयाम से अलग किया जा सकता है। वे निर्देशांक पर अन्य विशेषताओं (जैसे वजन आदि) को भी शामिल कर सकते हैं।
डेवलपर

जवाबों:


4

इसके लिए हमेशा बहुत अधिक संगणना की आवश्यकता होती है, खासकर यदि आप 2000 से अधिक बिंदुओं को संसाधित करना चाहते हैं। मुझे यकीन है कि इस तरह के पैटर्न-मिलान के लिए पहले से ही अत्यधिक-अनुकूलित समाधान हैं, लेकिन आपको यह पता लगाना होगा कि उन्हें खोजने के लिए इसे क्या कहा जाता है।

चूंकि आप एक छवि के बजाय एक बिंदु क्लाउड (विरल डेटा) के बारे में बात कर रहे हैं, मेरी क्रॉस-सहसंबंध विधि वास्तव में लागू नहीं होती है (और कम्प्यूटेशनल रूप से भी बदतर होगी)। RANSAC जैसा कुछ शायद एक मैच जल्दी से मिल जाता है, लेकिन मुझे इसके बारे में ज्यादा जानकारी नहीं है।

एक समाधान में मेरा प्रयास:

मान्यताओं:

  • आप सबसे अच्छा मैच ढूंढना चाहते हैं, न कि केवल एक ढीला या "शायद सही" मैच
  • माप या गणना में शोर के कारण मिलान में कुछ छोटी मात्रा में त्रुटि होगी
  • स्रोत बिंदु कोप्लानर हैं
  • सभी स्रोत बिंदु लक्ष्य में होने चाहिए (= कोई भी बेजोड़ बिंदु पूरे प्रोफ़ाइल के लिए एक बेमेल है)

इसलिए आपको चीजों को अयोग्य घोषित करके और गणना समय में कमी करके बहुत सारे शॉर्टकट लेने में सक्षम होना चाहिए। संक्षेप में:

  1. स्रोत से तीन अंक चुनें
  2. एक ही आकार के साथ 3 बिंदुओं के सेट को खोजने, लक्ष्य बिंदुओं के माध्यम से खोज
  3. जब 3 बिंदुओं का एक मैच मिलता है, तो विमान में अन्य सभी बिंदुओं की जांच करें कि वे यह देखने के लिए परिभाषित करते हैं कि क्या वे एक करीबी मैच हैं
  4. यदि सभी बिंदुओं का एक से अधिक मिलान पाया जाता है, तो सबसे छोटी 3D त्रुटि वाली राशि चुनें

और जानकारी:

pick a point from the source for testing s1 = (x1, y1)
Find nearest point in source s2 = (x2, y2)
d12 = (x1-x2)^2 + (y1-y2)^2
Find second nearest point in source s3 = (x3, y3)
d13 = (x1-x3)^2 + (y1-y3)^2
d23 = (x2-x3)^2 + (y2-y3)^2

for all (x,y,z) test points t1 in target:
    # imagine s1 and t1 are coincident
    for all other points t2 in target:
        if distance from test point > d12:    
            break out of loop and try another t2 point
        if distance ≈ d12:
            # imagine source is now rotated so that s1 and s2 are collinear with t1 and t2
            for all other points t3 in target:
                if distance from t1 > d13 or from t2 > d23:
                    break and try another t3
                if distance from t1 ≈ d13 and from t2 ≈ d23:
                    # Now you've found matching triangles in source and target
                    # align source so that s1, s2, s3 are coplanar with t1, t2, t3
                    project all source points onto this target plane 
                    for all other points in source:
                        find nearest point in target
                        measure distance from source point to target point
                        if it's not within a threshold:
                            break and try a new t3
                        else:
                            sum errors of all matched points for this configuration (defined by t1, t2, t3)

जो भी विन्यास अन्य सभी बिंदुओं के लिए कम से कम चुकता त्रुटि सबसे अच्छा मैच है

चूंकि हम 3 निकटतम पड़ोसी परीक्षण बिंदुओं के साथ काम कर रहे हैं, अगर वे कुछ त्रिज्या के भीतर हैं, तो लक्ष्य बिंदुओं के मिलान को सरल बनाया जा सकता है। उदाहरण के लिए, 1 (0, 0) के त्रिज्या की खोज करने पर, हम वास्तविक यूक्लिडियन दूरी की गणना किए बिना, इसे थोड़ा सा गति देने के लिए, X1 - x2 पर आधारित (2, 0) को अयोग्य घोषित कर सकते हैं। यह मानता है कि घटाव गुणा से अधिक तेज है। कर रहे हैं और अधिक मनमाना तय त्रिज्या के आधार पर अनुकूलित खोजों , भी।

function is_closer_than(x1, y1, z1, x2, y2, z2, distance):
    if abs(x1 - x2) or abs(y1 - y2) or abs(z1 - z2) > distance:
        return False
    return (x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2 > distance^2 # sqrt is slow

=(एक्स1-एक्स2)2+(y1-y2)2+(z1-z2)2

(20002)

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

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


1
आपके उत्तर में पहला हिस्सा वास्तव में एक ब्रूट-फोर्स विधि है जो पॉइंट क्लाउड के माध्यम से सभी संभावित विमानों के आस-पास के बिंदुओं (एक सीमा के संबंध में गिनती) की मांग करता है। यह अत्यंत संगणकीय गहन उदाहरण है, केवल २००० अंकों के लिए २,६६२,६६ ) ,०००,००० (फॉर्मूला) दूरी की गणना की आवश्यकता होगी!
डेवलपर

@ डेवलपर: हाँ, यह बहुत सारी गणनाएँ लेने जा रहा है, खासकर यदि आपके पास हजारों अंक हैं। हां, 2000 अंकों के लिए, यदि आपको कोई विमान नहीं मिलता है, तो आप 2,658,673,998,000 गणनाएँ करेंगे। संभवत: आपको विमान मिल जाएंगे , हालांकि, यह समय कम कर देगा क्योंकि यह पर्याप्त अंक मिलते ही रुक जाता है। लेकिन वैसे भी, मैं इस बारे में सोच रहा था और शायद एक बेहतर विचार है, और मैं जवाब बदल दूंगा।
एंडोलिथ

1
आपने बिल्कुल सही बात कही। बस यह जोड़ने के लिए कि रोकने के मानदंड उपयुक्त विमान खोजने के बाद भी लागू नहीं हो सकते हैं, जबकि यह हो सकता है कि बहुत बेहतर मिलान हो, इसलिए सभी संभावित विमानों की जांच की जानी चाहिए। मैंने पहले से ही इस विचार को लागू कर दिया है और यहां तक ​​कि अंकों के साथ Fortranसंख्याओं की सहायता से पाया है कि 500पीसी के साथ अनुभव होना असंभव है।
डेवलपर

2

मैं RANSAC के बगल में वैकल्पिक समाधान पर @ mirror2image विवरण जोड़ूंगा, आप ICP एल्गोरिथ्म (पुनरावृत्त निकटतम बिंदु) पर विचार कर सकते हैं, एक विवरण यहां पाया जा सकता है !

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

अपडेट करें:

सरलीकृत रूप में चरण हैं:

  1. प्रत्येक इनपुट बिंदु के लिए निकटतम बिंदु खोजें।
  2. इनपुट से लक्ष्य के लिए रूपांतरण की गणना करें, और फिर परिवर्तन का उपयोग करके इनपुट बिंदुओं को स्थानांतरित करें।
  3. समानता फ़ंक्शन की गणना करें (उदाहरण के लिए प्रत्येक इनपुट बिंदु के लिए दूरी अपने संबंधित जोड़ी लक्ष्य बिंदु के लिए wrt)।
  4. रोकने की स्थिति की जाँच करें।

चरण 1-4 में फेरबदल करें।

उपलब्ध पुस्तकालय है कि आप यहाँ पर विचार कर सकते हैं ! (मैंने अभी तक इसकी कोशिश नहीं की है), पंजीकरण भाग पर एक अनुभाग है (अन्य विधियों सहित)।


लिंक और सुझाव के लिए धन्यवाद। इस तरह के उपयोगी विचार हमें नौसिखिया शोधकर्ताओं के रूप में हमेशा चीज़ को जल्दी सीखने में मदद करते हैं। मैं हमेशा अधिक स्पष्टीकरण की सराहना करता हूं।
डेवलपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.