Bagaimana cara membuat cembung lambung dari gambar biner?
Saya memiliki gambar biner ( img
) seperti yang ditunjukkan di bawah ini dan saya ingin menghasilkan lambung cembung di wilayah putih.

Saya mencoba menggunakan ConvexHullMesh
tetapi tidak bisa mendapatkan ukuran yang diinginkan dengan latar belakang yang sesuai dengan gambar aslinya.
cv = ComponentMeasurements[
FillingTransform[scleraRough1], {"ConvexVertices", "Mask"}];
cvScaled = Rescale@cv[[1, 2, 1]];
Rasterize@ConvexHullMesh[cvScaled]
Bagaimana saya bisa menghasilkan cembung yang diinginkan (topeng biner yang dikelilingi oleh latar belakang)?
dan saya mendapatkan

Jawaban
Tampaknya Anda bisa langsung melakukannya dengan:
Image@MorphologicalComponents[img, Method -> "ConvexHull"]
Lihat jawaban ini https://mathematica.stackexchange.com/a/189196/72682
Agak canggung, tetapi Anda bisa membuat mereka berbaris menggunakan Inset
. Saya telah menunjukkan batas di bawah ini, tetapi jika Anda menginginkan wajah, hapus saja RegionBoundary
. Saya juga menggunakan ImageValuePositions
piksel yang centered offset 0,5, bukan 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}]

Untuk mendapatkan image mask Anda bisa melakukan:
gr = Graphics[{Inset[img, {0, 0}, {0, 0}, dims], White, cvx},
PlotRangePadding -> None, PlotRange -> Transpose@{{0, 0}, dims}];
Image[gr, ImageSize -> ImageDimensions[img]]
