3

Ich habe zwei Bilder:Erhalten eines großen Klecks in einem binären Bild zu befreien, aber hält kleineren Blobs in Python mit PIL oder skimage

enter image description here enter image description here

Exuse die andere Auflösung, aber das ist nicht der Punkt. Auf der linken Seite habe ich einen "großen" Blob aufgrund einer Kamerareflexion. Ich möchte diesen Blob loswerden und den Blob schließen. Aber auf der rechten Seite habe ich kleinere Blobs, die wertvolle Informationen sind, die ich behalten muss. Beide Bilder müssen denselben Algorithmus durchlaufen. Wenn ich eine einfache Öffnung benutze, sind die kleineren Blobs auch weg. Gibt es eine einfache Möglichkeit, dies in Python mit skimage oder/und PIL zu implementieren?

In einer perfekten Welt sollte das linke Bild nur einen weißen Kreis bilden, wo das rechte Bild die schwarzen Punkte innerhalb des weißen Kreises haben sollte. Es ist in Ordnung, die Größe der schwarzen Punkte auf dem rechten Bild zu ändern.

Hier ist ein Bild, das das Problem auf dem Bild direkt enter image description here

+0

sprechen Sie über die schwarzen Flecken innerhalb der weißen Fläche oder was? Fügen Sie Ihrem Bild einige Anmerkungen hinzu. Stellen Sie auch Ihr Eingangsbild bereit. dein "großer blob" hat auch kleine in der nähe, sollen sie auch? – Piglet

+0

ja das ist was ich meinte. Ich hoffe, das neue Bild räumt das auf, danke für deinen Vorschlag. – Kev1n91

+0

Du könntest alle schwarzen Blobs erkennen und einen Schwellwert setzen, so dass Blobs, die größer als der Schwellwert sind, gelöscht werden. – ebeneditos

Antwort

1

Ok beschreiben sollte. Also bevor ich antworte. Ich muss Ihnen sagen, dass dies ein hackischer Weg ist und keinen wissenschaftlichen Hintergrund hat.

from skimage import io, measure 
import numpy as np 
img = io.imread('img.png', as_grey=True) 
img = np.invert(img>0) 
labeled_img = measure.label(img) 
labels = np.unique(labeled_img) 
newimg = np.zeros((img.shape[0],img.shape[1])) 
for label in labels: 
    if np.sum(labeled_img==label) < 250: 
     newimg = newimg + (labeled_img==label) 
io.imshow(newimg) 
io.show() 

Da dies ein hackish Weg, ich weiß, dass ich bemerkt haben sollte eher beantwortet, aber ich habe nicht genug Punkte zu kommentieren.

Verwandte Themen