Entfernen Sie Schatten aus dem Bild

7

Ich möchte nur die Trauben aus den Bildern extrahieren. Leider bekomme ich manchmal die Trauben nicht genau.

Ich habe einen Code, der nicht in allen Fällen gut funktioniert. Manchmal unterscheidet es nicht zwischen den Schatten und den Trauben.

Das Beispiel Eingabebild:

Geben Sie hier die Bildbeschreibung ein

Das Ergebnis bekomme ich:

Geben Sie hier die Bildbeschreibung ein

Und das ist mein Code:

RGB = imread('DSC02807.JPG');
GRAY = rgb2gray(RGB);

threshold = graythresh(GRAY);
originalImage = im2bw(GRAY, threshold);

originalImage = bwareaopen(originalImage,250);

SE = strel('disk',10);
IM2 = imclose(originalImage,SE);

originalImage = IM2;

imshow(originalImage);
Alon Shmiel
quelle
Ich denke, diese Frage ist angemessener bei SE dsp ...
bla
@nate, danke .. aber was bedeutet SE dsp? Ich habe gelesen, dass es eine kleine Umgebung ist, aber ich weiß nicht wirklich: / Kannst du mir bitte etwas darüber erzählen?
Alon, ich habe Ihren Code getestet und verstehe wirklich nicht, was daran nicht korrekt ist. es filtert die Schatten sehr gut heraus.
Bla
3
@Alon Shmiel Das von Ihnen bereitgestellte Eingabe / Ausgabe-Paar scheint gute Ergebnisse zu liefern. Vielleicht könnten Sie spezifisch darauf hinweisen, wo das Problem in dieser bestimmten Ausgabe liegt, oder alternativ ein Eingabe / Ausgabe-Bildpaar veröffentlichen, bei dem die Probleme leichter sichtbar sind?
Penelope
1
Ich denke, das ursprüngliche Problem von Alon ist, die dunklen Schatten direkt unter jeder Traube zu entfernen und nicht diejenigen, die wie ein länglicher Zylinder aussehen. Sie müssen nur die Traube genau segmentieren - die Formen sehen seltsam aus und nicht oval oder kreisförmig, da die Schatten. Oder sind sie nicht Schatten, sondern die dünnste Außenhaut der Traube, die das Licht bricht, um so auszusehen?

Antworten:

8

Dies ist, was Ihr Code erzeugt (unter Verwendung von Farbkarte (heiß) mit weißen Grenzen, die von IM2 erhalten werden): Geben Sie hier die Bildbeschreibung ein

Ich denke, die Schatten werden gut behandelt. Warum denken Sie, dass Ihr Code zwischen Schatten und Trauben nichts bemerkt?

Dies ist der Code, der zur Erstellung dieses Bildes verwendet wird

bw=IM2<1;
[B,L] = bwboundaries(bw,'noholes'); % fill any holes, so that regionprops can be used to estimate
imagesc(GRAY); hold on
for k = 1:length(B) 
    boundary = B{k};
    plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 1); hold on
end
colormap(hot(256))
bla
quelle
1
Ich stimme zu, die Schatten sehen gut aus. Stattdessen sind es die Highlights auf den Trauben (siehe zum Beispiel die Trauben 4 und 5 in der obersten Zeile), die einige Unregelmäßigkeiten verursachen.
Junuxx
1
Diese Antwort gibt die beste Erklärung. @Alon Shmiel: Bitte seien Sie genauer über das Problem in Bezug auf die Schatten und veröffentlichen Sie ein Beispiel, wo es nicht passt.
Herzliche