◩ Grafica e immagini

Canale alfa e compositing: trasparenza e metodi di fusione

Come funziona la trasparenza nelle immagini: canale alfa, operatore «over», alfa premoltiplicato, aloni scuri attorno ai ritagli e metodi di fusione.

Ritagliare un oggetto e appoggiarlo su uno sfondo diverso sembra un'operazione banale, finché non compaiono bordi scuri, aloni chiari o sfumature che diventano opache. Questi problemi nascono quasi sempre da un fraintendimento su come il canale alfa rappresenta la trasparenza e su come i programmi combinano i livelli. Il tema si chiama compositing ed è alla base di fotoritocco, interfacce grafiche, effetti video e motori di gioco.

Cosa rappresenta l'alfa

Il canale alfa è un quarto valore associato a ogni pixel, accanto a rosso, verde e blu. Indica la copertura: quanta parte del pixel è occupata dall'oggetto.

  • alfa = 1 (o 255 a 8 bit): il pixel è interamente coperto, opaco;
  • alfa = 0: il pixel è vuoto, completamente trasparente;
  • valori intermedi: il pixel è coperto solo in parte, come accade ai bordi antialiasati, ai capelli, al vetro, al fumo.

L'alfa non è un colore, e un pixel con alfa zero non ha, a rigore, un colore significativo. Questa osservazione, apparentemente filosofica, è la chiave di molti difetti pratici.

L'operatore «over»

Il caso più comune è appoggiare un livello in primo piano (F) su uno sfondo (B). Con valori normalizzati tra 0 e 1, e uno sfondo opaco, la formula è:

risultato = F.colore × F.alfa + B.colore × (1 − F.alfa)

Un pixel di bordo con alfa 0,3 prende il 30% del colore dell'oggetto e il 70% di quello dello sfondo. Questa operazione, insieme ad altre come in, out, atop e xor, fu formalizzata da Thomas Porter e Tom Duff in un articolo del 1984 dedicato al compositing di immagini digitali, ed è tuttora la base dei sistemi grafici.

Alfa diretto e alfa premoltiplicato

Esistono due modi di memorizzare un pixel trasparente:

Rappresentazione Cosa contiene il colore Esempio: rosso al 50%
Alfa diretto (straight) il colore "puro" dell'oggetto (1, 0, 0, 0,5)
Alfa premoltiplicato colore già moltiplicato per alfa (0,5, 0, 0, 0,5)

Con l'alfa premoltiplicato la formula «over» diventa più semplice:

risultato = F + B × (1 − F.alfa)

I vantaggi non sono solo di velocità:

  • Filtraggio corretto: quando si ridimensiona, si sfoca o si ruota un'immagine trasparente, si fanno medie tra pixel. Con l'alfa diretto, la media tra un pixel rosso opaco e un pixel trasparente "nero" (0, 0, 0, 0) produce un colore scurito. Con il premoltiplicato, il pixel trasparente vale zero in tutti i canali e non contamina il risultato.
  • Composizione associativa: si possono unire più livelli in gruppi intermedi senza cambiare il risultato finale.
  • Luci additive: un pixel con colore non nullo e alfa zero rappresenta una luce che si somma senza coprire, utile per bagliori e fuoco.

Per questo molti motori grafici e programmi di compositing lavorano internamente con alfa premoltiplicato, anche se i file PNG, per specifica, memorizzano l'alfa diretto.

Gli aloni: diagnosi e rimedi

Bordo scuro attorno a un ritaglio. Tipico di un'immagine con alfa diretto, filtrata o ridimensionata senza premoltiplicare: i pixel trasparenti avevano colore nero e sono "colati" nei bordi. Rimedio: premoltiplicare prima di filtrare, oppure riempire i pixel trasparenti con il colore dei bordi vicini (tecnica detta dilatazione o bleeding), molto usata per le texture dei videogiochi.

Bordo chiaro attorno a un oggetto scontornato da un fondo bianco. I pixel di bordo contengono ancora una parte del colore dello sfondo originale. Rimedio: le funzioni di "decontaminazione del colore" o di rimozione dell'alone presenti nei programmi di ritocco, che stimano e sottraggono il contributo dello sfondo.

Doppia moltiplicazione. Se un'immagine già premoltiplicata viene trattata come diretta, i bordi diventano troppo scuri e le sfumature trasparenti troppo deboli. Accade quando due componenti di una catena fanno ipotesi diverse: va chiarito quale formato si aspetta ciascuno.

Metodi di fusione

Oltre alla semplice sovrapposizione, i programmi offrono metodi di fusione (blend mode) che combinano i colori in modo diverso. I più usati:

  • Moltiplica: F × B; scurisce sempre, il bianco è neutro. Utile per ombre e per applicare texture.
  • Scolora (screen): 1 − (1 − F) × (1 − B); schiarisce sempre, il nero è neutro. Utile per luci e bagliori.
  • Sovrapponi (overlay): moltiplica nelle zone scure dello sfondo e scolora in quelle chiare; aumenta il contrasto.
  • Differenza: |F − B|; utile per confrontare due versioni di un'immagine, perché ciò che è identico diventa nero.

Il metodo Differenza è uno strumento che uso spesso nel mio lavoro per individuare modifiche tra due versioni di un'immagine: anche variazioni di un solo livello di valore diventano visibili aumentando il contrasto del risultato.

Va ricordato che anche i metodi di fusione risentono della gamma: lo stesso metodo applicato in spazio sRGB o in spazio lineare dà risultati diversi.

Formati che supportano la trasparenza

  • PNG: alfa completo a 8 o 16 bit, oppure trasparenza semplice tramite il chunk tRNS.
  • GIF: un solo colore trasparente, senza livelli intermedi: per questo i bordi sono seghettati.
  • WebP e AVIF: alfa completo, anche con compressione con perdita.
  • TIFF e OpenEXR: alfa completo, usati nei flussi professionali.
  • JPEG: nessun canale alfa.

In sintesi

  • Il canale alfa rappresenta la copertura di ogni pixel, da 0 (vuoto) a 1 (opaco).
  • L'operatore «over» mescola primo piano e sfondo in proporzione all'alfa.
  • L'alfa premoltiplicato rende corretti filtraggi e ridimensionamenti ed evita bordi scuri.
  • Gli aloni chiari derivano dallo sfondo originale e si rimuovono con la decontaminazione del colore.
  • I metodi di fusione come moltiplica, scolora e differenza combinano i colori in modi specifici.
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