2012-02-21 13 views
12

में आकृतियों जैसे पत्ते का पता लगाने के लिए इष्टतम दृष्टिकोण मैंने एक परियोजना के लिए ओपनसीवी के साथ खेलना शुरू किया जिस पर मैं काम कर रहा हूं।
इस परियोजना के लिए मैं बर्तनों में पौधे उग रहा हूं। विभिन्न विकास चरणों की स्थिर तस्वीरें ऊपर से ली गई हैं (नीचे चित्र देखें)।ओपनसीवी

Original picture

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

Canny edge detection

मुझे लगता है कि बेहतर दृष्टिकोण प्रथम खंड के रंग से छवि है और उसके बाद पत्तियों पता लगाने के लिए कुछ बढ़त का पता लगाने एल्गोरिथ्म का उपयोग करें।
क्या ऐसा करने का कोई बेहतर तरीका है?

पत्ती की संरचना पहले से ज्ञात है। क्या मैं बेहतर परिणाम प्राप्त करने के लिए मशीन लर्निंग/वर्गीकरण एल्गोरिदम का उपयोग कर सकता हूं?

मैंने पत्तियों के आकार को मापने के बारे में भी सोचा नहीं है? क्या आकार और अन्य वर्णनकर्ताओं को मापने के लिए कोई सामान्य पैटर्न हैं? (शायद तस्वीर में ज्ञात आकार के साथ एक संदर्भ वस्तु है?)।

अंततः मुझे कुछ विस्तार के लिए प्रलोभन से निपटना होगा। यह चित्रों में दिखाई नहीं दे रहा है लेकिन बाद के विकास चरणों में मुझे ओवरलैपिंग पत्तियों से निपटना पड़ सकता है। क्या इससे निपटने के लिए कोई दृष्टिकोण है?

मैं नहीं कर सकते पूर्वाग्रह अपने पक्ष में चित्र के रूप में वहाँ पौधों जो संसाधित किया जा करने के लिए है की हजारों हो सकता है (अर्थात बाहर मिट्टी, आदि पालिश)।

मेरे सवालों का संक्षेप में:

  • सबसे अच्छा तरीका एक मिट्टी में लीफ़्स (आंकड़े देखें) पता लगाने के लिए क्या है?
  • क्या मशीन सीखने वाले एल्गोरिदम का पता लगाने में सुधार हो सकता है?
  • मैं पत्तियों के आकार को कैसे माप सकता हूं?
  • प्रलोभन/ओवरलैपिंग पत्तियों से कैसे निपटें?

मैं कुछ पॉइंटर्स या विचारों के लिए वास्तव में आभारी हूं।

अद्यतन (Jeff7 टिप्पणी के आधार पर):

मैं पहली बार एक floodfill एल्गोरिथ्म के साथ एक साथ मतलब पारी रंग विभाजन भाग गया और ऊपर इस तस्वीर के साथ समाप्त हो गया:

mean shift color segmentation

जब मैं अब उस तस्वीर पर कैनी एज डिटेक्शन + findcontours चलाएं परिणाम बहुत बेहतर हैं:

Contours

उत्तर

3

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

यह अभी तक, प्रक्षेपण के मुद्दे से निपटता नहीं है। पौधे के आकार के बारे में कुछ विचार पाने के लिए आप 2 और छवियों, 2 ऑर्थोगोनल विमानों (फिर से काले पृष्ठभूमि का उपयोग करके) में पौधे की ऊंचाई ले कर कुछ समझ सकते हैं।

टिप्पणी के बाद संपादित करें ...

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

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

आगे संपादन

ठीक है, तो आप अपने पक्ष में नहीं पूर्वाग्रह दृश्य कर सकते हैं। क्या आपने कैमरे पर केवल हरे रंग की रोशनी स्वीकार करने के लिए फ़िल्टर का उपयोग करने का विचार किया है? या रोशनी जो हरित वस्तुओं को हरे रंग की वस्तुओं की तुलना में उज्ज्वल बनाती है? मैं इस पर विचारों से बाहर हूँ ...

अंतिम संपादन

