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]](../static/img/convex-hull.png)
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]](../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)
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]](../static/img/convex-hull-barn.jpg)
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]](../static/img/convex-hull-barn-closure.jpg)
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