2 Amostragem e Quantização

A representação digital de imagens é um dos pilares fundamentais do Processamento Digital de Imagens (PDI). Para que uma cena do mundo real possa ser manipulada por um computador, é necessário transformá‑la de uma forma contínua, tanto no espaço quanto na intensidade luminosa, em uma representação discreta. Esse processo ocorre por meio de duas etapas essenciais: amostragem e quantização.
Neste capítulo são apresentados os fundamentos conceituais dessas etapas, relacionando‑as à percepção visual humana, aos sensores de aquisição de imagens e aos modelos matemáticos utilizados para representar imagens digitais.
2.1 Elementos da Percepção Visual
Sistema de Processamento de Imagens
Um sistema de processamento de imagens pode ser descrito como um conjunto de etapas que envolvem aquisição, processamento, armazenamento e saída de imagens, conforme ilustrado na Figura 2.1. A aquisição é realizada por dispositivos como câmeras de vídeo e scanners, enquanto o processamento ocorre em um computador. A saída pode ser exibida em monitores, impressoras ou outros dispositivos gráficos, e o armazenamento é feito em mídias digitais.
Essa estrutura é inspirada, em muitos aspectos, no próprio sistema visual humano, que serve como referência para o desenvolvimento de modelos computacionais de visão.
O Olho Humano e a Formação da Imagem
O olho humano funciona como um sofisticado sistema óptico (Figura 2.2). A luz proveniente dos objetos atravessa a córnea e o cristalino, sendo focalizada sobre a retina. Na retina encontram‑se os fotorreceptores, responsáveis por converter a energia luminosa em sinais elétricos que são transmitidos ao cérebro pelo nervo óptico.
A imagem formada na retina é invertida, e o cérebro realiza a interpretação e a reconstrução da cena observada. Esse processo evidencia que a percepção visual não é apenas um fenômeno físico, mas também cognitivo.
Fóvea, Cones e Bastonetes
A retina possui duas classes principais de fotorreceptores: bastonetes e cones, Figura 2.3. Os bastonetes são altamente sensíveis à luz e estão associados à percepção de brilho, enquanto os cones são responsáveis pela percepção de cores.
A região da fóvea, uma pequena depressão circular localizada no centro da retina, concentra uma grande densidade de cones, sendo responsável pela alta acuidade visual. Essa característica inspira o projeto de sensores de imagem, como os dispositivos CCD e CMOS, que utilizam matrizes de elementos sensíveis à luz para capturar imagens digitais.
2.2 Ilusões de Ótica e Percepção
O estudo das ilusões de ótica revela limitações e particularidades do sistema visual humano. Em situações onde o cérebro não consegue interpretar corretamente os estímulos visuais, ele tende a completar a informação com base em experiências prévias e padrões memorizados.
Fenômenos como o efeito Mach (Figura 2.4), a percepção de contraste e distorções associadas a linhas e formas (aplicativo interativo seguinte) demonstram que a intensidade percebida nem sempre corresponde à intensidade física real. Esses efeitos são relevantes em PDI, pois técnicas de realce e segmentação exploram princípios semelhantes aos do sistema visual humano.
A imagem da Figura 2.4 ilustra o efeito das bandas de Mach, no qual a transição real de intensidade entre regiões (em forma de degraus) é percebida de maneira exagerada pelo sistema visual. Embora a variação de intensidade seja uniforme em cada faixa, o cérebro acentua artificialmente as bordas, fazendo com que apareçam regiões mais claras logo após uma transição para tons mais claros e regiões mais escuras logo antes dela. Esse fenômeno ocorre devido a mecanismos de inibição lateral na retina, em que neurônios vizinhos inibem parcialmente a resposta uns dos outros, aumentando o contraste nas bordas. Como resultado, percebemos variações de brilho que não existem fisicamente, evidenciando que a visão humana enfatiza mudanças locais para facilitar a detecção de contornos.
Neste exemplo interativo, a figura do canto superior esquerdo ilustra a ilusão de Kanizsa, na qual percebemos um quadrado branco mesmo sem contornos explícitos. Esse efeito ocorre porque o sistema visual tende a completar formas incompletas, seguindo o princípio de fechamento da Gestalt. Assim, o cérebro cria contornos ilusórios para formar uma estrutura coerente.
No canto superior direito, as linhas radiais produzem uma sensação de variação de intensidade ou “vibração” ao redor do centro. Esse fenômeno está relacionado ao contraste de luminância e à forma como o sistema visual enfatiza diferenças locais, podendo gerar efeitos semelhantes às bandas de Mach, que realçam bordas e transições.
A figura do canto inferior esquerdo representa a ilusão de Müller-Lyer, em que duas linhas de mesmo comprimento parecem diferentes devido à orientação das setas em suas extremidades. Esse efeito é influenciado pelo contexto visual e pela interpretação de profundidade, fazendo com que o cérebro distorça a percepção do tamanho real.
Por fim, a ilusão de Zöllner ocorre quando linhas paralelas parecem inclinadas ou não paralelas devido à presença de pequenos traços diagonais que as cruzam. Esses traços interferem na forma como o sistema visual processa orientações, gerando um viés perceptual nos ângulos das linhas principais. Esse efeito está relacionado à atuação de neurônios sensíveis à orientação no córtex visual, que interpretam o conjunto da cena de maneira contextual. Assim, a percepção de paralelismo não depende apenas das linhas em si, mas também dos elementos ao seu redor, evidenciando que o sistema visual realiza uma interpretação ativa e influenciada pelo contexto.
2.3 Imagens Digitais e Sensores
Espectro Visível
O espectro visível corresponde a uma pequena faixa do espectro eletromagnético da luz (Figura 2.5), compreendida aproximadamente entre os comprimentos de onda do violeta ao vermelho. Embora estreita, essa faixa é suficiente para representar uma grande variedade de informações visuais utilizadas em aplicações cotidianas.
O espectro eletromagnético da luz abrange uma ampla faixa de radiações, organizadas de acordo com seu comprimento de onda ou frequência. Cada região do espectro interage de maneira diferente com a matéria, o que resulta em distintos tipos de imagens e aplicações. No centro desse espectro está a luz visível, mas técnicas modernas de imageamento exploram desde os raios gama até as ondas de rádio.
Na faixa dos raios gama, com altíssimas frequências e comprimentos de onda extremamente curtos, as imagens são utilizadas principalmente em medicina nuclear e astrofísica. Exames como a tomografia por emissão de pósitrons (PET) permitem observar processos metabólicos no corpo humano, revelando informações funcionais que não são visíveis em imagens convencionais.
Os raios X são amplamente utilizados na medicina para obtenção de radiografias. Devido à sua capacidade de atravessar tecidos moles e serem absorvidos por estruturas mais densas, como ossos, geram imagens que destacam diferenças de densidade interna. Também são empregados em inspeção industrial e segurança, como na análise de bagagens.
Na região do ultravioleta (UV), as imagens são úteis para revelar detalhes que não aparecem na luz visível, como fluorescência de certos materiais. Aplicações incluem análise forense, autenticação de documentos e estudos biológicos, já que algumas substâncias emitem luz visível quando excitadas por UV.
A faixa da luz visível é aquela percebida pelo olho humano, aproximadamente entre 400 e 700 nm. As imagens nessa região são as mais comuns, capturadas por câmeras digitais e utilizadas em fotografia, vídeo e sistemas de visão computacional. Elas representam cores e intensidades de forma diretamente interpretável pelo observador.
No infravermelho (IV), as imagens capturam a radiação térmica emitida pelos objetos. Câmeras térmicas permitem visualizar diferenças de temperatura, sendo amplamente usadas em vigilância, inspeção predial, medicina e monitoramento ambiental. Mesmo na ausência de luz visível, é possível formar imagens baseadas no calor.
As micro-ondas são utilizadas em sistemas de radar e sensoriamento remoto. Imagens obtidas por radar podem atravessar nuvens e operar em condições climáticas adversas, sendo essenciais em meteorologia, mapeamento da superfície terrestre e monitoramento agrícola.
Por fim, as ondas de rádio são empregadas em radioastronomia e em técnicas como a ressonância magnética (MRI), que utiliza princípios relacionados a radiofrequência para gerar imagens detalhadas do interior do corpo humano, especialmente de tecidos moles.
Em conjunto, essas diferentes faixas do espectro mostram que uma “imagem” não depende apenas da luz visível, mas sim da forma como diferentes tipos de radiação interagem com os objetos. Isso amplia enormemente as possibilidades de análise e interpretação em áreas como medicina, ciência, engenharia e processamento de imagens.
Sensores de Imagem
A aquisição de imagens digitais é realizada por sensores que convertem energia luminosa em sinais elétricos. Um sensor simples consiste em um material sensível à luz que gera uma tensão proporcional à intensidade luminosa incidente.

