⚠️ Este é um site de tradução não oficial, sem relação com a ImageMagick Studio LLC. Para informações oficiais, consulte a página original (https://imagemagick.org/convex-hull/).

Envoltória Convexa e Caixa Delimitadora Mínima

Envoltória Convexa • Caixa Delimitadora Mínima • Corrigir a Rotação de uma Imagem

A envoltória convexa (convex hull) é o polígono convexo de menor área que contém o conjunto de pontos em seu interior. A envoltória convexa pode ser visualizada como a forma delimitada por um elástico esticado em torno do conjunto de pontos.

O formato de string convex-hull retorna uma lista de coordenadas x,y dos vértices do polígono da envoltória convexa que contém todos os pixels não pretos em seu interior.

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

Use %[convex-hull:extreme-points] para retornar apenas os pontos extremos superior, direito, inferior e esquerdo.

Aqui o formato de string é sensível a um valor -fuzz opcional e a uma cor de fundo opcional especificada pela define. O comando acima encontrará a cor de fundo automaticamente de acordo com o valor de fuzz, a menos que a cor de fundo seja definida. O valor de fuzz tem como padrão 0 quando não especificado.

Por exemplo, considere o seguinte retângulo branco sobre um fundo preto:

[Convex Hull]

O conjunto de pontos da envoltória convexa pode ser calculado assim:

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

A envoltória convexa também pode ser desenhada como um polígono (preenchido ou não) usando -draw da seguinte forma:

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

Aqui está um exemplo usando uma imagem de forma não convexa sobre um fundo preto:

[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 fim, aqui está um exemplo com um fundo não constante e não preto, usando -fuzz para determinar a cor de fundo:

[Convex Hull Barn]

Agora vamos destacar a envoltória convexa do objeto em primeiro plano da imagem:

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]

Caixa Delimitadora Mínima

Semelhante à envoltória convexa do(s) objeto(s) em primeiro plano da imagem está a caixa delimitadora mínima (minimum bounding box). Use %[minimum-bounding-box] para retornar os pontos que compõem a caixa delimitadora. Além disso, estas propriedades são definidas: minimum-bounding-box:area, minimum-bounding-box:width, minimum-bounding-box:height e 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

Corrigir a Rotação de uma Imagem

Use %[minimum-bounding-box:unrotate] para corrigir qualquer rotação que a imagem possa apresentar. A menos que você especifique a orientação da imagem, o ângulo de correção da rotação deve alinhar corretamente a imagem ao eixo de coordenadas correto para ângulos <= 45. Para ângulos > 45, a imagem se alinhará ao eixo de coordenadas errado. Defina a orientação correta da imagem para garantir que o ângulo de correção de rotação adequado seja retornado. Use -define minimum-bounding-box:orientation={landscape,portrait} para definir a orientação da imagem. Observe que, assim como em convex-hull, o formato de string é sensível a um valor -fuzz opcional e a uma cor -background opcional.

A imagem do celeiro acima está rotacionada em 20 graus. Veja como podemos corrigir automaticamente a rotação e devolvê-la à sua orientação horizontal (landscape) original:

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