पत्तियों में नसों को खंडित करने का सबसे अच्छा तरीका?


47

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

मेरी सभी छवियां ग्रे इमेज हैं। कृपया किसी को भी सुझाव दे सकते हैं कि मदद की तत्काल आवश्यकता में इस समस्या पर विचार करने के लिए क्या दृष्टिकोण अपनाएं

संपादित करें: मेरी मूल छवि

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

दहलीज के बाद

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

जैसा कि मैंने उत्तर दिया है कि मैंने निम्नलिखित एज डिटेक्शन की कोशिश की है

  1. चालाक

बहुत अधिक शोर और अवांछित गड़बड़ी

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

  1. सोबेल

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

  1. रॉबर्ट्स

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

संपादित करें: एक और ऑपरेशन की कोशिश की, जो मुझे कैनी और अनुकूली के साथ कोशिश करने से बेहतर परिणाम मिलता है, आपको क्या लगता है?

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


क्या आप हमें कुछ चित्र दिखा सकते हैं?
जोनास

मैंने चित्र जोड़े हैं
vini

@vini क्या आप वर्तमान में एक प्री-प्रोसेसिंग कदम के रूप में ऐसा कर रहे हैं ताकि बाद में एक अच्छा टेम्पलेट मैच हो सके? साथ ही, सरल थ्रेसहोल्ड के माध्यम से आपको दूसरी छवि कैसे मिली?
स्पेसी

मेरा उद्देश्य नसों को खंडित करने में सर्वोत्तम संभव परिणाम प्राप्त करना है ताकि मेरे आउटपुट में आवारा कलाकृतियां न हों, मैंने दूसरी छवि प्राप्त करने के लिए अनुकूली थ्रॉल्डिंग का उपयोग किया है
vini

आपके द्वारा दी गई छवियों से, ऐसा लगता है कि आप एक थ्रेसहोल्ड छवि पर (विभिन्न) फ़िल्टर का उपयोग कर रहे हैं। यह बेहद खराब परिणाम देगा। आपको मूल छवि पर फ़िल्टर का उपयोग करना चाहिए , फिर उनके आउटपुट को थ्रेसहोल्ड करना चाहिए ।
बेनजॉन

जवाबों:


56

