Canale alfa
# Canale alfa

Il canale alfa (o secondo l'uso inglese alpha) è un canale aggiuntivo utilizzato nella grafica digitale per la rappresentazione dei colori che descrive il grado di trasparenza/opacità (con un valore numerico variabile a seconda dei file grafici utilizzati) di ogni determinato pixel. Il concetto di canale alfa è stato introdotto da Alvy Ray Smith alla fine degli anni '70 e sviluppato in un articolo del 1984 di Thomas Porter e Tom Duff.

## Formati compatibili

I formati immagine più popolari che supportano il canale alfa sono PNG e TIFF, mentre il JPEG anche se popolare non lo utilizza; GIF supporta la trasparenza ma non il canale alfa. Il canale alfa è presente in alcuni codec video, come ad esempio Animation e Prores4444 del formato QuickTime, o nel codec multiformato Techsmith.

Il formato di file BMP generalmente non supporta questo canale; tuttavia in diversi formati come il 32bit (888-8) o il 16bit (444-4) è possibile salvare il canale alfa, anche se non tutti i sistemi o programmi sono in grado di leggerlo: è sfruttato principalmente in alcuni videogiochi o applicazioni particolari; per la creazione di queste immagini BMP con canale alfa sono stati anche creati programmi specifici.

| Formato file/Codec | Profondità massima di bit alfa | Supporto browser | Tipo di supporto |
| - | - | - | - |
| Apple Pro risoluzione 4444 | 16 bit | nessuno | Video/.mov |
| HEVC/h.265 | 10-bit | Limitato a Safari | video/.HEVC |
| WebM (codec video VP8 o VP9) | 12 bit | Si | Video/.WebM |
| ApriEXR | 32 bit | Nessuno | Immagine/.exr |
| PNG | 16 bit | Si | Immagine/.png |
| TIFF | 32 bit | Nessuno | Immagine/.tiff |
| APNG | 24 bit | Si | Immagine/.apng |
| GIF | 8 bit | Si | Immagine/.gif |
| SVG | 32 bit | Si | Immagine/.svg |

## Funzionamento

Con l'esistenza di un canale alfa, è possibile esprimere operazioni di compositing dell'immagine utilizzando un'algebra di compositing. Ad esempio, date due immagini A e B, l'operazione di compositing più comune è combinare le immagini in modo che A appaia in primo piano e B appaia sullo sfondo. Questo può essere espresso come A over B. Oltre a over, Porter e Duff hanno definito gli operatori di compositing in, hold out by (la frase si riferisce all'holdout matting ed è solitamente abbreviata out), atop e xor (e gli operatori inversi rover, rin, rout, e ratop) da una considerazione delle scelte nella fusione dei colori di due pixel quando la loro copertura è, concettualmente, sovrapposta ortogonalmente:

Ad esempio, l'operatore over può essere ottenuto applicando la seguente formula a ciascun pixel:

    $\alpha _{o}=\alpha _{a}+\alpha _{b}(1-\alpha _{a})$
    $C_{o}={\frac {C_{a}\alpha _{a}+C_{b}\alpha _{b}(1-\alpha _{a})}{\alpha _{o}}}$

Qui $C_{o}$, $C_{a}$ e $C_{b}$ rappresentano le componenti cromatiche dei pixel nel risultato, rispettivamente immagine A e immagine B, applicate a ciascun canale di colore (rosso/verde/blu) individualmente, mentre $\alpha _{o}$, $\alpha _{a}$ e $\alpha _{b}$ sono i valori alfa dei rispettivi pixel.

L'operatore over è, in effetti, la normale operazione di colorazione (vedi Algoritmo del pittore). Bruce A. Wallace ha derivato l'operatore over sulla base di un modello fisico di riflettanza/trasmittanza, in contrasto con l'approccio geometrico di Duff. Gli operatori in e out sono l'equivalente in alfa compositing del ritaglio. I due elementi usano solo il canale alfa della seconda immagine e ignorano le componenti del colore.

## Lineare contro pre-moltiplicato

Se un canale alfa viene utilizzato in un'immagine, sono disponibili due rappresentazioni comuni: alfa lineare (non associata) e alfa pre-moltiplicata (associata).

Con alfa lineare le componenti RGB rappresentano il colore dell'oggetto o del pixel, senza tener conto della sua opacità.

Con alfa pre-moltiplicato le componenti RGB rappresentano l'emissione dell'oggetto o pixel e l'alfa rappresenta l'occlusione. L' operatore over diventa quindi:

    $C_{o}=C_{a}+C_{b}(1-\alpha _{a})$
    $\alpha _{o}=\alpha _{a}+\alpha _{b}(1-\alpha _{a})$

Un vantaggio più evidente di ciò è che, in determinate situazioni, può salvare una successiva moltiplicazione (ad esempio se l'immagine viene utilizzata più volte durante il compositing successivo). Tuttavia, i vantaggi più significativi dell'utilizzo dell'alfa pre-moltiplicato riguardano la correttezza e la semplicità piuttosto che le prestazioni: l'alfa pre-moltiplicato consente il filtraggio e la fusione corretti. Inoltre, l'alfa pre-moltiplicato consente di codificare all'interno della stessa immagine regioni di normale fusione alfa e regioni con modalità di fusione additiva.

### Esempi

Il seguente esempio è un pezzo di framework Apple vImage di composizione alfa non pre-moltiplicata di due immagini ARGBFFFF, inserendo il risultato in un buffer di destinazione:

func vImageAlphaBlend_ARGBFFFF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImage_Flags) -> vImage_Error

Il seguente esempio è un pezzo di linguaggio di scripting Julia che mostra come è possibile eseguire la composizione alfa:

Il seguente esempio è un pezzo di linguaggio CSS3 che mostra come è possibile eseguire la composizione alfa:

Il seguente esempio è un pezzo di linguaggio HTML5 Canvas che mostra come è possibile eseguire la composizione alfa:

Il seguente esempio è un pezzo di linguaggio WebGL che mostra come è possibile eseguire la composizione alfa:

## Correzione gamma

I valori RGB delle tipiche immagini digitali non corrispondono direttamente alle intensità della luce fisica, ma sono piuttosto compressi da una funzione di correzione della gamma:

    $C_{\text{encoded}}=C_{\text{linear}}^{\gamma }$

Questa trasformazione utilizza meglio il numero limitato di bit nell'immagine codificata scegliendo $\gamma$ che meglio corrisponde alla percezione umana non lineare della luminanza.

Di conseguenza, i programmi per computer che si occupano di tali immagini devono decodificare i valori RGB in uno spazio lineare (annullando la compressione gamma), fondere le intensità della luce lineare e riapplicare la compressione gamma al risultato:

    $C_{o}=\left({\frac {C_{a}^{1/\gamma }\alpha _{a}+C_{b}^{1/\gamma }\alpha _{b}(1-\alpha _{a})}{\alpha _{o}}}\right)^{\gamma }$

Quando combinato con alfa pre-moltiplicato, la pre-moltiplicazione viene eseguita nello spazio lineare, prima della compressione gamma. Ne risulta la seguente formula:

    $C_{o}=\left(C_{a}^{1/\gamma }+C_{b}^{1/\gamma }(1-\alpha _{a})\right)^{\gamma }$

Si noti che solo le componenti del colore subiscono la correzione gamma; il canale alfa è sempre lineare.

## Altri metodi di trasparenza

Sebbene utilizzati per scopi simili, i colori trasparenti e le maschere dell'immagine non consentono la fusione uniforme dei pixel dell'immagine sovrapposti con quelli dello sfondo (sono ammessi solo pixel interi dell'immagine o pixel interi dello sfondo).

Un effetto simile può essere ottenuto con un canale alfa a 1 bit, come si trova nella modalità high color RGBA a 16 bit del formato file immagine Truevision TGA e nella modalità grafica high color degli adattatori display TARGA e AT-Vista/NU-Vista correlati. Questa modalità dedica 5 bit per ogni colore RGB primario (RGB a 15 bit) più un bit rimanente come "canale alfa".

La trasparenza Screendoor può essere utilizzata per simulare l'occlusione parziale in cui è disponibile solo 1 bit alfa.

Per alcune applicazioni, un singolo canale alfa non è sufficiente: una vetrata, ad esempio, richiede un canale di trasparenza separato per ciascun canale RGB per modellare separatamente la trasparenza rossa, verde e blu. È possibile aggiungere più canali alfa per applicazioni di filtrazione del colore spettrale accurate.

### Mappatura alfa

La mappatura alfa è una tecnica della computer grafica 3D che prevede l'uso della mappatura delle texture per designare la quantità di trasparenza e traslucenza delle aree in un determinato oggetto.

La mappatura alfa viene utilizzata quando la trasparenza di un dato oggetto non è coerente: quando la quantità di trasparenza non è la stessa per l'intero oggetto e/o quando l'oggetto non è completamente trasparente. Se l'oggetto ha lo stesso livello di trasparenza ovunque, è possibile utilizzare una trama alfa a tinta unita o un valore intero.

La mappatura alfa è spesso codificata nel canale alfa di una trama RGBA utilizzata per la colorazione invece di essere una trama in scala di grigi autonoma.

### Alpha to coverage

Alpha to coverage è una tecnica di computer grafica multicampionamento che sostituisce la mappatura alfa con una maschera di copertura. Ciò consente di ottenere una trasparenza indipendente dall'ordine quando si utilizzano anti-aliasing o trame semitrasparenti. Questa particolare tecnica è utile per le situazioni in cui è necessario eseguire il rendering di fogliame denso o erba in un videogioco.

