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
Bild nach Hintergrund Eliminierung unter Verwendung von K-Means-Cluster-Algorithmus und Wende Segmentation auf Originalbild überlagert
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
@Phonon Sorry der Code ist schlecht eingerückt aber bitte helfen Sie mir die Lösung. –
Welches Blatt möchten Sie extrahieren? – vini
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? –