Os sensores podem ser classificados em:
- Sensores lineares, que capturam imagens linha a linha;
- Sensores matriciais, que utilizam uma matriz bidimensional de elementos sensíveis à luz, sendo os mais comuns em câmeras digitais modernas.


2.4 Amostragem
Conceito de Amostragem
A amostragem corresponde à discretização espacial da imagem. Uma cena contínua é convertida em um conjunto finito de pontos, organizados em uma grade regular. Cada ponto da grade representa um pixel da imagem digital.
Matematicamente, considera‑se uma função contínua de intensidade \(f(x,y)\), que, após a amostragem, passa a ser definida apenas em posições discretas de \(x\) e \(y\). A Figura 2.6 apresenta um exemplo do processo de amostragem e quantização para um sinal unidimensional em vermelho.
Resolução Espacial
A resolução espacial de uma imagem está relacionada ao número de amostras por unidade de comprimento, sendo frequentemente expressa em DPI (dots per inch). Quanto maior a resolução, maior o número de pixels utilizados para representar a imagem e maior o nível de detalhe visual.
Imagens com o mesmo tamanho físico podem apresentar resoluções diferentes, resultando em níveis distintos de nitidez. Da mesma forma, imagens com a mesma resolução podem ter tamanhos físicos diferentes.
2.5 Quantização
Conceito de Quantização
A quantização refere‑se à discretização dos valores de intensidade da imagem. Enquanto a amostragem define onde a imagem é medida, a quantização define quais valores essas medições podem assumir.
Sejam \(L\) os níveis possíveis de intensidade, normalmente escolhidos como uma potência de dois:
\[ L = 2^k \]
onde \(k\) é o número de bits utilizados para representar cada pixel.
Profundidade de Bits
A profundidade de bits influencia diretamente a qualidade visual da imagem. Por exemplo:
- 8 bits por pixel permitem 256 níveis de cinza;
- 4 bits por pixel permitem 16 níveis;
- 2 bits por pixel permitem apenas 4 níveis.
Reduções na quantização podem introduzir efeitos visuais indesejados, como perda de detalhes e aparecimento de bandas de intensidade.
2.6 Representação da Imagem Digital
Uma imagem digital pode ser representada como uma matriz numérica, em que cada elemento corresponde ao valor de intensidade de um pixel. A Figura 2.7 ilustra os valores dos pixels (1 ou 0) numa imagem binária. Para imagens em tons de cinza, essa matriz contém valores escalares, conforme ilustrado na Figura 2.8.
O exemplo interativo seguinte, apresenta uma ferramenta de zoom para melhor visualizar a representação matricial para imagens em tons de cinza. Para interação, clique com o mouse sobre a imagem à esquerda para selecionar uma região. Na imagem à direita será apresentada uma amostra ampliada (zoom) dos pixels correspondentes na região selecionada.
Para imagens coloridas, a representação pode envolver:
- tabelas de cores;
- camadas de cores, como os canais vermelho, verde e azul (RGB). (Figura 2.9)
Além da representação matricial, a imagem também pode ser interpretada como uma superfície tridimensional, na qual as coordenadas espaciais definem a posição do pixel e a intensidade define a altura da superfície (Figura 2.10).
O exemplo interativo seguinte permite a visualização de uma imagem como superfície. Use o mouse para movimentar a imagem representada como superfície.
2.7 Os formatos PBM, PGM e PPM de imagens
Os formatos PBM, PGM e PPM pertencem à família Netpbm e são amplamente utilizados no ensino e na pesquisa em Processamento Digital de Imagens, principalmente por sua simplicidade e transparência na representação dos dados. Esses formatos descrevem explicitamente os valores dos pixels, sem empregar técnicas sofisticadas de compressão, o que facilita a compreensão de como uma imagem digital é armazenada e manipulada. Cada formato é voltado para um tipo específico de imagem: binária, em escala de cinza ou colorida.
O formato PBM (Portable Bitmap) é utilizado para representar imagens binárias, nas quais cada pixel assume apenas dois valores possíveis. Tipicamente, o valor 0 representa a cor branca e o valor 1 representa a cor preta. Por esse motivo, o PBM é especialmente adequado para máscaras, imagens segmentadas e resultados de processos de limiarização. Por trabalhar com apenas um bit por pixel, esse formato é conceitualmente simples e frequentemente empregado em exemplos introdutórios de binarização e análise lógica de imagens.
P1
5 5
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0
O formato PGM (Portable Graymap) é destinado à representação de imagens em escala de cinza. Nesse caso, cada pixel é descrito por um único valor numérico que indica seu nível de intensidade luminosa, geralmente variando entre 0 (preto) e 255 (branco). Imagens PGM são muito utilizadas em processamento de imagens por permitirem uma análise direta dos níveis de cinza, sendo ideais para o estudo de filtros, detecção de bordas, realce de contraste e transformações pontuais. Sua estrutura simples torna explícita a relação entre valores numéricos e intensidades visuais.
P2
5 5
255
0 50 100 150 200
50 100 150 200 255
100 150 200 255 200
150 200 255 200 150
200 255 200 150 100
Já o formato PPM (Portable Pixmap) é empregado para imagens coloridas, representadas no modelo RGB. Cada pixel é descrito por três valores inteiros correspondentes às componentes vermelha (Red), verde (Green) e azul (Blue), normalmente também no intervalo de 0 a 255. Dessa forma, o PPM permite representar uma ampla gama de cores, sendo frequentemente usado como formato intermediário em conversões e experimentos. Apesar de gerar arquivos maiores, sua clareza estrutural facilita o entendimento da composição das imagens coloridas.
P3
3 2
255
255 0 0 0 255 0 0 0 255
255 255 0 0 255 255 255 0 255
Os três formatos admitem duas variações: uma versão ASCII, legível por humanos, e uma versão binária, mais compacta e eficiente em termos de armazenamento. As versões ASCII são particularmente úteis em contextos didáticos, pois permitem a inspeção direta dos valores dos pixels em um editor de texto. Já as versões binárias são mais adequadas para aplicações práticas, devido ao menor tamanho dos arquivos e à maior velocidade de leitura e escrita.
Em conjunto, os formatos PBM, PGM e PPM desempenham um papel fundamental no ensino do Processamento Digital de Imagens, pois tornam explícita a relação entre a representação numérica e a aparência visual das imagens. Ao trabalhar com esses formatos, o estudante pode compreender de forma concreta conceitos como pixel, nível de cinza, cor e quantização, estabelecendo uma base sólida para o estudo de técnicas mais avançadas.
A seguir, são apresentados alguns códigos de exemplo que servem como base para a implementação dos diversos algoritmos de processamento de imagens desenvolvidos ao longo deste livro. Embora escritos em uma linguagem específica, os conceitos adotados podem ser facilmente adaptados para outras linguagens, como Python, Rust ou Java, mantendo-se a mesma abordagem geral.
Uma estrutura de dados para imagem
A imagem (image) está representada na estrutura da Listagem 2.1 que contém ainda algumas rotinas utilitárias.
#include <stdio.h>
#include <stdlib.h>
typedef struct image
{
int nr, // number of rows
nc, // number of columns
ml, // max gray level
tp; // type of image (BW, GRAY, COLOR)
int *px; // pixels vector (nr * nc)
} *image;
enum
{
BW = 1,
GRAY,
COLOR
};
/*
* Image allocation and free routines
* nr = number of rows
* nc = number of columns
* ml = max gray level
* tp = type of image
*/
image img_create(int nr, int nc, int ml, int tp)
{
image img = malloc(sizeof (struct image));
img->px = malloc(nr * nc * sizeof(int));
img->nr = nr;
img->nc = nc;
img->ml = ml;
img->tp = tp;
return img;
}
image img_clone(image In)
{
return img_create(In->nr, In->nc, In->ml, In->tp);
}
int img_free(image Im)
{
free(Im->px);
free(Im);
}Para ler um arquivo PNM
O código na Listagem 2.2 está a implementação da função para ler arquivo nos formatos PBM, PGM ou PPM.
/*
* Read pnm ascii image
* Params (in):
* name = image file name
* tp = image type (BW, GRAY or COLOR)
* Returns:
* image structure
*/
void erro(char *msg) { puts(msg); exit(1); }
image img_get(char *name, int tp) {
char line[200];
int nr, nc, ml;
image img;
FILE *f;
f = fopen(name, "rt");
if (!f) erro("ERROR: file open error");
fgets(line, 200, f);
if (line[0] != 'P' || line[1] != (tp + '0'))
erro("Wrong type image!");
fgets(line, 200, f);
while (line[0] == '#')
fgets(line, 200, f);
sscanf(line, "%d %d", &nc, &nr);
if (tp != BW)
fscanf(f, "%d", &ml);
else
ml = 1;
// Image create
img = img_create(nr, nc, ml, tp);
for (int i = 0; i < nr * nc; i++) {
if (tp != COLOR) {
int k;
fscanf(f, "%d", &k);
img->px[i] = k;
}
else {
int r, g, b;
fscanf(f, "%d %d %d", &r, &g, &b);
img->px[i] = (r << 16) | (g << 8) | b;
}
}
fclose(f);
return img;
}Salvar um arquivo PNM
O código na Listagem 2.3 está a função em linguagem C para gravar a imagem nestes formatos.
/*
* Write pnm image
* Params:
* img = image structure
* name = image file name
* tp = image type (BW, GRAY or COLOR)
*/
void img_put(image img, char *name, int tp)
{
int count = 0;
FILE *f = fopen(name, "wt");
if (!f)
erro("ERROR: file creation");
fprintf(f, "P%c\n", tp + '0');
fputs("# Created by Luiz Eduardo\n", f);
fprintf(f, "%d %d\n", img->nc, img->nr);
if (tp != BW)
fprintf(f, "%d\n", img->ml);
for (int i = 0; i < img->nr * img->nc; i++)
{
if (tp != COLOR)
{
int k = img->px[i];
fprintf(f, "%3d ", k);
}
else
{
int r = (img->px[i] >> 16) & (0xFF);
int g = (img->px[i] >> 8) & (0xFF);
int b = img->px[i] & (0xFF);
fprintf(f, "%d %d %d ", r, g, b);
}
count++;
if (count > 50)
{
fprintf(f, "\n");
count = 0;
}
}
}O negativo de uma imagem
Um programa para abrir uma imagem em formato PGM, calcular o negativo da imagem, salvar o resultado e chamar um visualizador de imagem para apresentar o resultado está na Listagem 2.4.
image negative(image in)
{
image out = img_clone(in);
for (int i = 0; i < in->nr * in->nc; i++)
out->px[i] = in->ml - in->px[i];
return out;
}
int main(int argc, char *argv[])
{
image In, Out;
if (argc < 2)
{
printf("\nImage negative\n");
printf("\n\tUse: %s <image-name>.pgm\n\n", argv[0]);
exit(1);
}
In = img_get(argv[1], GRAY);
Out = negative(In);
img_put(Out, "output.pgm", GRAY);
system("eog output.pgm &");
img_free(In);
img_free(Out);
}2.8 Considerações Finais
A amostragem e a quantização constituem a base da representação digital de imagens. A escolha adequada da resolução espacial e da profundidade de quantização é fundamental para garantir um equilíbrio entre qualidade visual, custo computacional e requisitos de armazenamento.
A compreensão desses conceitos é essencial para o estudo de técnicas mais avançadas de processamento de imagens, como filtragem, segmentação, compressão e reconhecimento de padrões, abordadas nos capítulos seguintes.
Exercício 1 — Conceitual
Explique com suas palavras:
- O que é amostragem em imagens digitais
- O que é quantização
- Qual o impacto de cada um na qualidade da imagem
Exercício 2 — Análise visual
Considere uma imagem em tons de cinza:
- O que acontece ao reduzir pela metade:
- o número de linhas e colunas (amostragem)?
- o número de tons de cinza (quantização)?
- Qual das duas alterações tende a causar maior perda perceptual? Justifique.
Exercício 3 — Cálculo de resolução
Uma imagem possui: 512 × 512 pixels e 256 níveis de cinza
Responda:
- Quantos pixels possui a imagem?
- Quantos bits são necessários por pixel?
- Qual o tamanho da imagem em bytes?
Exercício 4 — Quantização prática
Implemente um programa que:
- Leia uma imagem em tons de cinza
- Reduza o número de níveis de cinza para:
- 128
- 64
- 32
- 16
Mostre ou salve os resultados
Compare visualmente os resultados.
Exercício 5 — Amostragem prática
Implemente um programa que reduza a resolução de uma imagem:
- 1/2 da largura e altura
- 1/4 da largura e altura
Compare os resultados com a imagem original.
Exercício 6 — Comparação
Compare os efeitos de:
- Reduzir apenas a amostragem
- Reduzir apenas a quantização
- Reduzir ambos
Qual combinação produz maior degradação? Explique.
Questão reflexiva
Explique como os conceitos de amostragem e quantização influenciam:
- Compressão de imagens
- Qualidade visual
- Uso em aplicações reais (ex: redes sociais, medicina, satélites)
Objetivo
O objetivo desse atividade é explorar os conceitos iniciais da disciplina de processamento de imagens como: vizinhança dos pixels, amostragem e quantização e operações pontuais para clareamento e escurecimento de imagens.
Problema
É possível obter uma boa representação de uma imagem, mesmo sacrificando o número de linhas e colunas (amostragem) e/ou o número de tons (quantização) de uma imagem qualquer.
O problema de processamento de imagens proposto para essa atividade será construir uma ferramenta para composição de um fotomosaico de imagens, conforme ilustrado nas Figuras abaixo.


