Jak vytvořit binární masku obrázku

Považujte obrázek (img) za

zde zadejte popis obrázku

Chci vytvořit binární masku, která bude přesně pokrýt popředí.

Pokud provedu následující

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

dostanu

zde zadejte popis obrázku

Můžete vidět, že hlava není zcela bílá podle přání a může být vzhledem k tomu, že spodní část hlavy je spojena s hranicí obrazu. Zadruhé, poblíž krku (jak je naznačeno zelenou čarou) jsou některé pixely černé, které by měly být bílé.

zde zadejte popis obrázku

Jak mohu vyřešit tyto dva problémy?

Komentáře

  • Můžete zkusit MorphologicalBinarize místo Binarize a pohrát si také s druhým argumentem.
  • MorphologicalBinarize[img, {.1, .5}, CornerNeighbors -> False] je dobrým výchozím bodem.

Odpověď

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

obrázek

Vyhlazený obrys (díky Rahul ):

Binarize@CurvatureFlowFilter[img2, 3] 

obrázek

Odpověď

Tento přístup používá ImageData pracovat na řádcích, spíše než na celém obrázku. Po několika manipulacích detekuje první a poslední bílý pixel na každém řádku a otočí celý segment na 1 (tj. Bílý).

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 

zde zadejte popis obrázku

Odpověď

Pomocí GrowCutComponents[] lze získat toto:

zde zadejte popis obrázku

Výsledek pravděpodobně vylepší trochu zvednutí pomocí funkce Dilatace / Eroze.

Jak používat GrowCutComponents[]?

Musíte vytvořit dvě masky a vyhodnotit následující:

zde zadejte popis obrázku

Masky lze vytvořit pomocí Nástroje pro kreslení viz zde

Odpověď

Zde je další řešení motivované Alexeyem.

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

The výsledek je:

zde zadejte popis obrázku

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *