So erstellen Sie eine binäre Maske eines Bildes

Betrachten Sie ein Bild (img) als

Geben Sie hier die Bildbeschreibung ein.

Ich möchte eine binäre Maske erstellen, die dies ermöglicht Decken Sie den Vordergrund genau ab.

Wenn ich Folgendes tue

b = DeleteSmallComponents@FillingTransform@Binarize[img]; skeleton = SkeletonTransform[b]; pruned = Pruning[skeleton, 1, 1]; mask = InverseDistanceTransform[pruned] 

Ich erhalte

Geben Sie hier die Bildbeschreibung ein.

Sie können sehen, dass der Kopf nicht wie gewünscht vollständig weiß ist aufgrund der Tatsache, dass die Unterseite des Kopfes mit der Bildgrenze verbunden ist. Zweitens sind in der Nähe des Halses (wie durch die grüne Linie angezeigt) einige Pixel schwarz, die weiß sein sollten.

Geben Sie hier die Bildbeschreibung ein.

Wie kann ich diese beiden Probleme beheben?

Kommentare

  • Sie können MorphologicalBinarize anstelle von Binarize versuchen und auch mit dem zweiten Argument spielen.
  • MorphologicalBinarize[img, {.1, .5}, CornerNeighbors -> False] ist ein guter Ausgangspunkt.

Antwort

img2 = FillingTransform@ GeodesicClosing[MorphologicalBinarize[img, {.1, .5}, CornerNeighbors -> False], 10] 

image

Eine geglättete Kontur (dank Rahul ):

Binarize@CurvatureFlowFilter[img2, 3] 

image

Antwort

Dieser Ansatz verwendet ImageData an den Linien arbeiten und nicht am ganzen Bild. Nach einigen Manipulationen erkennt es das erste und letzte weiße Pixel in jeder Zeile und dreht das gesamte Segment auf 1 (dh weiß).

img = Import["https://i.stack.imgur.com/Mw1iJ.png"] edges = EdgeDetect[img, 2] data = ImageData@edges; Table[line = data[[j]]; pos = Flatten@Position[line, 1]; If[Length[pos] > 1, data[[j, pos[[1]] ;; pos[[-1]]]] = 1]; , {j, Length@data}]; Image@data 

Geben Sie hier die Bildbeschreibung ein.

Antwort

Mit GrowCutComponents[] kann man Folgendes erhalten:

Geben Sie hier die Bildbeschreibung ein.

Ein wenig Heben mit Dilatation / Erosion wird wahrscheinlich das Ergebnis verbessern.

Wie verwende ich GrowCutComponents[]?

Sie müssen die 2 Masken erstellen und Folgendes auswerten:

Geben Sie hier die Bildbeschreibung ein.

Sie können die Masken mit den Zeichenwerkzeugen siehe hier

Antwort

Hier ist eine weitere von Alexey motivierte Lösung.

Opening[DeleteSmallComponents[ ColorNegate[ RegionBinarize[img, {{1, 1}}, 0.1, Method -> "MeanEuclidean"]], CornerNeighbors -> False], 1] 

Die Ergebnis ist:

Geben Sie hier die Bildbeschreibung ein

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.