Binaarisen maskin luominen kuvasta

Harkitse kuvaa (img) nimellä

kirjoita kuvan kuvaus tähän

Haluan luoda binaarisen maskin, joka peitä etuala tarkasti.

Jos teen seuraavat

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

Saan

kirjoita kuvakuvaus tähän

Voit nähdä, että pää ei ole täysin valkoinen toivotulla tavalla, ja tämä voi olla johtuu siitä, että pään pohja on kytketty kuvan rajaan. Toiseksi, lähellä kaulaa (vihreän viivan osoittamalla tavalla), jotkut pikselit ovat mustia, joiden pitäisi olla valkoisia.

kirjoita kuvan kuvaus tähän

Kuinka voin korjata nämä kaksi ongelmaa?

Kommentit

  • Voit kokeilla MorphologicalBinarize Binarize -kohdan sijaan ja pelata myös toisella argumentilla.
  • MorphologicalBinarize[img, {.1, .5}, CornerNeighbors -> False] on hyvä lähtökohta.

Vastaa

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

kuva

Tasattu ääriviiva (kiitos Rahul ):

Binarize@CurvatureFlowFilter[img2, 3] 

kuva

vastaus

Tämä lähestymistapa käyttää ImageData työskennellä viivojen sijaan koko kuvan kanssa. Muutaman käsittelyn jälkeen se tunnistaa jokaisen rivin ensimmäisen ja viimeisen valkoisen pikselin ja kääntää koko segmentin 1 (eli valkoiseksi).

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 

kirjoita kuvan kuvaus tähän

Vastaa

GrowCutComponents[] -sovelluksella voit saada tämän:

kirjoita kuvan kuvaus tähän

Hieman nostaminen Dilatation / Erosion -toiminnolla parantaa tulosta.

Kuinka käyttää GrowCutComponents[]?

sinun on luotava 2 naamiota ja arvioitava seuraavat:

kirjoita kuvan kuvaus tähän

Maskit voidaan luoda piirtotyökaluilla katso täältä

Vastaa

Tässä on toinen ratkaisu, jonka motivoi Alexey.

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

tulos on:

kirjoita kuvan kuvaus tähän

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *