凸包 • 最小バウンディングボックス • 画像の回転解除
凸包とは、内部の点の集合を包含する最小の面積を持つ凸多角形です。凸包は、点の集合の周りにゴムバンドを伸ばした形状として視覚化できます。
凸包の文字列形式は、内部の黒以外のすべてのピクセルを含む凸包多角形の頂点のx,y座標のリストを返します。
magick [-fuzz value%] [-background background-color] -format "%[convex-hull]" info:
上、右、下、左の極値点のみを返すには、%[convex-hull:extreme-points]を使用します。
ここで、文字列形式はオプションの-fuzz値と、定義で指定されたオプションの背景色に影響されます。上記のコマンドは、背景色が定義されていない限り、ファジー値に従って背景色を自動的に検出します。ファジー値が指定されていない場合は、デフォルトで0になります。
例として、黒の背景にある次の白い長方形を考えてみましょう。
![[Convex Hull]](/script/../image/convex-hull.png)
凸包の点の集合は、次のように計算できます。
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
黒の背景上に非凸形状の画像を使用する例を次に示します。
![[Convex Hull Blocks]](/script/../image/convex-hull-blocks.png)
magick blocks_black.png -set option:hull "%[convex-hull]" -fill none -stroke red -strokewidth 1 -draw "polygon %[hull]" blocks_hull.png
![[Convex Hull Blocks Closure]](/script/../image/convex-hull-blocks-closure.png)
最後に、背景色が一定ではなく、黒ではない場合に、-fuzzを使用して背景色を決定する例を次に示します。
![[Convex Hull Barn]](/script/../image/convex-hull-barn.jpg)
次に、画像の前景オブジェクトの凸包を強調表示してみましょう。
magick barn_rot20.png -fuzz 10% -set hull "%[convex-hull]" -fill none -stroke red -strokewidth 1 -draw "polygon %[hull]" barn_rot20_hull.png
![[Convex Hull Barn Closure]](/script/../image/convex-hull-barn-closure.jpg)
最小バウンディングボックス
画像の前景オブジェクトの凸包と同様に、最小バウンディングボックスがあります。%[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