2009-03-04 17 views
9

मैं वर्तमान में ओपनसीवी और क्यूटी का उपयोग कर सॉफ़्टवेयर का एक टुकड़ा विकसित कर रहा हूं जो डेटा पॉइंट प्लॉट करता है। मुझे अपूर्ण डेटा से एक छवि में भरने में सक्षम होना चाहिए। मैं अपने अंक के बीच अंतर करना चाहता हूं। क्या कोई लाइब्रेरी या फ़ंक्शन सुझा सकता है जो मेरी मदद कर सकता है। मैंने सोचा कि ओपनसीवी रीमैप विधि शायद मुझे काम करने के लिए प्रतीत नहीं होता है।डेटा बिंदुओं के बीच अंतर कैसे करें?

डेटा तीव्रता मानों का 2-डी मैट्रिक्स है। मैं किसी तरह की एक छवि बनाना चाहता हूँ। यह एक स्कूल परियोजना है।

+0

अतिरिक्त जानकारी आवश्यक: यह किस प्रकार का डेटा है? क्या आप वक्र की प्रकृति के बारे में कुछ बता सकते हैं (यानी वे कैसे दिखते हैं?) – Rook

+0

डेटा तीव्रता मानों का 2-डी मैट्रिक्स है। मैं किसी तरह की एक छवि बनाना चाहता हूँ। यह एक स्कूल परियोजना है। – Sam

+0

तो मूल रूप से नीचे दिए गए उत्तरों में से कोई भी लाइब्रेरी या फ़ंक्शन का सुझाव देने के प्रश्न का उत्तर नहीं दिया .... क्योंकि मेरे पास ओप के समान सटीक समस्या है। – bakalolo

उत्तर

7

पुhew! बड़ा विषय

"दाएं" उत्तर आपकी समस्या डोमेन पर बहुत पर निर्भर करता है और आप जो कर रहे हैं उसके विभिन्न विवरण।

1 से अधिक आयामों में इंटरपोलेट करने के लिए कुछ विकल्प बनाना आवश्यक है। मुझे लगता है कि आप नियमित ग्रिड पर साजिश कर रहे हैं, लेकिन आपके कुछ ग्रिड पॉइंट्स में कोई डेटा नहीं है। बड़ा सवाल: क्या लापता अंक स्पैस हैं, या वे बड़े ब्लब्स बनाते हैं?

आप , जानकारी जोड़ नहीं कर सकते हैं, ताकि आप केवल कुछ है कि दिखेगा ठीक स्थापित करने के लिए कोशिश कर रहे हैं।

वैचारिक सरल सुझाव (लेकिन कार्यान्वयन कुछ काम हो सकता है):

गायब डेटा पर प्रत्येक क्षेत्र के लिए, सभी किनारे बिंदुओं की पहचान। यही कारण है कि जहां। के अंक डेटा गुम है, और एक्स के और डेटा ओ के कर रहे हैं (एक भी लापता बिंदु के लिए, यह चार निकटतम पड़ोसियों हो जाएगा) यह आंकड़ा

oooxxooo 
oox..xoo 
oox...xo 
ox..xxoo 
oox.xooo 
oooxoooo 

में एक्स के लगता है। इस ब्लॉब के चारों ओर किनारे के बिंदुओं पर औसत के साथ प्रत्येक लापता डेटा बिंदु भरें।

में: यह चिकनी, वजन 1/d द्वारा प्रत्येक बिंदु जहाँ d दो अंक के बीच taxidriver दूरी (डेल्टा x + डेल्टा वाई) है इससे पहले कि हम किसी भी जानकारी के लिए किया था से बनाने के लिए ..


उस तरह की जानकारी की अनुपस्थिति, क्या आपने सीधे आगे की रैखिक इंटरपोलेशन की कोशिश की है? यदि आपका डेटा उचित रूप से घना है तो यह आपके लिए ऐसा कर सकता है, और जब आपको इसकी आवश्यकता होती है तो ऑनलाइन कोड को कोड करना पर्याप्त होता है।

अगला चरण आमतौर पर एक क्यूबिक स्पलीन होता है, लेकिन इसके लिए आप शायद मौजूदा कार्यान्वयन को पकड़ना चाहते हैं।


