Il canale alfa (o secondo l'uso inglese alpha channel) è 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/CodecProfondità massima di bit alfaSupporto browserTipo di supportoApple Pro risoluzione 444416 bitnessunoVideo/.movHEVC/h.26510-bitLimitato a Safarivideo/.HEVCWebM (codec video VP8 o VP9)12 bitSiVideo/.WebMApriEXR32 bitNessunoImmagine/.exrPNG16 bitSiImmagine/.pngTIFF32 bitNessunoImmagine/.tiffAPNG24 bitSiImmagine/.apngGIF8 bitSiImmagine/.gifSVG32 bitSiImmagine/.svg
Funzionamento Con l'esistenza di un canale alfa, è possibile esprimere operazioni di compositing (composizione) dell'immagine utilizzando unalgebra di composizione. Ad esempio, date due immagini A e B, l'operazione di composizione 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, nel loro articolo del 1984 Thomas Porter e Tom Duff hanno definito una serie di operatori fondamentali per la composizione digitale, tra cui in, out (originariamente noto come hold out), atop e xor (insieme ai rispettivi operatori inversi rover, rin, rout e ratop). Analizzando come i colori di due pixel debbano fondersi quando le rispettive aree di copertura si sovrappongono ortogonalmente:
Over: Posiziona l'immagine A in primo piano sopra l'immagine B (lo sfondo). Corrisponde alla normale operazione di colorazione e fusione basata sulla trasparenza. In: Mantiene visibile solo la parte dell'immagine A che si sovrappone al canale alfa dell'immagine B, scartando tutto il resto. Out: (Dall'inglese hold out) Mantiene visibile solo la parte dell'immagine A che si trova al di fuori della copertura dell'immagine B. Atop: Sovrappone l'immagine A all'immagine B, ma limita la visibilità di A unicamente all'area coperta da B. Xor: Esegue un'operazione di esclusione (OR esclusivo), mostrando le parti di A e B che non si sovrappongono e rendendo trasparenti le aree di intersezione.
Ad esempio, l'operatore over può essere ottenuto applicando la seguente formula a ciascun pixel:
Qui , e 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 , e 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 composizione alfa del ritaglio. I due elementi usano solo il canale alfa della seconda immagine e ignorano le componenti del colore.
Lineare e 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:
Un vantaggio più evidente di ciò è che, in determinate situazioni, può evitare una successiva moltiplicazione (ad esempio se l'immagine viene utilizzata più volte durante la composizione successiva). 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 è una porzione 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
La sigla ARGBFFFF indica un formato di pixel specifico strutturato in questo modo:
ARGB: L'ordine dei canali colore, ovvero Alpha (trasparenza), Red (rosso), Green (verde) e Blue (blu).
FFFF: Indica il tipo di dato utilizzato per ciascun canale. In questo caso, F sta per Float (numero in virgola mobile a precisione singola, pari a 32 bit per canale).
Il seguente esempio è una porzione di linguaggio di scripting Julia che mostra come è possibile eseguire la composizione alfa: # creazione di un cerchio using ImageDraw function make_circle(sz, c::T) where T # aggiunta di colore trasparente per evitare l'area nera fillvalue = ARGB(c) img = fill(ARGB{eltype(T)}(0., 0., 0., 0.), sz...) origin = sz .÷ 2 r = sz .÷ 4 draw!(img, Ellipse(origin..., r...), fillvalue) img end
# trasparenza di tre cerchi di colore blu, verde e rosso red_c = make_circle((256, 256), ARGB(1., 0., 0., 1.)) green_c = make_circle((256, 256), ARGB(0., 1., 0., 1.)) blue_c = make_circle((256, 256), ARGB(0., 0., 1., 1.))Il seguente esempio è una porzione di linguaggio CSS3 che mostra come è possibile eseguire la composizione alfa:img.opacity { opacity: 1;} Il seguente esempio è una porzione di linguaggio HTML5 Canvas che mostra come è possibile eseguire la composizione alfa:ctx.globalAlpha = 0.2;Il seguente esempio è una porzione di linguaggio WebGL che mostra come è possibile eseguire la composizione alfa:gl = canvas.getContext("webgl", { premultipliedAlpha: false // Richiesta per canale alfa non pre-moltiplicato });
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:
Questa trasformazione utilizza meglio il numero limitato di bit nell'immagine codificata scegliendo 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:
Quando combinato con alfa pre-moltiplicato, la pre-moltiplicazione viene eseguita nello spazio lineare, prima della compressione gamma. Ne risulta la seguente formula:
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 L'alpha to coverage è una tecnica di multicampionamento (MSAA) impiegata nella computer grafica 3D che converte i valori del canale alfa in una maschera di copertura dei sub-pixel. Questo approccio consente di gestire la trasparenza in modo indipendente dall'ordine di rendering quando si utilizzano trame o texture semitrasparenti. L'ordine di rendering (in inglese render order) è la sequenza con cui la scheda video (GPU) calcola e disegna i diversi elementi grafici di una scena 3D sullo schermo, procedendo solitamente fotogramma per fotogramma. Alpha to coverage è utile, ad esempio, per eseguire il rendering di fogliame denso o di erba in un videogioco.
Note
Voci correlate Grafica computerizzata Immagine digitale Trasparenza (grafica)
Categoria:Formati di file grafici