विभिन्न सामग्रियों की छवि विभाजन मुद्दा


15

हाय CV / पैटर्न मान्यता समुदाय,

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

Matlab या OpenCV सुझावों का स्वागत है।

इसे और अधिक स्पष्ट करने के लिए, मैंने अपने लक्ष्य की एक और छवि और एक अर्ध-पारदर्शी वस्तु पोस्ट की है, जिसे भी पता लगाने की आवश्यकता है। इसके अलावा आगे के उदाहरणों के बारे में पता होना चाहिए। उदाहरण 1 example2 Example3 Example4

जैसा कि आप छवि # 1 में देख सकते हैं, छवि के दाहिने हिस्से में और पास के तारे के बाहरी समोच्च में कण हैं, जो कि वस्तु है। इसके अलावा समग्र विपरीत बहुत अच्छा नहीं है। ऑब्जेक्ट खुद एक भूमिगत पर खड़ा है, जो समोच्च का पता लगाने के लिए प्रासंगिक नहीं है। छवि # 2 एक ह्रासमान वस्तु को दर्शाता है, जो संभव भी है।

मैं उस वस्तु के समोच्च / परिधि को खोजना चाहता हूं, जैसे कि अगली स्क्रीन (लाल रेखा) पर। दो आयत (पीले) शुरू (बाएं) और अंत बिंदु (दाएं) को चिह्नित कर रहे हैं। नीली रेखा आग्नेय है। example2

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

  • कैनी: कण और वायुमंडल छिद्र पैदा कर रहे हैं, लेकिन मुझे ऑब्जेक्ट के पूर्ण समोच्च की आवश्यकता है। अभी भी बंद होने के साथ, रूपात्मक संचालकों का पतला होना पर्याप्त रूप से ठीक नहीं है। कैनी के पास अभी भी उन सभी तरीकों का सबसे अच्छा परिणाम है जो मैंने हिस्टैरिसीस के कारण अध्ययन किए हैं।
  • Active Contours: वे किनारों / ग्रेडिएंट्स पर भी काम करते हैं, वे ऑब्जेक्ट के अंदर इनिशियलाइज़ करने के बाद पूरी तरह से पागल हो जाते हैं, जो शायद एज मैप के कारण होता है जिसके परिणामस्वरूप 'ओपन' ऑब्जेक्ट होता है। जहां तक ​​मुझे पता है कि समोच्च को बंद करना होगा। इसे अलग-अलग व्युत्पन्न (जीवीएफ / वीएफसी / क्लासिक स्नेक) के साथ करने की कोशिश की।
  • k-Means: परिणामों में भट्टी की पृष्ठभूमि के कारण भट्ठी का वातावरण शामिल है। फजी-सी-साधन के लिए भी। मैंने पृष्ठभूमि से ऑब्जेक्ट को अलग करने के कारण दो समूहों को चुना। अधिक क्लस्टर कमजोर परिणामों की ओर ले जाते हैं।
  • हिस्टोग्राम / ओत्सु: बहुत करीबी ग्रे तीव्रता (imho!) के कारण, यह ऑब्जेक्ट को पृष्ठभूमि के साथ विलय कर रहा है। स्थानीय और वैश्विक तरीकों से इसकी कोशिश की।
  • फिल्टर: विशेष रूप से जीएलपीएफ या अन्य एलपीएफ किनारों को धब्बा कर रहे हैं, जो इतना अच्छा नहीं है और धुंधले वातावरण को भी कम नहीं करता है।
  • नॉन-लीनियर फिल्टर किनारों को संरक्षित कर रहे हैं। उनमें से ज्यादातर बड़ी छवियों की गणना के लिए बहुत लंबा समय लेते हैं। अब के लिए एक तेजी से द्विपक्षीय फिल्टर लिया। परिणाम नीचे देखें।

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

इसलिए मैं आपसे पूछ रहा हूं, अगर मैं कुछ पूरी तरह से याद कर रहा हूं ... मुझे आगे कोई विचार नहीं है कि कैसे प्रक्रिया करनी है और कैसे मुझे अच्छे समोच्च परिणाम प्राप्त करने चाहिए, बिना अंतराल या छेद के .. क्या यह संभव है कि बहुत सारे बदलाव किए बिना। सीसीडी और भौतिक वातावरण? अग्रिम में धन्यवाद!

अब तक अंतिम दृष्टिकोण (एमओ के साथ प्रयोगों की एक लंबी रात के बाद):

  • द्विपक्षीय फ़िल्टर (किनारे संरक्षण, लेकिन समरूप क्षेत्रों को चौरसाई करना)
  • कैनी (सिग्मा = 2, थ्रेसहोल्ड = [0.04 0.08])
  • रूपात्मक संचालन (एमओ): bwareopen, closing, removeऔरbridge
  • bwlabelसमोच्च के केवल परिधि का चयन करने के लिए, जो अवांछित शोर को हटा देता है। अभी तक कोई भी अपडेटेड स्क्रीनशॉट नहीं है, लेकिन यह स्टार के लिए काम करता है। ग्लास एक आंतरिक-समोच्च होता है जो बाहरी समोच्च से जुड़ा होता है, जिसे नीचे स्क्रीनशॉट पर भी देखा जा सकता है।

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

कांच के किनारे सितारा


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

हाय रुई, मैंने इस माटलाब एक्सटेंशन के साथ एडाप्टिव थ्रेशोल्डिंग की कोशिश की: एडेप्टिव थ्रेशोल्डिंग यहाँ खिड़की के मापदंडों के साथ खेलने के लिए परिणाम हैं: पहली कोशिश 2 कोशिश 3 जी कोशिश करें जैसा कि आप देख सकते हैं, बढ़ते मापदंडों के साथ मध्य भाग सफेद से काला हो जाता है (क्या अच्छा है, इमो) लेकिन बाकी पृष्ठभूमि भी काले रंग में बदल जाती है, जो बुरा है।
mchlfchr

3
क्या आपने कुछ बुनियादी छवि कटौती तकनीकों की कोशिश की है? जैसे कि ऊपरी दाहिने हिस्से पर उस कालेपन से छुटकारा पाने के लिए एक फ्लैट-फील्ड सुधार को घटाना ( en.wikipedia.org/wiki/Flat-field_correction )। इसके अलावा, यदि कण स्थिर होते हैं, तो उन्हें तुरंत हटा दिया जाएगा। फिर, आप किसी भी एज डिटेक्शन मेथड का उपयोग कर सकते हैं ...
PhilMacKay

हाय फिल, जहां तक ​​मेरा संबंध है और जैसा कि मैं जानता हूं, चित्रों की एक श्रृंखला है जो किसी वस्तु को भट्टी में डालने से पहले शूट की जाती है। इस प्रकार का अंशांकन यहाँ है। मैं भौतिक विज्ञानी से बात करूंगा जो सोमवार को सीसीडी और पर्यावरण के लिए जिम्मेदार है। लेकिन सलाह के लिए धन्यवाद, मैं इसे एक शॉट दूँगा!
mchlfchr 19

आपके द्वारा जोड़ी गई दूसरी छवि बिल्कुल अलग दिखती है। क्या आप सभी संभव चित्र पोस्ट कर सकते हैं?
एंड्री रुबेश्टिन

जवाबों:


2

आप निम्नलिखित की कोशिश कर सकते हैं:


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

1
आप "उपयोग करने में आसान" संस्करण पा सकते हैं, वहाँ: lear.inrialpes.fr/people/mairal/denoise_ICCV09.tar.gz
oli

एक और बार शिकायत करने के लिए खेद है ;-) ... क्या आपके पास win32 स्रोत हैं? फिर से धन्यवाद!
mchlfchr

मुझे डर है कि मैं नहीं ...
oli

2

मुझे लगता है कि आपने थ्रेसहोल्ड तकनीकों को बहुत जल्दी छोड़ दिया। अपने हिस्टोग्राम पर एक नज़र डालें, यह स्पष्ट रूप से त्रि-मोडल है: (मैंने आपकी छवि के दाईं ओर सफेद कॉलम को मैन्युअल रूप से हटा दिया है, मुझे लगता है कि वे छवि का हिस्सा नहीं हैं - कृपया मेरे कोड को चलाने से पहले इस छवि को लें)

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

पहले समूह के सभी मूल्यों पर एक नज़र डालें:

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

त्रि-मोडल हिस्टोग्राम में मोड खोजने के लिए, तीव्रता के साथ K- साधन क्लस्टरिंग का उपयोग करना संभव है K=3। निम्नलिखित Matlab कोड th1=67आपके कोड पर मिलता है । विचार यह है कि आपके पास 3 सेट हैं, और प्रत्येक पर भारित केन्द्रक की गणना करें। फिर, प्रत्येक तीव्रता का स्तर अपने स्वयं के क्लस्टर को सौंपा गया है। आप तब रुकते हैं जब भारित केन्द्रक चलती है। यहाँ आपकी छवि पर दो थ्रेसहोल्ड खोजने का परिणाम है, हिस्टोग्राम पर दिखाया गया है।

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

function [th1,th2]=SegmentHistTo3()
    im = imread('http://i.stack.imgur.com/U2sc5.png');
    h = imhist(im(:,:,1)); %# Calculate histogram

    th1new = round(256/3); %# Initial thresholds
    th2new = round(256*2/3);
    th1 = 0;
    th2 = 0;

    while (th1~=th1new) || (th2~=th2new) %# While the centroids keep on moving
        th1 = th1new;
        th2 = th2new;

        wa1 = WeightedAverage(h,1,th1);  %# Calculate 3 weighted averages
        wa2 = WeightedAverage(h,th1+1,th2);
        wa3 = WeightedAverage(h,th2,numel(h));

        th1new = round( (wa1+wa2)/2 );  %# The thresholds are middle points between the averages
        th2new = round( (wa2+wa3)/2 );
    end

    figure; hist( double( reshape(im(:,:,1),1,[]) ),256);
    hold on;
    plot( [th1 th1],[0 max(h)],'r','LineWidth',2);
    plot( [th2 th2],[0 max(h)],'r','LineWidth',2);

    figure;imshow( im(:,:,1)<th1);
end

function wa = WeightedAverage(region,th1,th2)    
    regionNonEmpty(th1:th2) = region(th1:th2);
    wa = sum( regionNonEmpty .* (1:numel(regionNonEmpty))) / sum(regionNonEmpty);    
end

समस्या को हल करना बाद में केक का एक टुकड़ा है, बस कुछ सरल रूपात्मक ऑपरेशन करें, जैसे कि खोलना।


1
हाय एंड्री, लेकिन मुझे उस थ्रेसहोल्ड का सामान्यीकरण कैसे करना चाहिए जिसका आपने उल्लेख किया है? मुझे कई मामले मिले, न कि केवल एक और मुझे अभी भी स्वचालन की आवश्यकता है। और ओत्सु थ्रेसहोल्डिंग (मैटलैब में फ़ंक्शन) ने मुझे कोई अच्छा परिणाम नहीं दिया। कोई और संकेत? का संबंध है
mchlfchr

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

@mchlfchr, क्या आपके पास इमेज प्रोसेसिंग टूलबॉक्स है? आप नहीं करते हैं, यह संभव है बदलने के लिए imhistकरने के लिएhist
एंड्री Rubshtein

@mchlfchr, कृपया अपडेट किया गया संस्करण देखें
एंड्रे रुबेश्टिन

एंड्री, अगर मैं मूल बिटमैप फ़ाइल सम्मिलित करता हूं, तो परिणाम मेरे मूल पोस्ट में उल्लिखित हैं। शायद यह संकल्प के संबंध में हो रहा है? सोर्स इमेज 576x768 पिक्सल और ग्रेस्केल (256) है। यहां परिणाम हैं, अगर मैं अपनी मूल छवि के साथ आपके फ़ंक्शन का उपयोग करता हूं: i.imgur.com/UXALJ.png आपके फ़ंक्शन का हिस्टोग्राम-आंकड़ा: i.imgur.com/7RiPP.png आपकी मदद के लिए धन्यवाद! सादर
मचल्फच्र

1

जैसा कि ऊपर सुझाव दिया गया है, थ्रेसहोल्ड इस छवि पर बहुत प्रभावी हो सकता है, जो अनिवार्य रूप से द्विआधारी है, सिवाय इसके कि एक निरंतर दहलीज असमान प्रकाश की वजह से नहीं करेगी। आपको अनुकूली थ्रेसहोल्डिंग की आवश्यकता है।

मेरी सलाह होगी कि प्रकाश क्षेत्रों में बहुत कम मूल्यों का नमूना लेकर एक साधारण मॉडल (संभवतः प्लानर [3 डीओएफ] या द्विघात [6 डीओएफ]) के साथ पृष्ठभूमि का पुनर्निर्माण करें। सबसे अच्छा शोर को दूर करने के लिए छोटे ROIs का उपयोग करना है। फिर पृष्ठभूमि मूल्यों को घटाकर (या विभाजित करके) छायांकन को सही करें।

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

पूरी प्रक्रिया को एक सेकंड के नीचे अच्छी तरह से चलाने के लिए लागू किया जा सकता है।


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

1

