2011-05-26 14 views
11

सामान्य: मुझे उम्मीद है कि मैं जिस मामले का वर्णन करने जा रहा हूं वह एक ऑप्टिकल प्रवाह समस्या का एक साधारण मामला है और क्योंकि मुझे इस विषय पर ज्यादा ज्ञान नहीं है, मैं यह सोच रहा था कि किसी के पास कोई समस्या है कि मैं अपनी समस्या को हल करने के तरीके से कैसे संपर्क कर सकता हूं।ऑप्टिकल प्रवाह

रिसर्च मैं पहले से ही किया है: मैं High Accuracy Optical Flow Estimation Based on a Theory for Warping कागज पढ़ना शुरू किया है और Particle Video कागज को देखने पर योजना बना रहा हूँ। मुझे ऑप्टिकल प्रवाह के MATLAB High Accuracy Optical Flow कार्यान्वयन मिला है। हालांकि, कागजात (और कोड) अवधारणाओं का वर्णन करने लगते हैं जो बहुत शामिल हैं और मुझे खोदने और समझने के लिए बहुत समय की आवश्यकता हो सकती है। मुझे आशा है कि मेरी समस्या का समाधान अधिक सरल हो सकता है।

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

प्रत्येक छवि में, कुछ क्रैक हो सकते हैं जो अभी उभर रहे हैं और/या कुछ दरारें पूरी तरह से बनाई गई हैं (और इस प्रकार एक टुकड़ा बनाया गया है)। ब्रेकेज प्रक्रिया के दौरान, कुछ टुकड़े अलग हो सकते हैं और आगे तोड़ सकते हैं। टुकड़े एक दूसरे से आगे भी आगे बढ़ सकते हैं (परिवर्तन बाद के फ्रेम के बीच मामूली है)।

वांछित आउटपुट: अनुक्रम में सभी क्रैक/रेखा अनुक्रम में पहली छवि में मैप किए गए हैं।

अतिरिक्त नोट्स: छवियाँ (अर्थात मूल) द्विपदीय प्रारूप, जहां दरारें सफेद में उल्लिखित किया गया है में ग्रेस्केल प्रारूप में उपलब्ध है और साथ ही कर रहे हैं और पृष्ठभूमि पूरी तरह से काला है। कुछ छवि उदाहरणों के लिए नीचे देखें।

orig_img1 orig_img2 orig_img3

binary_img1 binary_img2 binary_img3

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

एक अनुक्रम में आमतौर पर लगभग 30 ~ 40 छवियां होती हैं, इसलिए मैंने अभी शुरुआत शुरुआत की है। साथ ही, हालांकि ये छवियां इसे नहीं दिखाती हैं, यह संभव है कि एक विशेष छवि में केवल क्रैक की शुरुआत हो (यानी इसकी प्रारंभिक उपस्थिति) और बाद की छवियों में यह अधिक लंबा हो और अन्य दरारों के साथ जुड़ सके।

भाषा: हालांकि आवश्यक नहीं है, मैं MATLAB का उपयोग करके समाधान को कार्यान्वित करना चाहता हूं (सिर्फ इसलिए कि प्रोजेक्ट से संबंधित अन्य कोड MATLAB में किया गया है)। हालांकि, अगर ओपनसीवी आसान हो सकता है, तो मैं अपनी भाषा/लाइब्रेरी उपयोग में लचीला हूं।

किसी भी विचार की बहुत सराहना की जाती है।

+2

ऑप्टिकल प्रवाह आपको काले और सफेद छवियों के लिए सार्थक परिणाम नहीं देगा। साथ ही, आपकी समस्या underspecified है - आपका वांछित आउटपुट क्या है? और हमेशा के रूप में, नमूना छवियों निश्चित रूप से सेटिंग को समझने में मदद करेंगे। – etarion

+0

अंतिम छवि वांछित आउटपुट क्यों नहीं है? क्या टुकड़े एक-दूसरे के अंतराल को बढ़ा सकते हैं? – Andrey

+1

कृपया छवियां प्रदान करें। सामान्य रूप से एल्गोरिदम को बनावट की आवश्यकता होती है और बाइनरी छवियों के लिए बहुत उपयुक्त नहीं होती है। यदि आप पीडीएफ के लिंक के बजाय पढ़े गए कागजात का नाम प्रदान करते हैं तो मैं सहायक होगा। –

