2011-08-16 17 views
8

मैं ओपनसीवी में काम कर रहा हूं लेकिन मुझे नहीं लगता कि इसके लिए कोई फ़ंक्शन है। मैं एफ़िन ट्रांसफॉर्मेशन खोजने के लिए एक फ़ंक्शन पा सकता हूं, लेकिन एफ़िन ट्रांसफॉर्मेशन में स्केलिंग शामिल है, और मैं केवल रोटेशन + अनुवाद पर विचार करना चाहता हूं।केवल अनुवाद और रोटेशन का उपयोग करके 2 डी अंकों के एक सेट को संरेखित करें

कल्पना कीजिए कि मेरे पास 2 डी में अंक के दो सेट हैं - मान लें कि प्रत्येक सेट में बिल्कुल 50 अंक हैं।

उदा। सेट ए = {x1, y1, x2, y2, ..., x50, y50}

सेट बी = {x1 ', y1', x2 ', y2', ..., x50 ', y50'}

मैं रोटेशन और अनुवाद संयोजन ढूंढना चाहता हूं जो सेट बी पर सेट ए मैप करने के सबसे नज़दीकी हो जाता है। मुझे लगता है कि मैं बी में बी और संबंधित बिंदुओं के बीच औसत दूरी को कम करने के रूप में "निकटतम" परिभाषित करता हूं, औसत को कम करता है दूरी (x1, y1) और (x1 ', y1'), आदि

मुझे लगता है कि मैं सभी संभावित अनुवादों और घूर्णनों का परीक्षण करने के लिए ब्रूट फोर्स का उपयोग कर सकता हूं लेकिन यह बेहद अक्षम होगा। क्या किसी को एक आसान तरीका पता है?

धन्यवाद!

+0

क्या अंक के बीच एक-से-एक पत्राचार है? क्या वे वास्तव में एक ही बिंदु हैं और आपको बस परिवर्तन खोजने की जरूरत है? – phkahler

उत्तर

6

यह समस्या निकटता मैट्रिक्स (बिंदुओं के जोड़ों के बीच दूरी) के एकवचन मूल्य अपघटन के संदर्भ में एक बहुत ही सुरुचिपूर्ण समाधान है। इस नाम का नाम orthogonal Procrustes problem है, ग्रीक किंवदंती के बाद एक ऐसे साथी के बारे में जिसने यात्रियों को एक बिस्तर दिया जो किसी के लिए फिट होगा।

समाधान निकटतम ऑर्थोगोनल मैट्रिक्स को किसी दिए गए (आवश्यक रूप से ऑर्थोगोनल) मैट्रिक्स में खोजने से आता है।

+1

धन्यवाद। मैंने आपके उत्तर को पोस्ट करने के समय के आसपास एक ही समाधान पाया: http://en.wikipedia.org/wiki/Procrustes_analysis – Andrew

+2

@Andrew: यह एसवीडी का एक साफ/आश्चर्यजनक अनुप्रयोग है, ऐसा लगता है। पीटर Schonemann द्वारा समाधान मनोविज्ञान/सामाजिक विज्ञान में मीट्रिक परीक्षण करने के लिए एक आवेदन द्वारा प्रेरित किया गया था। यह सुनिश्चित करने के लिए कि क्या आप प्रतिबिंबों का उल्लंघन करना चाहते हैं (अनुवाद और घूर्णन के विपरीत), एकवचन मूल्यों का एक छोटा सा झुकाव आवश्यक है। – hardmath

0

जिस तरह से मैं एक्सेल में ऐसा करता हूं वह बिंदुओं का प्रतिनिधित्व करने वाले कुछ कॉलम बनाना है। एक सेट के घूर्णन/अनुवाद का प्रतिनिधित्व करने वाले कक्ष (घुमाए जाने और उनमें से दोनों का अनुवाद करने की आवश्यकता नहीं है)। फिर उन बिंदुओं का प्रतिनिधित्व करने वाले कॉलम घूर्णन/अनुवादित होते हैं।
फिर घूर्णन/अनुवादित बिंदुओं के बिंदुओं के बीच की दूरी के लिए एक और कॉलम।
फिर अंक के बीच की दूरी के योग का एक सेल। अंत में, रोटेशन और अनुवाद कक्षों को अनुकूलित करने के लिए सॉल्वर का उपयोग करें।

+0

आपके उत्तर के लिए धन्यवाद। मैं अनुवाद की गणना करने के लिए प्रत्येक सेट के लिए औसत बिंदु की गणना करके और फिर रोटेशन कोण को जानने के लिए इस पृष्ठ का उपयोग करके आवश्यक था, http://en.wikipedia.org/wiki/Procrustes_analysis – Andrew

0

यदि आप कुछ रोटेशन को ठीक करते हैं तो आप ternary search का उपयोग कर उत्तर प्राप्त कर सकते हैं। एक्स में खोज चलाएं और प्रत्येक परीक्षण एक्स के लिए सर्वोत्तम मूल्य प्राप्त करने के लिए इसे y में चलाएं। यह आपको सही उत्तर देगा क्योंकि फ़ंक्शन (संबंधित दूरी का योग) उत्तल है (यह किसी भी पंक्ति में फ़ंक्शन का प्रतिबंध एक आयामी उत्तल कार्य है, और अंतिम मानक तथ्य है: यह एक मानक तथ्य है: कई उत्तल कार्यों का योग उत्तल है)। कोण पर बलपूर्वक बल के बजाय मैं टर्नरी खोज के आधार पर ऐसी विधि का प्रस्ताव दे सकता हूं। कुछ बहुत बड़े चरण एस चुनें। प्रत्येक कोण के लिए लक्ष्य फ़ंक्शन की गणना करें (0, एस, 2 एस, ...)। फिर, यदि एस पर्याप्त छोटा है, तो हम कुछ सेगमेंट (iS, (i + 1) एस) को विचार से बाहर कर सकते हैं। अर्थात् कोणों के साथ काम के अपेक्षाकृत बड़े मूल्य वाले आईएस और (i + 1) एस। ध्यान से लागू किया जा रहा है यह एक जवाब दे सकता है और इसे बलपूर्वक बल से तेज कर सकता है।

+1

आपके उत्तर के लिए धन्यवाद । मैं अनुवाद की गणना करने के लिए प्रत्येक सेट के लिए औसत बिंदु की गणना करके और फिर रोटेशन कोण http: //en.wikipedia को समझने के लिए इस पृष्ठ का उपयोग करके मुझे आवश्यक करने में सक्षम था।संगठन/विकी/Procrustes_analysis – Andrew

+0

आपको एक-आयामी मामले में भी औसत बिंदु का उपयोग करके उत्तर के लिए कोई अच्छा अनुमान नहीं मिलेगा। उदाहरण के लिए: औसत 34 के साथ एक सेट (0, 2, 100), दूसरा 50 के साथ (0, 50, 100) है। चलने के बाद आपको (16, 18, 116) और 16 + 32 + 16 का परिणाम मिलेगा = 64। लेकिन अगर आप हिलते नहीं हैं तो आपको केवल 48 मिलेंगे। और विमान पर घूमने से भी यहां मदद नहीं मिलेगी। –

+0

@ सेर्गीबैंकविच: अनुवाद के रूप में माध्य का मतलब माध्य ** वर्ग ** दूरी को कम करता है, जो औसत दूरी – Eric

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