Descrição
- Nessa atividade você deverá construir uma ferramenta que, a partir de um arquivo de configuração (
config.txt) da fotomontagem e de uma coleção de imagens armazenadas em formato PGM, gere o fotomosaico de fotos, conforme ilustrado anteriormente.
32 60 80
8
cao3.pgm
cao2.pgm
cao1.pgm
cao4.pgm
cao5.pgm
cao6.pgm
cao7.pgm
cao8.pgm
O arquivo
config.txtdeve estar organizado da seguinte forma:- A primeira linha do arquivo deve conter três números que definem:
- Número NT de tons de cinza do mosaico (NT = 32, no exemplo)
- Número NL de linhas
- Número NC de colunas
A segunda linha contém o número N de imagens que serão utilizadas na montagem (no exemplo, N = 8).
Da terceira linha em diante, o arquivo contém os nomes das imagens. A primeira imagem da lista é utilizada como imagem base. As demais imagens serão iconizadas e ajustadas (clareadas ou escurecidas) para serem utilizadas como “pixels” na composição.
A partir desse arquivo de configuração, o programa deverá gerar uma imagem do fotomosaico com dimensões:
- NL × NL linhas
- NC × NC colunas
Para o exemplo fornecido:
- 60 × 60 → 3600 linhas
- 80 × 80 → 6400 colunas
Objetivo
O objetivo desta atividade é explorar conceitos iniciais de processamento de imagens, incluindo vizinhança de pixels, amostragem e quantização.
Problema
A arte ASCII é uma técnica de representação de imagens utilizando caracteres de texto. Surgiu nos primórdios da computação, quando os sistemas possuíam baixa resolução e não suportavam gráficos.
Nesta atividade, você deverá desenvolver um programa capaz de converter uma imagem em tons de cinza (PGM) em uma representação ASCII, utilizando caracteres para simular diferentes níveis de intensidade.
Descrição
Desenvolva um programa que:
Leia uma imagem em tons de cinza no formato
.pgmReceba como entrada:
- número de colunas (amostragem)
- número de linhas (amostragem)
- string de caracteres (quantização)
O programa deverá:
Realizar a redução da resolução da imagem (amostragem)
Mapear os níveis de cinza para caracteres ASCII (quantização)
Gerar uma representação textual da imagem
Por fim, o programa deve:
Salvar o resultado em um arquivo texto
Preservar a estrutura visual da imagem original
Formato da execução
O programa deve ser executado via linha de comando:
./ascii <nome-arquivo-imagem> <ncolunas> <nlinhas> <string>Exemplo
Para a imagem:

O arquivo texto gerado (considerando o tamanho 100x30 e o string “@$#%o!=+;:-,.”) deve ter o seguinte conteúdo:

Saída esperada
O programa deverá gerar um arquivo:
result.txt
contendo a imagem convertida para ASCII.
Observações
- Caracteres mais densos (como
@,#) representam regiões mais escuras. - Caracteres mais leves (como
., espaço) representam regiões claras. - A escolha do conjunto de caracteres influencia diretamente a qualidade da imagem final.