Este repositório implementa a técnica de ditherização por difusão de erro usando o método clássico de Floyd–Steinberg (1976). O objetivo é reduzir uma imagem para níveis binários (ou por canal RGB) preservando a percepção de tons por meio da propagação controlada do erro de quantização.
-
Método: Floyd–Steinberg com limiarização fixa (
threshold = 117). -
Percurso: varredura linha a linha (topo→base, esquerda→direita).
-
Canais:
- Grayscale (
mode 'L'): quantização para {0, 255} com difusão de erro. - RGB: difusão aplicada independentemente a R, G e B (resultando em uma imagem colorida ditherizada). Em seguida, a imagem colorida também é convertida para
Le ditherizada novamente para comparação em tons de cinza (gerando 2 saídas).
- Grayscale (
-
Pós-processamento: valores são limitados a [0, 255] e convertidos para
uint8.
A quantização é feita por limiar (threshold = 117). Para cada pixel processado, calcula-se o erro de quantização (erro = old_pixel - new_pixel) e este é difundido apenas para vizinhos ainda não processados, ponderado pelo kernel clássico:
x 7/16
3/16 5/16 1/16
xé o pixel atual; os pesos são aplicados aos vizinhos à direita e na próxima linha.
-
Linguagem e libs: Python com
Pillow (PIL),NumPyeMatplotlib.Tkinteré usado para seleção do arquivo via diálogo nativo. -
Entrada: imagens BMP ou JPEG (e formatos compatíveis com PIL, como PNG).
-
Saídas:
saida1.jpeg→ imagem ditherizada (RGB ou L, conforme entrada).saida2.jpeg→ apenas se a entrada for RGB: versão convertida para tons de cinza e ditherizada novamente (para comparação).
- Dependências:
pip install pillow numpy matplotlib-
Execute o script:
python main.py
-
Selecione a imagem no diálogo de arquivo (Tkinter).
-
Aguarde a visualização lado a lado no Matplotlib e a geração dos arquivos
saida1.jpeg(esaida2.jpeg, se aplicável) no diretório atual.
- Threshold: o valor padrão é
117(escala 0–255). Para ajustar o comportamento da binarização, altere a constantethresholdno início do script. - Modo de varredura: atualmente linha a linha.
Para entradas RGB:
- Figura 1 — Original
- Figura 2 — Ditherizada colorida (RGB por canal)
- Figura 3 — Convertida para tons de cinza e ditherizada novamente
Para entradas em tons de cinza:
- Figura 1 — Original (L)
- Figura 2 — Ditherizada (L)
Floyd, R. W., & Steinberg, L. (1976). An adaptive algorithm for spatial grey scale.