Tipos De Mosaico - Mosaico | Qué es, características, historia, tipos | Romano, bizantino ...
Mosaico | Qué es, características, historia, tipos | Romano, bizantino ...

Tipos de Mosaico na Processamento de Imagem

Tipos de mosaico mais usados na prática

Omosaico no contexto de processamento de imagem é uma técnica de discretização de tons ou cores, basicamente você transforma uma imagem com muitos níveis de luminosidade ou cores em uma versão com bem menos, usando um padrão geométrico. Diferente do que muita gente pensa, isso não é só sobre estética pixel art — é uma ferramenta real pra geração de halftone, compressão e síntese de textura. Os principais tipos se dividem em duas famílias principais: os baseados em difusão de erro e os de dithering ordenado. Vou listar os que realmente vejo no dia a dia e explicar o que cada um faz sem enrolação.

Dithering por Difusão de Erro (Error Diffusion) O Floyd-Steinberg é o mais conhecido. A ideia é simples: você percorre a imagem pixel a pixel, quantiza cada ponto pros níveis disponíveis e espalha o erro de quantização nos pixels vizinhos ainda não processados. A distribuição padrão manda 7/16 pros direitos, 5/16 pra baixo, 3/16 pra baixo-esquerda e 1/16 pra baixo-direita.

O problema prático dele é que o sentido de varredura importa. Se você escaneia da esquerda pra direita e de cima pra baixo, os artefatos visuais ficam na diagonal inferior direita. Inverte a ordem e os artefatos mudam completamente de direção. Já vi projetos inteiros quebrarem porque alguém mudou a ordem de processamento sem notar que o padrão visual da imagem inteira tinha se degradado. Existe também o dithering de Jarvis, que é basicamente o Floyd-Steinberg com mais vizinhos na fórmula — 7/48, 5/48, 3/48 e assim por diante. O resultado tende a ser mais granulado mas com menos direcionalidade. Em algumas implementações de printer driver que eu trabalhei, o Jarvis dava melhor aparência em impressões preto-e-branco do que o Floyd-Steinberg, especialmente em áreas de tom médio onde o Floyd gerava aquelas listras diagonaischatas.

Dithering Ordenado (Ordered Dithering) Aqui a coisa muda. Em vez de espalhar erro, você compara cada pixel a uma matriz de limiar fixa. A matriz mais famosa é a Bayer de 4x4, que tem os valores 0, 8, 2, 10 em uma grade. Se o valor normalizado do pixel for maior que o valor na matriz naquela posição, vira branco, senão preto. Matrizes maiores (8x8, 16x16) produzem padrões mais finos e menos perceptíveis a olho nu.

A vantagem principal é que o dithering ordenado é determinístico e paralelizável — você pode processar qualquer pixel sem depender do anterior. Isso é relevante se você tá implementando num shader de GPU ou num pipeline distribuído. O desvantagem é óbvía: o padrão se repete periodicamente e em regiões uniformes da imagem você vê claramente a grade do dither, o que é feio. Tem uma variação que muita gente não conhece e que é útil: o dithering ordenado com matriz clusterizada. Ao invés de pontos isolados, a matriz cria clusters circulares que crescem conforme o nível de cinza. Isso simula bastante bem o efeito de meio-tom em impressão offset e resulta em transições mais suaves visualmente do que a Bayer padrão.

Dithering Aleatório (Random Dithering) O mais simples possível: cada pixel é quantizado com base numa comparação com um valor aleatório entre 0 e 1. Sem padrão, sem direcionalidade. O ruído resultante é estatisticamente correto mas visualmente nada agradável — parece granulação de filme mas pior, porque é granulação uniforme demais.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Na prática eu raramente vejo esse sendo o método final. Às vezes ele aparece como passo intermediário em pipelines mais complexos, ou em gerações de ruído procedural. Mas como técnica de dithering standalone, o resultado costuma decepcionar. Mosaico por Bloco (Block Mosaic / Pixel Art Dither)

Esse é o tipo que as pessoas normalmente confundem quando falam de "mosaico" em jogos e pixel art. Aqui você divide a imagem em blocos quadrados (2x2, 4x4, 8x8 pixels) e substitui cada bloco por uma cor média ou dominante. É basicamente um downscale seguido de upscale com nearest-neighbor. Isso é diferente de dithering de verdade. Não há disputa entre pixels vizinhos, não há correção de erro. É uma simplificação geométrica pura. O visual resultante é aquele aspecto de pixel art grande, estilo retro. Muito usado em engines de jogo pro efeito estético intencional.

Mosaico por Voronoi Esse é menos convencional mas aparece em gerações procedurais de textura. Você espalha pontos aleatórios pela imagem, calcula o diagrama de Voronoi desses pontos e color cach célula com base na luminância média da região original correspondente. O resultado é um padrão orgânico, irregular, que lembra mosaicos cerâmicos ou células biológicas.

O custo computacional é muito maior que os outros tipos. Calcular um diagrama de Voronoi preciso pra cada pixel é caro. Na prática eu uso aproximações — grid hierárquico com lookup de vizinhos mais próximos — que reduzem o tempo de geração de algo como 40 segundos pra cerca de 2 segundos num processador comum, com qualidade praticamente indistinguível. Problema real que eu enfrentei

Trabalhando num sistema de geração de mapas topográficos pra um jogo, precisei aplicar dithering numa altura normalizada de 0 a 1 com apenas 4 níveis de cor. O Floyd-Steinberg produzido artefatos de contorno visíveis nas transições de bioma — aquela linha nítida onde a floresta encontrava a savana. O dithering ordenado Bayer era melhor mas o padrão repetitivo ficava claro em áreas de plano quase uniforme. A solução foi combinar os dois: usei dithering ordenado nas regiões de transição suave e Floyd-Steinberg nas áreas de alta frequência. O cutoff entre os dois métodos foi determinado medindo a variância local com um kernel de 5x5. Variância alta = Floyd-Steinberg, variância baixa = Bayer. Funcionou. O resultado final não tinha nem os artefatos direcionais nem o padrão periódico, e o tempo de processamento apenas cerca de 12% porque o cálculo de variância local é barato comparado ao dithering em si.

Considerações práticas na hora de escolher

Nenhum tipo de mosaico é universalmente melhor. A escolha depende do que você tá tentando alcançar e das restrições do seu pipeline. Se você precisa de velocidade e paralelismo, vá de dithering ordenado. A matriz Bayer 4x4 processa uma imagem 4K num iPad em menos de 50 milissegundos. Se a qualidade visual é prioridade e você não se importa com dependência de varredura, o Floyd-Steinberg ou Jarvis são melhores, mas processamento paralelo exige cuidado — você precisa dividir a imagem em tiras com overlap suficiente pros pixels de borda receberem correção de erro adequada.

Se o output é destinado a impressão, o dithering clusterizado ou um algoritmo de halftone directional costumam produzir resultados superiores. Printers usam células de meio-tom que crescem de forma específica, e um dither que simula esse comportamento físico é mais fiel ao resultado final do que qualquer error diffusion genérico. E o aviso mais importante: omosaico com poucos níveis de cor é sempre uma aproximação grosseira. Dois níveis vai produzir ruído visual inevitável em qualquer método. Se você precisa de fidelidade tonal, use mais níveis ou considere técnicas deithering adaptativo que respeitem a estrutura local da imagem em vez de aplicar um algoritmo uniforme em tudo.