⚠️ Este es un sitio de traducción no oficial, sin relación con ImageMagick Studio LLC. Para información autorizada, consulte la página original (https://imagemagick.org/convex-hull/).

Envolvente convexa y caja delimitadora mínima

Envolvente convexa • Caja delimitadora mínima • Corregir la rotación de una imagen

La envolvente convexa (convex hull) es el polígono convexo de menor área que contiene el conjunto de puntos en su interior. La envolvente convexa puede visualizarse como la forma delimitada por una banda elástica estirada alrededor del conjunto de puntos.

El formato de cadena convex-hull devuelve una lista de coordenadas x,y de los vértices del polígono de la envolvente convexa que contiene todos los píxeles no negros en su interior.

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

Use %[convex-hull:extreme-points] para devolver únicamente los puntos extremos superior, derecho, inferior e izquierdo.

Aquí el formato de cadena es sensible a un valor opcional -fuzz y a un color de fondo opcional especificado mediante define. El comando anterior encontrará automáticamente el color de fondo según el valor de fuzz, a menos que el color de fondo esté definido. El valor de fuzz es 0 de forma predeterminada cuando no se especifica.

Por ejemplo, considere el siguiente rectángulo blanco sobre un fondo negro:

[Convex Hull]

El conjunto de puntos de la envolvente convexa puede calcularse así:

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

La envolvente convexa también puede dibujarse como un polígono (relleno o sin relleno) usando -draw de la siguiente manera:

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

Aquí hay un ejemplo que usa una imagen con forma no convexa sobre un fondo negro:

[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]

Por último, aquí hay un ejemplo con un fondo no constante y no negro que usa -fuzz para determinar el color de fondo:

[Convex Hull Barn]

Ahora resaltemos la envolvente convexa del objeto de primer plano de la imagen:

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]

Caja delimitadora mínima

Similar a la envolvente convexa de los objetos de primer plano de la imagen es la caja delimitadora mínima (minimum bounding box). Use %[minimum-bounding-box] para devolver los puntos que componen la caja delimitadora. Además, se establecen estas propiedades: minimum-bounding-box:area, minimum-bounding-box:width, minimum-bounding-box:height y 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

Corregir la rotación de una imagen

Use %[minimum-bounding-box:unrotate] para corregir cualquier rotación que pueda presentar la imagen. A menos que especifique la orientación de la imagen, el ángulo de corrección debería alinear correctamente la imagen con el eje de coordenadas adecuado para ángulos <= 45. Para ángulos > 45, la imagen se alineará con el eje de coordenadas equivocado. Establezca la orientación correcta de la imagen para garantizar que se devuelva el ángulo de corrección adecuado. Use -define minimum-bounding-box:orientation={landscape,portrait} para establecer la orientación de la imagen. Tenga en cuenta que, al igual que convex-hull, el formato de cadena es sensible a un valor opcional -fuzz y a un color -background opcional.

La imagen del granero anterior está rotada 20 grados. Así es como podemos corregir automáticamente la rotación y devolverla a su orientación horizontal (landscape) original:

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