ฉันจะสร้างตัวถังนูนของภาพไบนารีได้อย่างไร?
Aug 17 2020
ฉันมีภาพไบนารี ( img
) ดังที่แสดงด้านล่างและฉันต้องการสร้างตัวถังนูนของพื้นที่สีขาว

ฉันพยายามใช้ConvexHullMesh
แต่ไม่สามารถหาขนาดที่ต้องการพร้อมพื้นหลังเพื่อให้พอดีกับภาพต้นฉบับได้
cv = ComponentMeasurements[
FillingTransform[scleraRough1], {"ConvexVertices", "Mask"}];
cvScaled = Rescale@cv[[1, 2, 1]];
Rasterize@ConvexHullMesh[cvScaled]
ฉันจะสร้างตัวถังนูนที่ต้องการได้อย่างไร (มาสก์ไบนารีที่ล้อมรอบด้วยพื้นหลัง)
และฉันได้รับ

คำตอบ
3 flinty Aug 17 2020 at 19:20
เห็นได้ชัดว่าคุณสามารถทำได้ทันทีด้วย:
Image@MorphologicalComponents[img, Method -> "ConvexHull"]
ดูคำตอบนี้ https://mathematica.stackexchange.com/a/189196/72682
มันอึดอัดเล็กน้อย Inset
แต่คุณสามารถได้รับพวกเขาเข้าแถวใช้ ฉันได้แสดงขอบเขตด้านล่างแล้ว แต่ถ้าคุณต้องการใบหน้าให้ลบRegionBoundary
. ฉันยังใช้ImageValuePositions
ซึ่งมีศูนย์กลางพิกเซลชดเชย 0.5 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}]

ในการรับมาสก์รูปภาพคุณสามารถทำได้:
gr = Graphics[{Inset[img, {0, 0}, {0, 0}, dims], White, cvx},
PlotRangePadding -> None, PlotRange -> Transpose@{{0, 0}, dims}];
Image[gr, ImageSize -> ImageDimensions[img]]
