2012-04-23 2 views
5

Die Hauptaufgabe besteht darin, den komplizierten Hintergrund eines Blattes zu eliminieren und das Zielblatt aus einem verdeckten Blattbild in MATLAB zu extrahieren. Um den Hintergrund zu eliminieren habe ich K-Means Clustering Algo angewendet. Jetzt besteht die Hauptaufgabe darin, das Blatt von einem okkludierten Blatt unter Verwendung eines Wasserscheide-Segmentierungsalgorithmus zu segmentieren. Ich finde nicht die perfekten Segmente für jedes einzelne Blatt. Bitte hilf mir. Ich habe die Beispielbilder und auch den Segmentierungscode hochgeladen.Watershed-Segmentierungsalgorithmus zur Segmentierung von okkludierten Blättern in Matlab

ORIGINAL IMAGE enter image description here

Bild nach Hintergrund Eliminierung unter Verwendung von K-Means-Cluster-Algorithmus und Wende Segmentation auf Originalbild überlagert enter image description here

Ich möchte das Haupt mittlere Blatt ein einzelnes Segment sein , damit ich es extrahieren kann.

ich den Wendepunkt Segmentierungscode unter

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

@Phonon Sorry der Code ist schlecht eingerückt aber bitte helfen Sie mir die Lösung. –

+0

Welches Blatt möchten Sie extrahieren? – vini

+0

Unter welchen Umgebungsbedingungen muss Ihr Blattsegmentierungsalgorithmus funktionieren? Hast du irgendeine Kontrolle über die Szene? Muss es unbedingt einen Watershed-Algorithmus verwenden? Ich bin mir nicht sicher, ob die Gradienteninformationen stark genug sind, um Ihnen eine robuste Lösung zu bieten. Sie möchten wahrscheinlich einen Algorithmus oder ein Modell, mit dem Sie stärkere Priors bereitstellen können. Die Form der Blätter ist ziemlich stereotyp, so dass vielleicht ein verformbares Modell angebracht sein könnte. Wenn die Zeit knapp ist, könnte ein heuristischer Ansatz, der auf regionalem Wachstum basiert, möglicherweise zu schnellen Ergebnissen führen? –

Antwort

2

gegeben haben, ich glaube, Sie einen Vordergrundextraktionsalgorithmus versuchen sollten, anstatt eine allgemeine Segmentierung. Ein solcher Algorithmus ist GrabCut. Eine andere Sache, die hilfreich ist, ist es, eine gewisse Beleuchtungsvarianz in Ihrer Bilddarstellung zu erreichen, bevor Sie versuchen, das Vordergrundobjekt zu extrahieren. Eine Möglichkeit, dies zu tun, ist die Arbeit in der Chong color space.

0

Wenn eine Interaktion vom Benutzer möglich ist, wird Ihre Segmentierung entweder mit GrabCut (wie von @Victor May erwähnt) oder dem einfacheren interactive graph cut viel besser sein.

Andernfalls ist eine automatisierte Segmentierung sehr schwierig für eine Vielzahl von Bildern zu perfektionieren. Vielleicht könnten Sie eine Nachbearbeitung versuchen, bei der benachbarte Regionen basierend auf einer Ähnlichkeitsmetrik (oder basierend auf der Stärke des Gradienten zwischen den zwei Segmenten) verglichen und zusammengeführt werden.

Verwandte Themen