2011-09-01 11 views
5

मेरे पास 3 डी डेटा पॉइंट्स का एक बड़ा सेट है जिसमें मैं एलीपसॉइड में फिट होना चाहता हूं।3 डी डेटा पॉइंट्स पर एक एलीपसॉइड फ़िट करना

मेरे गणित बहुत खराब हैं, इसलिए मुझे किसी भी गणित पुस्तकालयों के बिना कम से कम वर्ग विधि लागू करने में समस्या हो रही है।

क्या किसी को पता है कि कोड का एक टुकड़ा है या उस डेटा पर एक इलिप्सिड फिट कर सकता है जिसे मैं सीधे अपनी परियोजना में प्लग कर सकता हूं? सी में सबसे अच्छा होगा, लेकिन सी ++, जावा, सी #, पायथन इत्यादि से कनवर्ट करने के लिए मुझे कोई समस्या नहीं होनी चाहिए

संपादित करें: बस केंद्र ढूंढने में सक्षम होना भी एक बड़ी मदद होगी। ध्यान दें कि अंक समान रूप से दूरी पर नहीं हैं इसलिए मतलब लेने से केंद्र में नतीजा नहीं होगा।

+1

आप अपने अंकों दीर्घवृत्ताभ की सतह पर गिर करने की उम्मीद है या आप अपने अंक एक ellipsoidal बादल में होने की उम्मीद कर रहे हैं? – ellisbben

+1

क्या इलिप्सिड घुमाया जा सकता है? – Prcela

+0

मुझे उम्मीद है कि वे एक इलिप्सिड की सतह पर गिरने की उम्मीद करते हैं, इसलिए केंद्र खोखला है। – Hannesh

उत्तर

1

Least Squares डेटा फिटिंग शायद एक अच्छी पद्धति है जो आपके द्वारा वर्णित डेटा की प्रकृति देती है। GNU Scientific Library में linear और non-linear कम से कम डेटा फिटिंग दिनचर्या शामिल हैं। आपके मामले में, आप अपने डेटा को रैखिक स्थान में बदलने और रैखिक कम-वर्गों का उपयोग करने में सक्षम हो सकते हैं, लेकिन यह आपके वास्तविक उपयोग मामले पर निर्भर करेगा। अन्यथा, आपको गैर-रैखिक विधियों का उपयोग करने की आवश्यकता होगी।

0

मुझे एक विचार है। लगभग समाधान, सर्वोत्तम नहीं बल्कि अंदर अंक रखेंगे। एक्सवाई विमान में त्रिज्या आर 1 मिलता है जो सभी बिंदुओं को प्राप्त करेगा। एक्सजेड प्लेन (आर 2) और वाईजेड प्लेन (आर 3) के लिए वही करें। फिर प्रत्येक अक्ष पर maximums का उपयोग करें। ए = अधिकतम (आर 1, आर 2), बी = अधिकतम (आर 1, आर 3) और सी = अधिकतम (आर 2, आर 3)। लेकिन, सबसे पहले सभी बिंदुओं का औसत (केंद्र) ढूंढें और इसे मूल रूप से संरेखित करें।

+0

यही वह है जो मैं अब तक कर रहा हूं। समस्या यह है कि यह वास्तविक इलिप्सिड की वास्तविक अधिकतम नहीं पाती है। इसके अलावा, मैं चाहता हूं कि सभी बिंदुओं का औसत केंद्र था! लेकिन यह केवल तभी काम करता है जब अंक सतह पर समान रूप से वितरित किए जाते हैं। – Hannesh

+0

अच्छा, यह इतना अच्छा विचार नहीं है। :) यह पहली पल में दिखने से कहीं अधिक जटिल है। – Prcela

2

यदि आप न्यूनतम वॉल्यूम संलग्न एलीपसॉइड चाहते हैं, तो bounding ellipsoid के लिए यह SO उत्तर देखें।

यदि आप कम से कम वर्ग में सबसे अच्छा फिटिंग अंडाकार चाहते हैं, तो error ellipsoids के लिए यह MATLAB कोड देखें जहां आपको अपने औसत स्थानांतरित 3 डी बिंदुओं का कॉन्वर्सिस मैट्रिक्स मिलता है और इसका उपयोग इलिप्सिड बनाने के लिए किया जाता है।

6
यहाँ

तुम जाओ:

इस पत्र कई आयामों के लिए एक दीर्घवृत्ताभ फिटिंग का वर्णन के रूप में अच्छी तरह से के रूप में ellipois के लिए केंद्र की खोज। आशा है कि इस मदद करता है,

http://www.physics.smu.edu/~scalise/SMUpreprints/SMU-HEP-10-14.pdf

(btw, मैं इस सवाल का जवाब यह सोचते हैं रहा हूँ थोड़ी देर हो चुकी है, लेकिन मुझे लगता है मैं किसी को जो एक ही बात के लिए खोज में अपने प्रश्न भर में ठोकर के लिए इस समाधान जोड़ना होगा लगा :)

1

मुझे एक इलिप्सिड फिट करने के लिए एक अच्छा जावा आधारित एल्गोरिदम नहीं मिला, इसलिए मैंने इसे स्वयं लिखना समाप्त कर दिया। 2 डी बिंदुओं के साथ एक अंडाकार के लिए कुछ अच्छे एल्गोरिदम थे, लेकिन 3 डी बिंदुओं के साथ एक एलीपसॉइड के लिए नहीं। मैंने कुछ अलग MATLAB स्क्रिप्ट के साथ प्रयोग किया और अंततः यूरी पेट्रोव के इलिप्सिड फिट पर बस गया। यह polynomial एक्स^2 + द्वारा^2 + Cz^2 + 2Dxy + 2Exz + 2Fyz + 2Gx + 2Hy + 2Iz = 1. के लिए एक इलिप्सिड फिट बैठता है। 1. यह किसी भी बाधाओं का उपयोग किसी इलिप्सिड को मजबूर करने के लिए नहीं करता है, इसलिए आपको होना चाहिए इलिप्सिड के बजाय फिट होने से यादृच्छिक क्वार्डिक को रोकने के लिए काफी बड़ी संख्या में अंक। इसके अलावा, यह वास्तव में अच्छी तरह से काम करता है। मैंने अपाचे कॉमन्स मैथ का उपयोग करके एक छोटी जावा लाइब्रेरी लिखी जो जावा में यूरी पेट्रोव की स्क्रिप्ट लागू करता है। जीआईटी भंडार https://github.com/BokiSoft/EllipsoidFit पर पाया जा सकता है।

0

0

मैं सिर्फ एक ही प्रक्रिया के माध्यम से चले गए हैं। यहां एक पायथन मॉड्यूल है जो निमा मोशताघ द्वारा काम पर आधारित है।कई स्थानों पर संदर्भित है लेकिन इस प्रश्न में Bounding ellipse

यह मॉड्यूल अंतिम इलिप्सिड की साजिश को भी संभालता है। का आनंद लें!

https://github.com/minillinim/ellipsoid/blob/master/ellipsoid.py

0

मैं कुछ समय पहले फिटर जावा के लिए यूरी पेत्रोव के कम से कम वर्गों मैटलैब पोर्ट, यह केवल जामा जरूरत: https://github.com/mdoube/BoneJ/blob/master/src/org/doube/geometry/FitEllipsoid.java

+0

आपको मूल मैटलैब स्रोत के साथ-साथ जैमा के लिए लिंक/स्पष्टीकरण भी शामिल करना चाहिए, क्योंकि सवाल बताता है कि जावा कोड को सी –

+0

पर पोर्टेबल होना चाहिए। निश्चित: मैटलैब स्रोत http://www.mathworks.com/matlabcentral/fileexchange/24693-ellipsoid-fit – mdoube

+0

जामा जावा मैट्रिक्स लाइब्रेरी है - इसी तरह के पुस्तकालय सी/सी ++ के लिए मौजूद होना चाहिए http://math.nist.gov/javanumerics/jama/ – mdoube

1

हम मैटलैब और जावा कोड का एक सेट विकसित यहाँ ellipsoids फिट करने के लिए: https://github.com/pierre-weiss

आप हमारी ओपन-सोर्स आईसी प्लगइन भी देख सकते हैं। निम्नलिखित ट्यूटोरियल सहायक हो सकता है: https://www.youtube.com/endscreen?video_referrer=watch&v=nXnPOG_YCxw

नोट: मौजूदा कोडों में से अधिकांश सामान्य जेनेरिक क्वाड्रिक फिट करते हैं और एक एलीस्पोसाइड आकार लागू नहीं करते हैं। अधिक मजबूती पाने के लिए, आपको केवल रैखिक बीजगणित की बजाय उत्तल प्रोग्रामिंग पर जाना होगा। यह संकेत स्रोतों में किया जाता है।

चीयर्स, पियरे

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