◩ Grafica e immagini

Profondità di bit, banding e dithering: 8, 10 e 16 bit spiegati

Quanti livelli servono per una sfumatura senza strisce: profondità di bit, banding, dithering, virgola mobile e quando lavorare a 16 bit invece che a 8.

Un cielo al tramonto, una parete illuminata di lato, lo sfondo sfumato di un ritratto: sono le zone in cui un'immagine rivela i propri limiti. Al posto di una transizione continua compaiono strisce, come gradini di una scala. Questo difetto si chiama banding e dipende da quanti livelli di colore sono disponibili per ogni canale, cioè dalla profondità di bit. Vediamo come si calcola, quando diventa un problema e quali tecniche lo attenuano.

Livelli per canale

Con n bit si possono rappresentare 2ⁿ livelli diversi. Per un canale di colore:

Bit per canale Livelli per canale Combinazioni RGB
1 2 8
5–6 (formati compatti) 32–64 circa 65 mila
8 256 circa 16,7 milioni
10 1.024 circa 1,07 miliardi
12 4.096 circa 68,7 miliardi
16 65.536 circa 281 mila miliardi

Il numero totale di combinazioni impressiona, ma non è quello che conta. Conta quanti livelli ci sono lungo una singola sfumatura. Un grigio che va dal nero al bianco, in un'immagine a 8 bit, ha al massimo 256 passi. Una sfumatura dal blu scuro al blu medio, invece, usa magari solo 40 valori: stesi su un'area larga 2000 pixel, ogni valore copre una striscia di 50 pixel, e le strisce diventano visibili.

Perché 8 bit a volte bastano e a volte no

Per la visualizzazione finale, 8 bit per canale in uno spazio con codifica gamma come sRGB sono di solito sufficienti: la curva distribuisce i livelli in modo da rendere i gradini quasi invisibili. I problemi nascono in tre situazioni:

  1. Sfumature ampie e poco contrastate, come cieli e fondali di studio.
  2. Elaborazioni pesanti: ogni regolazione di curve o livelli "stira" alcuni intervalli di valori e ne comprime altri. Tirando su le ombre di due stop, i 30 livelli originali vengono distribuiti su un intervallo più ampio e si aprono buchi tra un livello e l'altro.
  3. Spazi colore ampi, dove gli stessi 256 livelli coprono una gamma più estesa.

Un modo semplice per vedere il fenomeno è osservare l'istogramma dopo una correzione forte su un'immagine a 8 bit: appare "a pettine", con colonne separate da vuoti. Ogni vuoto è un livello che non esiste più.

Lavorare a 16 bit

La soluzione durante l'elaborazione è lavorare a 16 bit per canale. I file RAW delle fotocamere contengono normalmente 12 o 14 bit di informazione per pixel; svilupparli e ritoccarli a 16 bit conserva questa ricchezza e lascia spazio alle correzioni. Solo alla fine si converte a 8 bit per la consegna.

Il costo è il doppio della memoria e file più pesanti. Per una foto da pubblicare con qualche ritocco leggero, 8 bit possono bastare; per un'immagine destinata a stampa di grande formato o a elaborazioni importanti, 16 bit sono la scelta prudente.

La virgola mobile e l'HDR

Interi a 8 o 16 bit rappresentano valori in un intervallo chiuso, dal nero al bianco. Per immagini ad alta gamma dinamica (HDR), rendering 3D e compositing si usano numeri in virgola mobile a 16 o 32 bit, che possono rappresentare valori più luminosi del "bianco" e con precisione relativa costante. Formati come OpenEXR nascono per questo scopo. Un riflesso del sole in una scena renderizzata può valere decine di volte il bianco di riferimento: in virgola mobile resta tale e può essere gestito correttamente in seguito.

Il dithering: rumore utile

Quando si deve ridurre la profondità di bit, per esempio da 16 a 8, si può fare di meglio che arrotondare ogni valore al livello più vicino. Il dithering aggiunge una piccola quantità di rumore prima della quantizzazione. Il risultato è che il confine tra due livelli non è più una linea netta, ma una zona di pixel mescolati che l'occhio media in una transizione continua.

Le tecniche principali sono:

  • dithering casuale: si somma rumore a bassa intensità; semplice ed efficace per sfumature fotografiche;
  • dithering ordinato: si usa una matrice fissa di soglie (per esempio la matrice di Bayer); produce una trama regolare riconoscibile, tipica della grafica retrò;
  • diffusione dell'errore: l'errore di arrotondamento di un pixel viene distribuito ai pixel vicini non ancora elaborati; l'algoritmo di Floyd–Steinberg è il più noto ed è molto usato per ridurre immagini a palette limitate.

Un piccolo dettaglio pratico: il dithering aggiunge rumore, e il rumore si comprime male. Un'immagine con dithering salvata in un formato con perdita può pesare un po' di più; spesso è un prezzo accettabile per eliminare il banding.

Schermi e catena di visualizzazione

Anche il percorso fino allo schermo conta. Molti pannelli di fascia economica sono a 6 bit reali e simulano 8 bit con una tecnica temporale (FRC), alternando rapidamente due livelli. Un file a 10 bit mostra la propria qualità solo se applicazione, sistema operativo, scheda video, cavo e monitor supportano tutti i 10 bit. Se un anello della catena lavora a 8 bit, il banding che vedete può dipendere dalla visualizzazione e non dal file.

In sintesi

  • Il banding dipende da quanti livelli sono disponibili lungo una sfumatura, non dal totale dei colori.
  • 8 bit bastano per la visualizzazione finale, ma non per elaborazioni pesanti o spazi ampi.
  • Durante il ritocco lavorate a 16 bit; per HDR e rendering usate la virgola mobile.
  • Il dithering trasforma i gradini in rumore fine, che l'occhio percepisce come continuo.
  • Verificate tutta la catena di visualizzazione prima di attribuire il banding al file.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche