⚠️ Ceci est un site de traduction non officiel, sans lien avec ImageMagick Studio LLC. Pour des informations officielles, consultez la page originale (https://imagemagick.org/convex-hull/).

Boîte englobante minimale

Enveloppe convexe • Boîte englobante minimale • Redresser une image

L'enveloppe convexe est le polygone convexe de plus petite aire contenant l'ensemble des points situés à l'intérieur. L'enveloppe convexe peut être visualisée comme la forme délimitée par un élastique tendu autour de l'ensemble des points.

Le format de chaîne convex-hull renvoie une liste de coordonnées x,y des sommets du polygone de l'enveloppe convexe contenant tous les pixels non noirs qui s'y trouvent.

magick [-fuzz value%] [-background background-color] -format "%[convex-hull]" info:

Utilisez %[convex-hull:extreme-points] pour ne renvoyer que les points extrêmes en haut, à droite, en bas et à gauche.

Ici, le format de chaîne est sensible à une valeur -fuzz optionnelle et à une couleur de fond optionnelle spécifiée par le define. La commande ci-dessus trouvera automatiquement la couleur de fond selon la valeur fuzz, sauf si la couleur de fond est définie. La valeur fuzz vaut 0 par défaut lorsqu'elle n'est pas spécifiée.

Par exemple, considérons le rectangle blanc suivant sur un fond noir :

[Convex Hull]

L'ensemble de points de l'enveloppe convexe peut être calculé comme suit :

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

L'enveloppe convexe peut aussi être dessinée comme un polygone (rempli ou non) à l'aide de -draw comme suit :

magick rect.png -set option:hull "%[convex-hull]" -fill none -stroke red -strokewidth 1 -draw "polygon %[hull]" blocks_hull.png

Voici un exemple utilisant une image de forme non convexe sur un fond noir :

[Convex Hull Blocks]

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]

Enfin, voici un exemple avec un fond non uniforme et non noir, utilisant -fuzz pour déterminer la couleur de fond :

[Convex Hull Barn]

Mettons maintenant en évidence l'enveloppe convexe de l'objet de premier plan de l'image :

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]

Boîte englobante minimale

Semblable à l'enveloppe convexe du ou des objets de premier plan de l'image, la boîte englobante minimale (minimum bounding box). Utilisez %[minimum-bounding-box] pour renvoyer les points qui composent la boîte englobante. De plus, ces propriétés sont définies : minimum-bounding-box:area, minimum-bounding-box:width, minimum-bounding-box:height et 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

Redresser une image

Utilisez %[minimum-bounding-box:unrotate] pour corriger toute rotation que l'image pourrait présenter. Sauf si vous spécifiez l'orientation de l'image, l'angle de redressement doit aligner correctement l'image sur le bon axe de coordonnées pour les angles <= 45. Pour les angles > 45, l'image s'alignera sur le mauvais axe de coordonnées. Définissez l'orientation correcte de l'image pour garantir que l'angle de redressement approprié est renvoyé. Utilisez -define minimum-bounding-box:orientation={landscape,portrait} pour définir l'orientation de l'image. Notez que, comme pour convex-hull, le format de chaîne est sensible à une valeur -fuzz optionnelle et à une couleur -background optionnelle.

L'image de la grange ci-dessus est pivotée de 20 degrés. Voici comment corriger automatiquement la rotation et la ramener à son orientation paysage (landscape) d'origine :

magick barn_rotate20.jpg -fuzz 15% -set option:angle "%[minimum-bounding-box:unrotate]" -background gray -rotate "%[angle]" -trim barn_unrotate.jpg