İkili bir görüntünün dışbükey bir gövdesini nasıl oluşturabilirim?
img
Aşağıda gösterildiği gibi ikili bir resmim var ( ) ve beyaz bölgenin dışbükey bir gövdesini oluşturmak istiyorum.

Kullanmaya çalıştım ConvexHullMesh
ancak orijinal görüntüye sığdırmak için arka planla istediğim boyuta ulaşamadım.
cv = ComponentMeasurements[
FillingTransform[scleraRough1], {"ConvexVertices", "Mask"}];
cvScaled = Rescale@cv[[1, 2, 1]];
Rasterize@ConvexHullMesh[cvScaled]
İstenilen dışbükey gövdeyi (arka planla çevrili bir ikili maske) nasıl oluşturabilirim?
ve anladım

Yanıtlar
Görünüşe göre bunu hemen şu şekilde yapabilirsiniz:
Image@MorphologicalComponents[img, Method -> "ConvexHull"]
Bu cevaba bakın https://mathematica.stackexchange.com/a/189196/72682
Biraz garip ama onları kullanarak sıraya koyabilirsiniz Inset
. Aşağıda sınırı gösterdim, ancak yüzü istiyorsanız, sadece RegionBoundary
. Ayrıca ImageValuePositions
, piksel merkezli ofset yerine 0,5 olanları da kullandım 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}]

Görüntü maskesini almak için şunları yapabilirsiniz:
gr = Graphics[{Inset[img, {0, 0}, {0, 0}, dims], White, cvx},
PlotRangePadding -> None, PlotRange -> Transpose@{{0, 0}, dims}];
Image[gr, ImageSize -> ImageDimensions[img]]
