Como posso gerar um casco convexo de uma imagem binária?
Eu tenho uma imagem binária ( img
) conforme mostrado abaixo e desejo gerar um casco convexo da região branca.

Tentei usar ConvexHullMesh
mas não consegui obter o tamanho desejado com o fundo para caber na imagem original.
cv = ComponentMeasurements[
FillingTransform[scleraRough1], {"ConvexVertices", "Mask"}];
cvScaled = Rescale@cv[[1, 2, 1]];
Rasterize@ConvexHullMesh[cvScaled]
Como posso gerar o casco convexo desejado (uma máscara binária cercada pelo fundo)?
e eu recebo

Respostas
Aparentemente, você pode fazer isso imediatamente com:
Image@MorphologicalComponents[img, Method -> "ConvexHull"]
Veja esta respostahttps://mathematica.stackexchange.com/a/189196/72682
É um pouco estranho, mas você pode alinhá-los usando Inset
. Mostrei o limite abaixo, mas se você quiser o rosto, basta remover o RegionBoundary
. Também usei ImageValuePositions
deslocamentos centrados em pixels em 0,5, em vez de PixelValuePositions
.
img = Import["https://i.stack.imgur.com/3ndPk.png"] // Binarize;
(* remove the border *)
img = ImageTake[img, {2, -2}, {2, -2}];
dims = ImageDimensions[img];
cvx = ConvexHullMesh[ImageValuePositions[img, 1]];
Graphics[{Inset[img, {0, 0}, {0, 0}, dims], Red, RegionBoundary[cvx]},
PlotRangePadding -> None, PlotRange -> Transpose@{{0, 0}, dims}]

Para obter a máscara de imagem, você pode fazer:
gr = Graphics[{Inset[img, {0, 0}, {0, 0}, dims], White, cvx},
PlotRangePadding -> None, PlotRange -> Transpose@{{0, 0}, dims}];
Image[gr, ImageSize -> ImageDimensions[img]]