मैं विचारों की समाप्त हो चुकी है। मुझे लगता है कि पत्तियों और पृष्ठभूमि के बीच भेदभाव करने के लिए रंग का उपयोग करके आपका मूल दृष्टिकोण अच्छा है। चूंकि आप पत्तियों की संरचना को जानते हैं, इसलिए आप टेम्पलेट मिलान करने का प्रयास कर सकते हैं, लेकिन आप केवल पिक्सल गिनने के द्वारा दोनों क्षेत्रों और लंबाई (या क्षेत्र और लंबाई में अंतर) का आकलन कर सकते हैं। आप छवियों से आकार उपायों को प्राप्त करने के लिए morphological संचालन (उदाहरण के लिए skeletonisation) की जांच करना चाह सकते हैं। आपको साहित्य में भौतिक (आदि) की रिमोट सेंसिंग पर साहित्य मिल सकता है जो मदद करता है।

मुझे लगता है कि आपने कंप्यूटर दृष्टि प्रणाली को लागू करने के उद्देश्य से मानसिक रूप से प्रतिबद्ध किया है, जहां आपका उद्देश्य वास्तव में पौधों के विकास की निगरानी करना है और आपके कुछ विचार (जैसे एज-डिटेक्शन, मशीन लर्निंग) अपने उचित उद्देश्य तक पहुंचने में योगदान न दें।

+0

प्रतिक्रिया के लिए धन्यवाद। आप सही हैं कि मेरे पास परिस्थितियों पर नियंत्रण है और मैंने मिट्टी को "ब्लैकिंग" के बारे में भी सोचा था। दुर्भाग्य से यह वास्तव में संभव नहीं है क्योंकि मुझे न केवल एक पौधे के साथ सौदा करना पड़ता है, लेकिन कभी-कभी हजारों और मिट्टी को ब्लैकिंग करने में बहुत समय लगेगा। पत्ती के आकार को मापने के लिए आप सही हैं। यह वास्तव में नियंत्रित कर सकता है क्योंकि तस्वीर हमेशा एक ही स्थिति से ले रही है और बर्तनों का आकार समान है। –

+0

भ्रम के लिए खेद है। मैंने इसे स्पष्ट करने के लिए मूल प्रश्नों को अद्यतन किया।मैं सिर्फ एक पौधे को एक उदाहरण के रूप में दिखा रहा था, हालांकि मेरे पास आमतौर पर ट्रे में उन 36 बर्तन होते हैं। –

+0

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

3

माध्य-शिफ्ट रंग विभाजन पर एक नज़र डालें (नमूने निर्देशिका में ओपनसीवी के साथ एक उदाहरण शामिल है)। आप अपनी छवि को 2 वर्गों (पौधे और मिट्टी) में अलग करने के लिए इसका उपयोग कर सकते हैं और अपने डेटा को आगे संसाधित करने के लिए इसका उपयोग कर सकते हैं।

माप के लिए, आप प्रारंभिक रूप से प्रक्षेपण प्रभाव और कैमरा अंशांकन को अनदेखा करना चाहते हैं और केवल पौधे वर्ग में छवि के क्षेत्र को देख सकते हैं।

यदि आप व्यक्तिगत पत्ते को मापने के लिए नीचे उतरना चाहते हैं, तो आप एक "ट्रैकिंग" दृष्टिकोण ले सकते हैं जहां आप अस्थायी जानकारी के साथ-साथ छवि में स्थानिक जानकारी का उपयोग भी कर सकते हैं। अस्थायी जानकारी पिछले छवि में पत्ती का स्थान और आकार हो सकती है। शायद आप कई तकनीकों को लागू कर सकते हैं, लेकिन अगर मैं आप थे तो मैं सरल शुरू करूंगा और देख सकता हूं कि यह आपको कितना दूर लेता है।

+0

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

0

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

0

यह अनुसंधान का एक सक्रिय क्षेत्र है। मैं निम्नलिखित पेपरों की अनुशंसा करता हूं:

  • Scharr et al। 2016: संयंत्र phenotyping में पत्ता विभाजन: एक मिलान अध्ययन (pdf)

  • बेल और डी 2016: देखना पौधों को विकसित-एक कंप्यूटर दृष्टि और Arabidopsis थालिअना पर स्थिति कागज। http://doi.org/10.1049/iet-cvi.2016.0127

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