Come creare una maschera binaria di unimmagine

Considera unimmagine (img) come

inserisci qui la descrizione dellimmagine

Voglio creare una maschera binaria che coprire esattamente il primo piano.

Se eseguo quanto segue

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

ottengo

inserisci qui la descrizione dellimmagine

Puoi vedere che la testa non è completamente bianca come desiderato e potrebbe essere a causa del fatto che la parte inferiore della testa è collegata al confine dellimmagine. In secondo luogo, vicino al collo (come indicato dalla linea verde), alcuni pixel sono neri, che dovrebbero essere bianchi.

inserisci qui la descrizione dellimmagine

Come posso risolvere questi due problemi?

Commenti

  • Puoi provare MorphologicalBinarize invece di Binarize e giocare anche con il secondo argomento.
  • MorphologicalBinarize[img, {.1, .5}, CornerNeighbors -> False] è un buon punto di partenza.

Risposta

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

immagine

Una struttura smussata (grazie a Rahul ):

Binarize@CurvatureFlowFilter[img2, 3] 

immagine

Risposta

Questo approccio utilizza ImageData lavorare sulle linee, piuttosto che sullintera immagine. Dopo alcune manipolazioni, rileva il primo e lultimo pixel bianco su ogni riga e trasforma lintero segmento in 1 (cioè bianco).

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 

inserisci qui la descrizione dellimmagine

Risposta

Con GrowCutComponents[], si può ottenere questo:

inserisci la descrizione dellimmagine qui

Un po di sollevamento con Dilatazione / Erosione probabilmente migliorerà il risultato.

Come usare GrowCutComponents[]?

devi creare le 2 maschere e valutare quanto segue:

inserisci qui la descrizione dellimmagine

Si possono creare le maschere con gli strumenti di disegno vedi qui

Risposta

Ecco unaltra soluzione motivata da Alexey.

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

Il il risultato è:

inserisci qui la descrizione dellimmagine

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *