Canale alfa

Immagine che sfrutta il canale alfa

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/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 (composizione) dell'immagine utilizzando un'algebra 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:

Illustrazione degli operatori di composizione alfa nella computer grafica. "A" è il quadrato blu, "B" è il cerchio arancione.
Illustrazione degli operatori di composizione alfa nella computer grafica. "A" è il quadrato blu, "B" è il cerchio arancione.

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

αo=αa+αb(1−αa)
Co=Caαa+Cbαb(1−αa)αo

Qui Co, Ca e Cb 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 αo, αa e α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 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:

Co=Ca+Cb(1−αa)
αo=αa+αb(1−αa)

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

Canale alfa: paragone tra diversi parametri. Il colore in alto ha un canale alfa al 100% ed è più scuro, quello in basso del 66% ed è più chiaro.
Canale alfa: paragone tra diversi parametri. Il colore in alto ha un canale alfa al 100% ed è più scuro, quello in basso del 66% ed è più chiaro.

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:

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

Miscelazione alfa, tenendo conto della correzione gamma
Miscelazione alfa, tenendo conto della 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:

Cencoded=Clinearγ

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:

Co=(Ca1/γαa+Cb1/γαb(1−αa)αo)γ

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

Co=(Ca1/γ+Cb1/γ(1−αa))γ

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

  1. ↑ pdf (PDF), su graphics.pixar.com.
  2. ↑ Creating Textures, su echos.ch. URL consultato il 21 gennaio 2022.
  3. ↑ Extended Formats, su home.arcor.de (archiviato dall'url originale il 4 marzo 2016).
  4. ↑ AlphaConv (ZIP), su najmanowicz.com. URL consultato il 2 settembre 2012 (archiviato dall'url originale il 1º novembre 2012).
  5. ↑ DXTBmp, su mwgfx.co.uk.
  6. ↑ (EN) List of Video/Image Formats in 2021 Supporting Alpha Channels, su Pixel Bakery Design Studio, 21 gennaio 2022. URL consultato il 2 ottobre 2022.
  7. ↑ (EN) opacity - SVG: Scalable Vector Graphics | MDN, su developer.mozilla.org. URL consultato il 2 ottobre 2021.
  8. ↑ (EN) Bartosz Ciechanowski, Alpha Compositing – Bartosz Ciechanowski, su ciechanow.ski. URL consultato il 2 ottobre 2021.
  9. ↑ (EN) Alpha compositing, in Academic Dictionaries and Encyclopedias. URL consultato il 2 ottobre 2021.
  10. ↑ Alvy Smith, Alpha and the History of Digital Compositing, 12 ottobre 2000. URL consultato il 1º ottobre 2026.
  11. ↑ Bruce A. Wallace, Merging and transformation of raster images for cartoon animation, in SIGGRAPH Computer Graphics, vol. 15, n. 3, New York City, New York, ACM Press, 1981, pp. 253–262, DOI:10.1145/800224.806813, ISBN 0-89791-045-1.
  12. ↑ pdf (PDF), su graphics.stanford.edu.
  13. ↑ pdf, su researchgate.net.
  14. ↑ (EN) Premoltiplica | Compositing | Giovanni Di Grezia - VFX Artist, su Giovanni Di Grezia - VFX Artist and Software Developer, 10 aprile 2012. URL consultato il 2 ottobre 2021.
  15. ↑ TomF's Tech Blog - It's only pretending to be a wiki, su tomforsyth1000.github.io. URL consultato l'8 maggio 2018 (archiviato dall'url originale il 12 dicembre 2017).
  16. ↑ Apple Developer Documentation, su developer.apple.com. URL consultato il 2 ottobre 2021.
  17. ↑ Alpha Compositing · JuliaImages, su juliaimages.org. URL consultato il 2 ottobre 2021.
  18. ↑ (EN) opacity - CSS: Cascading Style Sheets | MDN, su developer.mozilla.org. URL consultato il 2 ottobre 2021.
  19. ↑ CSS Image Opacity / Transparency, su w3schools.com. URL consultato il 2 ottobre 2021.
  20. ↑ HTML canvas globalAlpha Property, su w3schools.com. URL consultato il 2 ottobre 2021.
  21. ↑ (EN) WebGL and Alpha, su webglfundamentals.org. URL consultato il 2 ottobre 2021.
  22. ↑ Minute Physics, Computer Color is Broken, su YouTube, 20 marzo 2015.
  23. ↑ John Novak, What every coder should know about gamma, su blog.johnnovak.net, 21 settembre 2016.
  24. ↑ (EN) Open .tga files with alpha channel in photoshop « Alec's Web Log, su alecjacobson.com. URL consultato il 2 ottobre 2021.
  25. ↑ Screen-Door Transparency, su digitalrune.github.io. URL consultato il 2 ottobre 2021.
  26. ↑ (EN) What Is Alpha Mapping? (with picture), su EasyTechJunkie. URL consultato il 2 ottobre 2021.
  27. ↑ Che cos'è Alpha Mapping?, su netinbag.com. URL consultato il 2 ottobre 2021 (archiviato dall'url originale il 2 ottobre 2021).
  28. ↑ (EN) Mask R-CNN with OpenCV, su PyImageSearch, 19 novembre 2018. URL consultato il 2 ottobre 2021.
  29. ↑ Humus - 3D, su humus.name. URL consultato il 2 ottobre 2021.

Voci correlate

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica