凸包是指包含一组点集的最小面积凸多边形。可以将凸包想象成围绕点集拉伸的橡皮筋所围成的形状。
凸包字符串格式返回包含其中所有非黑色像素的凸包多边形的顶点坐标列表。
magick [-fuzz value%] [-background background-color] -format "%[convex-hull]" info:
使用 %[convex-hull:extreme-points] 仅返回顶部、右侧、底部和左侧的极值点。
其中字符串格式对可选的 -fuzz 值和由 define 指定的可选背景颜色敏感。除非定义了背景颜色,否则上述命令将根据模糊值自动查找背景颜色。未指定模糊值时,其默认为 0。
例如,考虑以下黑色背景上的白色矩形
可以将凸包点集计算为
magick rect.png -format "%[convex-hull]" info: 190,121 193,122 281,154 377,189 378,190 377,193 345,281 310,377 309,378 306,377 218,345 122,310 121,309 122,306 154,218 189,122 190,121
还可以使用 -draw 将凸包绘制为多边形(填充或未填充),如下所示
magick rect.png -set option:hull "%[convex-hull]" -fill none -stroke red -strokewidth 1 -draw "polygon %[hull]" blocks_hull.png
这是一个在黑色背景上使用非凸形图像的示例
magick blocks_black.png -set option:hull "%[convex-hull]" -fill none -stroke red -strokewidth 1 -draw "polygon %[hull]" blocks_hull.png
最后,这是一个使用 -fuzz 确定背景颜色的非恒定、非黑色背景的示例
现在让我们突出显示图像前景对象的凸包
magick barn_rot20.png -fuzz 10% -set hull "%[convex-hull]" -fill none -stroke red -strokewidth 1 -draw "polygon %[hull]" barn_rot20_hull.png
最小外接矩形
与图像前景对象(s)的凸包类似,还有最小外接矩形。使用 %[minimum-bounding-box] 返回构成外接矩形的点。此外,还设置了以下属性:minimum-bounding-box:area、minimum-bounding-box:width、minimum-bounding-box:height 和 minimum-bounding-box:angle。
magick barn_rot20.png -fuzz 10% -background gray25 -set MBR "%[minimum-bounding-box]" -fill none -stroke red -strokewidth 1 -draw "polygon %[MBR]" barn-mbr.png
图像旋转校正
使用 %[minimum-bounding-box:unrotate] 校正图像可能存在的任何旋转。除非指定图像方向,否则旋转校正角度应将图像正确对齐到 <= 45 度的坐标轴。对于 > 45 度的角度,图像将与错误的坐标轴对齐。设置正确的图像方向以确保返回正确的旋转校正角度。使用 -define minimum-bounding-box:orientation={landscape,portrait} 设置图像方向。请注意,与凸包一样,字符串格式对可选的 -fuzz 值和可选的 -background 颜色敏感。
上面的谷仓图像旋转了 20 度。以下是如何自动校正旋转并将其恢复到原始横向方向
magick barn_rotate20.jpg -fuzz 15% -set option:angle "%[minimum-bounding-box:unrotate]" -background gray -rotate "%[angle]" -trim barn_unrotate.jpg