जब मैं एक त्वरित रैखिक प्रक्षेप तुलना में अधिक शक्तिशाली कुछ चाहिए, मैं आमतौर पर ROOT का उपयोग करें (और TSpline वर्गों में से एक चुन सकते हैं), लेकिन यह अधिक भूमि के ऊपर से आप की जरूरत हो सकता है।

टिप्पणी में बताया गया है, जड़ बड़ा है, और यह तेजी से है, जबकि, यह चीजों को जड़ तरीके से करना आप के लिए मजबूर करने की कोशिश करता है, तो यह अपने कार्यक्रम पर एक बड़ा प्रभाव हो सकता है।


(x2, y2) (या वास्तव में से एक्सट्रपलेशन) दो अंक (x1, y1) और के बीच एक रैखिक प्रक्षेप आप

y_i = (x_i-x1)*(y2-y1)/(x2-x1) 
+0

रूट एक ऊपरी ओवरहेड राशि है। और वास्तव में इसे संकलित करने के बजाय दुभाषिया के माध्यम से चलाने के लिए नहीं है? –

+0

बहुत सारे ओवरहेड: हाँ। सिंट का उपयोग करने की आवश्यकता है: नहीं (मैं इसके खिलाफ सामान संकलित करना पसंद करता हूं)। और मैं एक कण भौतिक विज्ञानी हूं, इसलिए मैंने इसे पहले से ही स्थापित किया है और इसे अच्छी तरह से जानते हैं ... – dmckee

+0

आपका उत्तर काफी सटीक है जो मैं ढूंढ रहा हूं, लेकिन मैं इसे स्वयं लागू नहीं करूँगा, क्या कोई सी ++ लाइब्रेरी है मैं इस तरह के परिणाम प्राप्त करने के लिए उपयोग कर सकता था? – Sam

0

अगर मैं समझता हूँ कि अपनी जरूरत के रूप में निम्नानुसार है देता है।

मैं तुम्हें एक्स, वाई, डब्ल्यू द्वारा एल के एक आयाम के लिए तीव्रता का एक सबसेट है लगता है और आप 0 से एल और वाई 0 से डब्ल्यू

को

इस अगर लेकर को लेकर सभी एक्स के लिए भरना चाहते हैं आपका सवाल है, तो समाधान फ़िल्टर का उपयोग करके अन्य तीव्रता प्राप्त करना है।

मुझे लगता है कि बेयर फ़िल्टर या गाऊसी फ़िल्टर आपके लिए काम करेगा।

आप इन फ़िल्टरों को Google कर सकते हैं और आपको लागू करने के लिए उत्तर मिलेंगे।

शुभकामनाएं।

12

इंटरपोलेशन एक जटिल विषय है। अंक के एक सेट को अलग करने के असीम तरीके हैं, और यह मानते हुए कि आप वास्तव में इंटरपोलेशन करना चाहते हैं, और किसी भी प्रकार की चिकनाई नहीं करना चाहते हैं। (एक इंटरपोलेंट मूल डेटा बिंदुओं को बिल्कुल पुन: उत्पन्न करता है।) और निश्चित रूप से, इस समस्या की 2-डी प्रकृति चीजों को और अधिक कठिन बनाती है।

2-डी में बिखरे हुए डेटा के इंटरपोलेशन के लिए कई आम योजनाएं हैं। असल में, जिनके पास इसका उपयोग है, उनके लिए एक बहुत अच्छा पेपर उपलब्ध है (रिचर्ड फ्रैंक, "बिखरी हुई डेटा इंटरपोलेशन: कुछ विधियों के टेस्ट", गणित के गणित, 1 9 82.)

शायद सबसे आम विधि का उपयोग किया जाता है आपके डेटा के त्रिकोण पर। केवल अपने डेटा बिंदुओं से डोमेन का एक त्रिकोण बनाओ। फिर डेटा के उत्तल ढक्कन के अंदर किसी भी बिंदु को त्रिकोणों में से एक के अंदर झूठ बोलना चाहिए, या यह एक साझा किनारे पर होगा। यह आपको त्रिभुज के अंदर रैखिक रूप से अंतरण करने की अनुमति देता है। यदि आप MATLAB का उपयोग कर रहे हैं, तो फ़ंक्शन griddata इस व्यक्त उद्देश्य के लिए उपलब्ध है।)

बिखरे हुए बिंदुओं से एक पूर्ण आयताकार छवि को पॉप्युलेट करने का प्रयास करते समय समस्या यह है कि डेटा 4 कोनों तक विस्तारित नहीं होता है सरणी। उस घटना में, त्रिभुज आधारित योजना विफल हो जाएगी, क्योंकि सरणी के कोनों बिखरे हुए बिंदुओं के उत्तल ढक्कन के अंदर नहीं झूठ बोलते हैं। तब एक विकल्प "रेडियल आधार फ़ंक्शंस" (अक्सर संक्षेप में आरबीएफ) का उपयोग करना है। भूगर्भीय समुदाय द्वारा उपयोग किए जाने पर क्रिगिंग समेत ऐसी कई योजनाएं पाई जा सकती हैं।

http://en.wikipedia.org/wiki/Kriging

अंत में, inpainting प्रक्षेप की एक योजना है, जहां तत्वों एक सरणी में दिए गए हैं के लिए नाम है, लेकिन जहां लापता तत्व हैं। नाम स्पष्ट रूप से उस कला संरक्षक द्वारा किया जाता है जिसे आर्टवर्क के एक मूल्यवान टुकड़े में एक आंसू या चीर की मरम्मत की आवश्यकता होती है।

http://en.wikipedia.org/wiki/Inpainting

inpainting के पीछे विचार यह एक सीमा मान समस्या तैयार करने के लिए आम तौर पर है। यही है, उस क्षेत्र पर आंशिक अंतर समीकरण परिभाषित करें जहां एक छेद है। ज्ञात सीमा मानों का उपयोग करके, अज्ञात तत्वों के लिए पीडीई को हल करके छेद भरें। यदि बड़ी संख्या में अज्ञात तत्व हैं, तो यह कम्प्यूटेशनल रूप से गहन हो सकता है, क्योंकि इसे आम तौर पर रैखिक समीकरणों की कम से कम एक विशाल स्पैस प्रणाली के समाधान की आवश्यकता होती है। यदि पीडीई एक nonlinear एक है, तो यह अभी तक एक और गहन समस्या बन जाता है।पीडीई के लिए एक सरल, उचित रूप से अच्छी पसंद लैपलियान है, जिसके परिणामस्वरूप एक रैखिक प्रणाली होती है जो अच्छी तरह से बाहर निकलती है। फिर से, मैं MATLAB उपयोगकर्ता के लिए समाधान प्रदान कर सकता हूं। PDE के लिए

http://www.mathworks.com/matlabcentral/fileexchange/4551

बेहतर विकल्प nonlinear PDEs से आ सकती है। एक बार यह नौसेना/स्टोक्स समीकरण है। यह आम तौर पर देखी जाने वाली सतहों के प्रकारों को मॉडलिंग के लिए उपयुक्त है, लेकिन इससे निपटना भी मुश्किल है। जीवन के कई पहलुओं के रूप में, आप जो भुगतान करते हैं वह आपको मिलता है।

1

इस पर विचार के लिए एक सरल स्कूल परियोजना, लागू करने के लिए शायद सबसे आसान प्रक्षेप तकनीक है कि "निकटतम पड़ोसियों"

प्रत्येक लापता डेटा के लिए आप निकटतम "भरा" डेटा बिंदु खोजने के लिए और है कि के रूप में मान का उपयोग इशारा करते हैं।

यदि आप कुछ और अधिक रिटल्ट्स को बेहतर बनाना चाहते हैं, तो आप कह सकते हैं, के निकटतम डेटा पॉइंट ढूंढ सकते हैं, और अपने लापता औसत बिंदु के मूल्य के रूप में अपने भारित औसत का उपयोग कर सकते हैं।

वजन गुम डेटा बिंदु से बिंदु की दूरी के समान आनुपातिक हो सकता है।

ज़िलियन अन्य तकनीकें हैं, लेकिन निकटतम पड़ोसी शायद लागू करने के लिए सबसे आसान है।

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