मुझे लगता है कि सबसे अच्छा तरीका सक्रिय आकृति का उपयोग करना है। अगर आपको इस बारे में पता नहीं है कि YouTube पर इस वीडियो में कौन-कौन से सक्रिय कलाकार दिख रहे हैं, तो http://www.youtube.com/watch?v=ijNe7f3QVdA

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

यहाँ सक्रिय कंट्रोल्स का एक कार्यान्वयन है जिसका आप http://www.mathworks.com/matlabcentral/fileexchange/19567 पर उपयोग कर सकते हैं


Dsp.se में आपका स्वागत है :) योगदान देने के लिए धन्यवाद, आपने एक अच्छा जवाब दिया। यदि आप इसे और बेहतर बनाना चाहते हैं, तो मुझे लगता है कि इनमें से कुछ सवालों के जवाब प्रदान करना दिलचस्प होगा: आपको क्यों लगता है कि यह सबसे अच्छा तरीका है (जैसे कि आपके पास tecnhique के साथ व्यक्तिगत अनुभव है)? आपको पहले से सुझाए गए दृष्टिकोणों में से कौन सा आपके सुझाव के साथ संयोजन में अच्छा काम करेगा? तकनीक का संक्षिप्त विवरण प्रस्तुत करें, या, यदि आपके पास समय है, तो दिए गए उदाहरण चित्रों पर तकनीक का उपयोग करके प्रयोगात्मक परिणाम प्रदान करने का प्रयास करें। और डीएसपी पर मज़े करो!
पेनेलोप

@ mkuse, जैसा कि आपने आरंभिक पोस्ट पढ़ा होगा, मैंने पहले ही सक्रिय कंट्रोवर्स की कोशिश की थी, जो शोर में कमी और एज मैप्स के साथ संयुक्त थे। परिणाम खराब थे और बड़ी छवियों के लिए खराब समय था।
mchlfchr

कैसे के बारे में आप शोर में कमी तकनीकों पर एक नज़र है। आप उन लोगों का सारांश यहां पा सकते हैं: lnmiitdip.files.wordpress.com/2011/12/…
mkuse

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

0

आप स्पष्ट रूप से जानते हैं कि आप किस बारे में हैं, लेकिन आपने थ्रेसहोल्ड का उपयोग करने का उल्लेख नहीं किया है, विशेष रूप से आपने सही स्तर की गणना करने के लिए ओट्सु का उपयोग करके एक वैश्विक सीमा लागू करने की कोशिश की है, फिर आकृति खोजने और सबसे बड़ा चयन करने के लिए?

[स्पष्ट करने के लिए संपादित करें]

वैश्विक दहलीज स्पष्ट रूप से छवि के पार दिखाई देने के कारण काम नहीं करेगी।

मैंने इसके साथ एक त्वरित नाटक किया और पाया कि यदि आप छवि को 6 खंडों (3 स्तंभों की 2 पंक्तियों के बराबर आकार) में तोड़ते हैं, तो हर एक पर ओट्सू का उपयोग करके थ्रेसहोल्डिंग करें और फिर से इकट्ठा करें, यह सफाई करने में एक सुंदर ईश्वर का काम करता है छवि।

अभी भी तारे के ऊपरी दाहिने भाग पर कुछ छोटी कलाकृतियाँ हैं।

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


हाय डेव, मैंने ओट्सू की कोशिश की, लेकिन यह प्रभाव लाता है कि सही ऊपरी पृष्ठभूमि ऑब्जेक्ट के साथ विलय कर रही है, जो बिल्कुल अस्वीकार्य है।
mchlfchr

हाय डेव, Hough एक विकल्प नहीं है, क्योंकि रन-टाइम की आवश्यकताओं और जहाँ तक मुझे HT के बारे में ज्ञान है, बड़ी छवियों के लिए बहुत समय लगता है।
mchlfchr

0

क्या रूपरेखा हमेशा सीधी रेखाएँ या ज्ञात वक्र होती हैं?

यदि ऐसा है तो किनारे के साथ प्रत्येक पिक्सेल को सही करने की कोशिश करने के बजाय, मैं लाइनों के समीकरणों को प्राप्त करने के लिए पर्याप्त रूपांतरों का उपयोग करूंगा और फिर लाइनों और पुनरावृत्तियों से काउंटरों को फिर से बनाऊंगा।


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

सीधी रेखाओं के लिए यह बहुत तेज़ है, और यदि आप मोटे तौर पर जानते हैं कि लाइनें कहाँ हैं (जैसे कि पिछले फ्रेम से) तो आप केवल उस परम स्थान की खोज कर सकते हैं
मार्टिन बेकेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.