Hogyan készítsünk egy bináris maszkot egy képről

Tekintsünk egy képet (img)

ide írja be a kép leírását

Szeretnék létrehozni egy bináris maszkot, amely pontosan fedje le az előteret.

Ha a következőt teszem

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

kapok

írja ide a kép leírását

Láthatja, hogy a fej nem teljesen fehér a kívánt módon, és ez lehet annak a ténynek köszönhető, hogy a fej alja a kép határához kapcsolódik. Másodszor, a nyak közelében (amint azt a zöld vonal jelzi) néhány képpont fekete, amelynek fehérnek kell lennie.

írja ide a kép leírását

Hogyan tudom megoldani ezt a két problémát?

Megjegyzések

  • Kipróbálhatja a MorphologicalBinarize -t a Binarize helyett, és játszhat a második argumentummal is. A “>

jó kiindulópont.

Válasz

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

kép

Sima körvonal (köszönhetően a Rahul -nak):

Binarize@CurvatureFlowFilter[img2, 3] 

kép

Válasz

Ez a megközelítés ImageData az egész kép helyett a vonalakon dolgozni. Néhány manipuláció után észleli az egyes vonalak első és utolsó fehér képpontját, és az egész szegmenst 1 (azaz fehér) állásba fordítja.

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 

írja ide a kép leírását

Válasz

A GrowCutComponents[] használatával ezt meg lehet szerezni:

írja ide a kép leírását

Egy kis emelés a dilatációval / erózióval valószínűleg javítja az eredményt.

Hogyan kell használni az GrowCutComponents[] alkalmazást?

létre kell hoznia a 2 maszkot, és ki kell értékelnie a következőket:

írja ide a kép leírását

A maszkokat a Rajzeszközökkel lehet létrehozni lásd itt

Válasz

Itt van egy másik megoldás, amelyet Alexey motivált.

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

A az eredmény:

írja ide a kép leírását

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük