2012-04-23 8 views
5

में विभाजित पत्तियों को विभाजित करने के लिए वाटरशेड सेगमेंटेशन एल्गोरिदम मुख्य कार्य एक पत्ती की जटिल पृष्ठभूमि को खत्म करना और MATLAB में एक निर्विवाद पत्ती छवि से लक्षित पत्ते निकालना है। पृष्ठभूमि को खत्म करने के लिए मैंने के-साधन क्लस्टरिंग अलगो लागू किया है। अब मुख्य कार्य वाटरशेड सेगमेंटेशन एल्गोरिदम का उपयोग करके पत्ते को एक गुंबददार पत्ते से विभाजित करना है। मैं हर एक पत्ते के लिए सही सेगमेंट नहीं ढूंढ पा रहा हूं। क्रिप्या मेरि सहायता करे। मैंने नमूना छवियां अपलोड की हैं और वाटरशेड सेगमेंटेशन कोड भी अपलोड किया है।मैटलैब

मूल छवि enter image description here

छवि कश्मीर साधन एल्गोरिथ्म क्लस्टरिंग और वाटरशेड विभाजन का उपयोग कर पृष्ठभूमि को नष्ट मूल छवि पर आरोपित enter image description here

मैं मुख्य बीच पत्ती एक एकल खंड होना चाहता हूँ के बाद , ताकि मैं इसे निकाल सकूं।

मैं नीचे

function wateralgo(img) 

F=imread(img); 

F=im2double(F); 

%Converting RGB image to Intensity Image 
r=F(:,:,1); 
g=F(:,:,2); 
b=F(:,:,3); 
I=(r+g+b)/3; 
imshow(I); 

%Applying Gradient 
hy = fspecial('sobel'); 
hx = hy'; 
Iy = imfilter(double(I), hy, 'replicate'); 
Ix = imfilter(double(I), hx, 'replicate'); 
gradmag = sqrt(Ix.^2 + Iy.^2); 
figure, imshow(gradmag,[]), title('Gradient magnitude (gradmag)'); 

L = watershed(gradmag); 
Lrgb = label2rgb(L); 
figure, imshow(Lrgb), title('Watershed transform of gradient magnitude (Lrgb)'); 

se = strel('disk',20); 
Io = imopen(I, se); 
figure, imshow(Io), title('Opening (Io)'); 
Ie = imerode(I, se); 
Iobr = imreconstruct(Ie, I); 
figure, imshow(Iobr), title('Opening-by-reconstruction (Iobr)'); 

Ioc = imclose(Io, se); 
figure, imshow(Ioc), title('Opening-closing (Ioc)'); 

Iobrd = imdilate(Iobr, se); 
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr)); 
Iobrcbr = imcomplement(Iobrcbr); 
figure, imshow(Iobrcbr), title('Opening-closing by reconstruction (Iobrcbr)'); 

fgm = imregionalmin(Iobrcbr); 
figure, imshow(fgm), title('Regional maxima of opening-closing by reconstruction (fgm)'); 

I2 = I; 
I2(fgm) = 255; 
figure, imshow(I2), title('Regional maxima superimposed on original image (I2)'); 

se2 = strel(ones(7,7)); 
fgm2 = imclose(fgm, se2); 
fgm3 = imerode(fgm2, se2); 
fgm4 = bwareaopen(fgm3, 20); 
I3 = I; 
I3(fgm4) = 255; 
figure, imshow(I3), title('Modified regional maxima superimposed on original image (fgm4)'); 

bw = im2bw(Iobrcbr, graythresh(Iobrcbr)); 
figure, imshow(bw), title('Thresholded opening-closing by reconstruction (bw)'); 

D = bwdist(bw); 
DL = watershed(D); 
bgm = DL == 0; 
figure, imshow(bgm), title('Watershed ridge lines (bgm)'); 

gradmag2 = imimposemin(gradmag, bgm | fgm4); 
L = watershed(gradmag2); 
I4 = I; 
I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255; 
figure, imshow(I4), title('Markers and object boundaries superimposed on original image (I4)'); 

Lrgb = label2rgb(L, 'jet', 'w', 'shuffle'); 
figure, imshow(Lrgb), title('Colored watershed label matrix (Lrgb)'); 

figure, imshow(I), hold on 
himage = imshow(Lrgb); 
set(himage, 'AlphaData', 0.3); 
title('Lrgb superimposed transparently on original image'); 
end 
+0

@Ponon क्षमा करें कोड खराब इंडेंट है लेकिन कृपया मुझे समाधान में मदद करें। –

+0

आप किस पत्ते को निकालने की कोशिश कर रहे हैं? – vini

+0

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

उत्तर

2

वाटरशेड विभाजन कोड दे दिया है मुझे लगता है कि आप एक सामान्य विभाजन के बजाय एक अग्रभूमि निष्कर्षण एल्गोरिथ्म कोशिश करनी चाहिए। ऐसा एक एल्गोरिदम GrabCut है। एक और चीज जो उपयोगी हो, अग्रभूमि वस्तु निकालने की कोशिश करने से पहले अपनी छवि प्रतिनिधित्व में कुछ स्तर के रोशनी भिन्नता को प्राप्त करना है। ऐसा करने का एक तरीका Chong color space में काम करना है।

0

यदि उपयोगकर्ता से कोई भी बातचीत संभव है, तो आपका विभाजन ग्रेबकूट (जैसा कि @ विक्टर मई द्वारा उल्लिखित) या अधिक बुनियादी interactive graph cut के साथ बेहतर होगा।

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