Convex hull • Kotak pembatas minimum • Meluruskan rotasi gambar
Convex hull adalah poligon cembung dengan luas terkecil yang memuat himpunan titik di dalamnya. Convex hull dapat dibayangkan sebagai bentuk yang dilingkupi oleh karet gelang yang direntangkan mengelilingi himpunan titik tersebut.
Format string convex-hull mengembalikan daftar koordinat x,y dari titik-titik sudut poligon convex hull yang memuat semua piksel non-hitam di dalamnya.
magick [-fuzz value%] [-background background-color] -format "%[convex-hull]" info:
Gunakan %[convex-hull:extreme-points] untuk hanya mengembalikan titik ekstrem atas, kanan, bawah, dan kiri.
Format string ini peka terhadap nilai -fuzz opsional dan terhadap warna latar belakang opsional yang ditentukan melalui define. Perintah di atas akan menemukan warna latar belakang secara otomatis berdasarkan nilai fuzz, kecuali warna latar belakang telah ditentukan. Nilai fuzz secara default adalah 0 jika tidak ditentukan.
Sebagai contoh, perhatikan persegi panjang putih berikut pada latar belakang hitam:
![[Convex Hull]](../static/img/convex-hull.png)
Himpunan titik convex hull dapat dihitung sebagai berikut:
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
Convex hull juga dapat digambar sebagai poligon (terisi atau tidak terisi) menggunakan -draw sebagai berikut:
magick rect.png -set option:hull "%[convex-hull]" -fill none -stroke red -strokewidth 1 -draw "polygon %[hull]" blocks_hull.png
Berikut adalah contoh menggunakan gambar berbentuk non-cembung pada latar belakang hitam:
![[Convex Hull Blocks]](../static/img/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]](../static/img/convex-hull-blocks-closure.png)
Terakhir, berikut adalah contoh dengan latar belakang non-konstan dan non-hitam yang menggunakan -fuzz untuk menentukan warna latar belakang:
![[Convex Hull Barn]](../static/img/convex-hull-barn.jpg)
Sekarang mari kita soroti convex hull dari objek latar depan gambar:
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]](../static/img/convex-hull-barn-closure.jpg)
Kotak pembatas minimum
Serupa dengan convex hull dari objek latar depan gambar, terdapat kotak pembatas minimum (minimum bounding box). Gunakan %[minimum-bounding-box] untuk mengembalikan titik-titik yang membentuk kotak pembatas tersebut. Selain itu, properti berikut ditetapkan: minimum-bounding-box:area, minimum-bounding-box:width, minimum-bounding-box:height, dan 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
Meluruskan rotasi gambar
Gunakan %[minimum-bounding-box:unrotate] untuk mengoreksi rotasi apa pun yang mungkin dimiliki gambar. Kecuali Anda menentukan orientasi gambar, sudut unrotate seharusnya menyelaraskan gambar dengan benar ke sumbu koordinat yang tepat untuk sudut <= 45. Untuk sudut > 45, gambar akan sejajar dengan sumbu koordinat yang salah. Tetapkan orientasi gambar yang benar agar sudut unrotate yang tepat dikembalikan. Gunakan -define minimum-bounding-box:orientation={landscape,portrait} untuk menetapkan orientasi gambar. Perlu diperhatikan, seperti convex-hull, format string ini peka terhadap nilai -fuzz opsional dan warna -background opsional.
Gambar lumbung di atas dirotasi 20 derajat. Berikut cara kita dapat secara otomatis mengoreksi rotasi tersebut dan mengembalikannya ke orientasi landscape aslinya:
magick barn_rotate20.jpg -fuzz 15% -set option:angle "%[minimum-bounding-box:unrotate]" -background gray -rotate "%[angle]" -trim barn_unrotate.jpg