आप किनारों की तलाश नहीं कर रहे हैं ((उच्च और निम्न ग्रे मूल्य के विस्तारित क्षेत्रों के बीच की सीमाएं), आप लकीरें देख रहे हैं (उनके पड़ोस की तुलना में पतली रेखाएं या उज्जवल), इसलिए किनारे फ़िल्टर आदर्श नहीं हो सकते हैं: एक किनारे फ़िल्टर होगा आपको दो फ्लैक्स (लाइन के प्रत्येक तरफ एक) और लाइन के बीच में कम प्रतिक्रिया दें:

फ़िल्टर के नमूने

जोड़ें : अगर एक किनारे डिटेक्टर और एक रिज डिटेक्टर के बीच अंतर को अधिक स्पष्ट रूप से समझाने के लिए कहा गया है। मैं अग्रिम में माफी मांगता हूं अगर यह जवाब बहुत लंबा हो रहा है।

एक किनारे डिटेक्टर (आमतौर पर) एक पहला व्युत्पन्न ऑपरेटर होता है: यदि आप एक 3D परिदृश्य के रूप में इनपुट छवि की कल्पना करते हैं, तो एक किनारे डिटेक्टर उस परिदृश्य के प्रत्येक बिंदु पर ढलान की स्थिरता को मापता है:

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

यदि आप एक विस्तारित उज्ज्वल या अंधेरे क्षेत्र की सीमा का पता लगाना चाहते हैं, तो यह ठीक है। लेकिन ओपी की छवि में नसों के लिए यह आपको सिर्फ एक ही देगा: प्रत्येक नस के बाएं और दाएं की रूपरेखा:

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

यह भी कैनी एज डिटेक्टर परिणामों में "डबल लाइन पैटर्न" की व्याख्या करता है:

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

gxy

g(x,y)12x22gx2+xy2gxy+12y22gy2+xgx+ygy+g(0,0)

या, मैट्रिक्स रूप में:

g(x,y)12(xy).(2gx22gxy2gxy2gy2).(xy)+(xy).(gxgy)+g(0,0)

(2gx22gxy2gxy2gy2)

λ1x2+λ2y2λ1λ2

इस फंक्शन का किस तरह का शेप हो सकता है? वास्तव में, ऐसा नहीं है:

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

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


एक रिज फिल्टर शायद बेहतर परिणाम देंगे। मैंने मैथमेटिका का निर्माण किया है RidgeFilter(जो आपकी छवि में प्रत्येक पिक्सेल पर हेसियन मैट्रिक्स के प्रमुख आइजनवेल्यू की गणना करता है)

रिज फिल्टर

जैसा कि आप देख सकते हैं, हर पतली अंधेरी रेखा के लिए केवल एक चोटी है। पैदावार को कम करना और कंकाल बनाना:

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

कंकाल की छंटाई और छवि से छोटे घटकों (शोर) को हटाने के बाद, मुझे यह अंतिम कंकाल मिलता है:

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

पूर्ण गणित कोड:

ridges = RidgeFilter[ColorNegate@src];
skeleton = SkeletonTransform[Binarize[ridges, 0.007]];
DeleteSmallComponents[Pruning[skeleton, 50], 50]

जोड़ें:

मैं मतलबी विशेषज्ञ नहीं हूं, मुझे नहीं पता कि इसमें रिज फिल्टर है या नहीं, लेकिन मैं आपको दिखा सकता हूं कि इसे "हाथ से" कैसे लागू किया जाए (फिर, मैटेमैटिक का उपयोग करके)। जैसा कि मैंने कहा, रिज फिल्टर हेसियन मैट्रिक्स का प्रमुख प्रतिजन है। मैं गणितीय रूप में उस प्रतिध्वनि की गणना कर सकता हूं:

eigenvalue=Last[Eigenvalues[(HxxHxyHxyHyy)]]

12(Hxx+Hyy+Hxx2+4Hxy22HxxHyy+Hyy2)

HxxHxyHyy


हाँ, बिल्कुल वही जो मैं चाहता हूँ, लेकिन मैं इसे matlab में कर रहा हूँ और रिज फ़िल्टर के बराबर होना मुश्किल हो गया है
vini

1
@ मिनी बहुत अच्छा जवाब - सवाल - क्या आप हमारे गैर-छवि वाले लोगों के लिए एक किनारे डिटेक्टर और रिज डिटेक्टर के बीच अंतर पर विस्तार से बता सकते हैं? धन्यवाद फिर से
स्पेसी

@ मोहम्मद: मैंने कोशिश की है, मुझे आशा है कि मैंने गणित के बावजूद अब इसे थोड़ा स्पष्ट कर दिया है
निकी एस्टनर

मैंने कोशिश की कि रिज फ़िल्टर संतोषजनक परिणाम नहीं दे
vini

2
@vini: "संतोषजनक परिणाम नहीं देता है" वास्तव में मुझे बहुत कुछ नहीं बताता है। क्या आप एक ही परिणाम की छवि प्राप्त करते हैं जैसा मैंने पोस्ट किया था? "संतोषजनक नहीं" क्या है?
निकी एस्टनर

6

कैनी एज डिटेक्शन (हैल्कोन में) का उपयोग करते समय, अल्फा 1 के साथ, और निम्न थ्रेशोल्ड 8 और उच्च थ्रेशोल्ड 13 (1-255 के पैमाने पर), मुझे निम्न परिणाम मिलता है:

कैनी एज डिटेक्शन लीफ

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

BTW: एक अलग रंग एक अलग किनारे को इंगित करता है।

मैं इस ऑनलाइन कैनी एज डिटेक्टर का उपयोग करके काफी समान परिणाम प्राप्त कर सकता हूं :

  • I9Pxl.png चित्र चुनें
  • सिग्मा १.२
  • टी-कम 0.04
  • टी-हाई 0.07
  • अन्य सेटिंग्स डिफ़ॉल्ट
  • परिणाम के लिए अद्यतन दृश्य पर क्लिक करें

धन्यवाद :) मुझे लगता है कि कैनी सिर्फ सबसे अच्छा है;) Btw, अपने परिणाम पर कैनी लगाने से और भी बेहतर परिणाम मिल सकते हैं ..
Geerten

BTW: यदि आप ध्यान नहीं दिया है: एक कैनी एज डिटेक्टर की सीमाएं क्या हैं? आप अपने विचार यहाँ दे सकते हैं!
दीपन मेहता

यदि आप मुझसे कह रहे हैं: मैंने पहले ही आपके प्रश्न पर अपना विचार दे दिया है..यदि आप सामान्य रूप से टिप्पणी दे रहे हैं: मैं इस टिप्पणी को हटा दूंगा।
गीर्टेन

अरे हाँ, - मुझे इसका एहसास नहीं था!
दीपन मेहता

आपके उत्तर के लिए धन्यवाद, हालांकि कैनाइन ने पत्तियों में नसों के बारीक विवरण को संरक्षित नहीं किया है, जैसा कि आपने दिखाया है ...
vini

6

उपरोक्त उत्कृष्ट उत्तर से निम्नलिखित, यहाँ यह है कि यह कैसे scikit funcitons का उपयोग करके अजगर में किया जाता है।

from skimage.feature import hessian_matrix, hessian_matrix_eigvals

#assume you have an image img

hxx, hxy, hyy = hessian_matrix(img, sigma=3)
i1, i2 = hessian_matrix_eigvals(hxx, hxy, hyy)

#i2 is the variable you want.

#Visualise the result
import matplotlib.pyplot as plt
plt.imshow(i2)

क्या imgहोना चाहिए? मेरे पास एक pngफाइल है और यह काम नहीं करता है।
सिगुर

img एक 2d numpy सरणी होनी चाहिए।
मैथ्यू शिन-शिन

वास्तव में, i1आइजनवेल्स का बड़ा हिस्सा है, इसलिए आपको उस एक का उपयोग करना चाहिए।
रॉ

यह सबसे स्पष्ट स्पष्टीकरण है जो मैंने कभी देखा है!
यूरेका

3

थ्रेसहोल्ड के बजाय, मैंने सरल किनारे का पता लगाया है।

गौसियन के अंतर के साथ जीआईएमपी का उपयोग किया जाता है - रेडियस आउटर: 3.0 और इनर: 1.0।

यहाँ यह है कि यह कैसा दिखता है।

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

आप आगे एक मीडियन फ़िल्टर या कटाव / फैलाव लगा सकते हैं ताकि आप दानेदार शोर को हटा सकें।

यहाँ वह पृष्ठ है जो जिम्प के कार्यान्वयन के बारे में बताता है।

आपको विभिन्न तकनीकों जैसे कि गाऊसी के लाप्लासियन या गौसिन के अंतर आदि का उल्लेख करना चाहिए। इसे देखें: http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm#7

और यह उत्तर Unsharp मास्क के लिए लाप्लासियन का उपयोग कैसे किया जाता है?


GIMP? कौन सा एज डिटेक्टर है
विनी

1
नहीं - यह एक छवि संपादन पैकेज है। यह एक त्वरित जांच थी - सिर्फ एक बिंदु को आगे रखने के लिए। - थ्रेशोल्डिंग के विपरीत एज डिटेक्शन का उपयोग करें।
दीपन मेहता

GIMP किस एज डिटेक्टर का उपयोग करता है? मुझे खेद है कि इसके बारे में बहुत कम जानकारी है
vini

@vini ने संदर्भ जोड़ा।
दीपन मेहता

3

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

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


0

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

अन्य कागजात जिन्हें आप देखना चाहते हैं:

  • जियोडेसिक एक्टिव कंट्रोस
  • 3 डी जाली के लिए तेजी से मार्चिंग विधियों के कार्यान्वयन पर
  • Multistencils FMM: कार्टेशियन डोमेन पर इकोनो समीकरण का एक अत्यधिक सटीक समाधान

उपयोगी लिंक: - 2 डी और 3 डी में फ्रंट प्रचार

मुझे उम्मीद है कि यह थोड़ा मदद करता है, हालांकि यह बिल्कुल कला की स्थिति नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.