Hoe maak je een binair masker van een afbeelding

Beschouw een afbeelding (img) als

voer hier de afbeeldingsbeschrijving in

Ik wil een binair masker maken dat bedek precies de voorgrond.

Als ik het volgende doe

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

krijg ik

voer de beschrijving van de afbeelding hier in

Je kunt zien dat de kop niet helemaal wit is zoals gewenst en dit kan vanwege het feit dat de onderkant van het hoofd is verbonden met de grens van het beeld. Ten tweede zijn bij de hals (zoals aangegeven door de groene lijn) sommige pixels zwart, wat wit zou moeten zijn.

voer hier de afbeeldingbeschrijving in

Hoe kan ik deze twee problemen oplossen?

Opmerkingen

  • Je kunt MorphologicalBinarize proberen in plaats van Binarize en ook spelen met het tweede argument.
  • MorphologicalBinarize[img, {.1, .5}, CornerNeighbors -> False] is een goed startpunt.

Antwoord

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

afbeelding

Een afgevlakte omtrek (met dank aan Rahul ):

Binarize@CurvatureFlowFilter[img2, 3] 

afbeelding

Antwoord

Deze benadering maakt gebruik van ImageData werken aan de lijnen, in plaats van aan het hele beeld. Na een paar manipulaties detecteert het de eerste en laatste witte pixel op elke regel en verandert het hele segment in 1 (dwz wit).

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 

voer hier de beschrijving van de afbeelding in

Antwoord

Met GrowCutComponents[] kan men dit verkrijgen:

voer de beschrijving van de afbeelding hier in

Een beetje tillen met dilatatie / erosie zal waarschijnlijk het resultaat verbeteren.

Hoe GrowCutComponents[] te gebruiken?

je moet de 2 maskers maken en het volgende evalueren:

voer de beschrijving van de afbeelding hier in

Men kan de maskers maken met tekengereedschappen zie hier

Antwoord

Hier is een andere oplossing gemotiveerd door Alexey.

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

Het resultaat is:

voer de beschrijving van de afbeelding hier in

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *