2012-04-15 10 views
5

enter image description hereमैटलैब - लाइनों को निकालने के लिए वाटरशेड - खो जानकारी

मैं इस प्रकार एक नस छवि है। मैं नसों के कंकाल निकालने के लिए वाटरशेड एल्गोरिदम का उपयोग करता हूं।

मेरा कोड: (के मूल छवि है)।

level = graythresh(K); 
BW = im2bw(K,level); 
D = bwdist(~BW); 
DL = watershed(D); 
bgm = DL == 0; 
imshow(bgm); 

परिणाम है:

enter image description here

आप देख सकते हैं जानकारी के बहुत खो दिया है। क्या कोई व्यक्ति मेरी सहायता कर सकता है? धन्यवाद।

उत्तर

8

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

%# Load image and convert to [0,1]. 
A = im2double(imread('http://i.stack.imgur.com/TQp1i.png')); 
%# Any large (relative to objects) structuring element will do. 
%# Try sizes up to about half of the image size. 
se = strel('square',32); 
%# Removes uneven lighting and enhances contrast. 
B = imdivide(A,imclose(A,se)); 
%# Otsu's method works well now. 
C = B > graythresh(B); 
D = bwdist(~C); 
DL = watershed(D); 
imshow(DL==0); 

यहाँ C (बाएं), प्लस DL==0 (बीच में) कर रहे हैं और मूल छवि पर इसके ओवरले:

Divided by closingOtsu's methodSegmentation overlay

+0

वर्क्स में अच्छी तरह से। हालांकि, चित्र अच्छा होगा। – Jonas

+0

अच्छी सलाह ... (संपादन देखें)। –

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद। बस एक त्वरित सवाल है। यदि मैं imopen के बाद imopen लागू करना चाहता हूं तो मुझे यह भाग se = strel ('square', 32) संपादित करना चाहिए; im_open = imopen (ए, से); बी = imdivide (ए, imclose (im_open, से)); मैं जिस पेपर को अभी पढ़ रहा हूं, मैंने कहा कि इस तरह से झूठी शाखाओं को कम करने में बहुत मदद मिल सकती है। हालांकि जब मैंने इस तरह से किया तो अधिक झूठी शाखाएं लगती हैं। क्या आपके पास कोई सुझाव है? धन्यवाद – W00f

1

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

2-डी गाऊसी तरह

w=gausswin(N,Alpha) % you'll have to play with N and alpha 
K = imfilter(K,w,'same','symmetric'); % something like these options 

कुछ कर इससे पहले कि आप अपने एल्गोरिथ्म के बाकी लागू लागू किया जा सकता।

1

आप क्योंकि जब आप im2bw लागू होते हैं, आप मूल रूप से अपने uint8 छवि, जहां पिक्सेल चमक intmin('uint8')==0 से intmax('uint8')==255 के लिए एक मूल्य लेता है, एक द्विआधारी छवि (जहां केवल logical मूल्यों उपयोग किया जाता है) में परिवर्तित कर रहे हैं जानकारी खो रहे हैं। यह आपके द्वारा देखी गई जानकारी के नुकसान में शामिल है। यदि आप छवि BW प्रदर्शित करते हैं तो आप देखेंगे कि K के सभी तत्व थे जिनके पास थ्रेसहोल्ड level से अधिक मूल्य था, जबकि थ्रेसहोल्ड के नीचे वाले लोग शून्य में बदल जाते हैं।

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