उत्तर

4

रिवर्स के बजाए आगे बढ़ें, और ऑप्टिकल प्रवाह का उपयोग न करें। काले हिस्सों को विभाजित करने के लिए फ्रैक्चर लाइनों का उपयोग करें, समय के साथ प्रत्येक ब्लैक सेगमेंट के केंद्र को ट्रैक करें। जब भी एक नई फ्रैक्चर लाइन दिखाई देती है जो एक काले सेगमेंट में कटौती करता है, तो सेगमेंट को दो में विभाजित करता है और प्रत्येक सेगमेंट को अलग से ट्रैक करना जारी रखता है।

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

0

मैं आपको दरारों को पीछे हटाने के अपने प्रारंभिक विचार का पालन करने की सलाह दूंगा। यो तरह का पता है कि दरार कैसा दिखता है ताकि आप दरार से संबंधित सभी बिंदुओं को ट्रैक कर सकें। आप ऑप्टिकल फ्लो ट्रैकर के साथ सभी सफेद बिंदुओं को ट्रैक करें, लुकास-कानडे ट्रैकर से शुरू करें और देखें कि आपको कहां मिलता है। उच्च सटीकता ऑप्टिकल प्रवाह विधि एक वैश्विक और अधिक सामान्य है, मैं छवि में सभी पिक्सेल को हर जगह कुछ चिकनीता रखने की कोशिश कर रहा हूं। एलके एक स्थानीय विधि है जो ट्रैकिंग करने के लिए प्रत्येक बिंदु के चारों ओर एक छोटी सी खिड़की का उपयोग करेगी। समस्या यह है कि दरारों से एपर्ट सभी पिक्सल सादे काले होते हैं, इसलिए वहां ट्रैक करने के लिए कुछ भी नहीं, आप केवल उस चीज़ को ट्रैक करने का प्रयास कर सकते हैं जिसे आप ट्रैक नहीं कर सकते हैं और आपको ट्रैक करने की आवश्यकता नहीं है। यदि रेखाएं बहुत सीधी हैं तो आप aperture problem कहला सकते हैं और आपको गलत परिणाम मिलेंगे। आप सांपों के आधार पर कुछ आकार फिटिंग/विरूपण भी आज़मा सकते हैं।

0

मैं Damian से सहमत हूं। एचएओएफ जैसे अधिकांश ऑप्टिकल फ्लो विधियां तीव्रता स्थिरता कंस्ट्रियन समीकरण I (x, t) = I (x + v, t + dt) के पहले ऑर्डर टेलर सन्निकटन पर भरोसा करती हैं। इसका मतलब यह है कि समाधान छवि डेरिवेटिव्स पर निर्भर करता है जहां ढाल गति वेक्टर परिमाण और कोण निर्धारित करता है यानी आपको एक निश्चित मात्रा में बनावट की आवश्यकता होती है। हालांकि आपकी गैर-बिनराइज्ड छवियों का बहुत कम बनावट पर्याप्त हो सकता है। आप अपने इनपुट डेटा के विपरीत को बढ़ाने के लिए हिस्टोग्राम बराबरता का प्रयास कर सकते हैं लेकिन इनपुट छवियों दोनों के लिए समान परिवर्तन लागू करना महत्वपूर्ण है। जैसे निम्नानुसार है:

cv::Mat equalizeMat(grayInp1.rows, grayInp1.cols * 2 , CV_8UC1); 
grayInp1.copyTo(equalizeMat(cv::Rect(0,0,grayInp1.cols,grayInp1.rows))); 
grayInp2.copyTo(equalizeMat(cv::Rect(grayInp1.cols,0,grayInp2.cols,grayInp2.rows))); 
cv::equalizeHist(equalizeMat,equalizeMat); 
equalizeMat(cv::Rect(0,0,grayInp1.cols,grayInp1.rows)).copyTo(grayInp1); 
equalizeMat(cv::Rect(grayInp1.cols,0,grayInp2.cols,grayInp2.rows)).copyTo(grayInp2); 
// estimate optical flow 
संबंधित मुद्दे