2010-02-10 25 views
7

La luminosità dei pixel sullo schermo di un computer non è in genere correlata linearmente ai valori dei tripletti RGB digitali di un pixel. La risposta non lineare dei primi CRT richiedeva una codifica non lineare compensativa e noi continuiamo a utilizzare tali codifiche oggi.Compensazione antialiasing e gamma

Di solito produciamo immagini sullo schermo di un computer e le consumiamo anche lì, quindi tutto funziona correttamente. Ma quando siamo antialias, la non linearità — chiama gamma — significa che non possiamo semplicemente aggiungere un valore alfa di 0,5 a un pixel coperto del 50% e aspettarci che abbia un aspetto corretto. Un valore alfa di 0,5 è solo 0,5^2,2 = 22% luminoso come un alfa di 1,0 con una gamma tipica di 2,2.

Esiste una prassi consolidata per l'antialiasing della compensazione gamma? Hai un metodo per animali domestici che usi di giorno in giorno? Qualcuno ha visto nessuno studio dei risultati e delle percezioni umane della qualità dell'output grafico con tecniche diverse?

Ho pensato di eseguire la compensazione X^(1/2.2) standard, ma è piuttosto intenso dal punto di vista computazionale. Forse posso renderlo più veloce con una tabella di ricerca di 256 voci, però.

risposta

1

Le tabelle di ricerca vengono utilizzate abbastanza spesso per lavori simili. Sono piccoli e veloci.

Ma se la ricerca o una formula, se il risultato finale è un file immagine e il formato lo consente, è meglio salvare un profilo colore o almeno il valore gamma nel file per una successiva visualizzazione, piuttosto che provare regolando i valori RGB da soli.

Il motivo: per i tipici canali R, G, B con valori di byte, in ciascun canale sono disponibili 256 valori univoci per ciascun pixel. Questo è abbastanza buono da sembrare buono per l'occhio umano (vorrei che "byte" fosse stato definito come nove bit!) Qualsiasi tipo di matematica, a parte un'inversione di valore banale, avrebbe mappato molti a uno per alcuni di quei valori. L'output non avrà 256 valori tra cui scegliere per ogni pixel per R, G o B, ma molto meno. Ciò può portare a contorni, rigonfiamenti, rumore del colore e altri difetti.

Problemi di precisione a parte, se si desidera qualsiasi tipo di qualità decente, tutto il compostaggio, miscelazione, miscelazione, correzione del colore, aggiunta di flare lente finta, chroma-keying e quant'altro, dovrebbe essere fatto nello spazio RGB lineare, dove i valori di R, G e B sono in proporzione all'intensità della luce fisica. La matematica dell'immagine imita la matematica della luce fisica. Ma dove la massima velocità è vitale, ci sono modi per imbrogliare.

+0

Nove byte bit? Ti piace così tanto? :-) –

2

Jim Blinns - Il libro "Dirty Pixels" delinea un rapido e valido calcolo del compositing usando la matematica a 16 bit più le tabelle di ricerca per andare avanti e indietro con precisione nello spazio colore lineare. Questo ragazzo ha lavorato alle visualizzazioni della NASA, lui conosce la sua roba.

2

sto cercando di rispondere, anche se soprattutto per riferimento ora, alle domande attuali:

In primo luogo, ci sono le raccomandazioni dell'UIT (http://www.itu.int/rec/T-REC-H.272-200701-I/en) che può essere applicata alla programmazione (ma devi sapere la vostra cose).

In "Notazione, notazione, notazione" di Jim Blinn, capitolo 9, ha un'analisi di errore matematico e percettivo molto dettagliata, sebbene riguardi solo il compositing (anche molte altre attività grafiche sono interessate).

La notazione che stabilisce può anche essere utilizzata per ricavare un modo di trattare con gamma, o per verificare se un determinato modo di farlo sia effettivamente corretto. Molto utile, il mio metodo preferito (principalmente perché l'ho scoperto in modo indipendente ma in seguito ho trovato il suo libro).

0

Quando si generano immagini, si opera in genere in uno spazio colore lineare (come RGB lineare o uno degli spazi colore CIE) e quindi si converte in uno spazio RGB non lineare alla fine. Quella conversione può essere accelerata in hardware o tramite tabelle di ricerca o anche attraverso complicati calcoli matematici. (Vedere i riferimenti delle altre risposte.)

Quando si esegue una fusione alfa (ad esempio, si esegue il rendering di questa icona su questo sfondo), questo tipo di precisione viene spesso eluso a favore della velocità. I risultati vengono calcolati direttamente nello spazio RGB non lineare lerping con l'alfa come parametro. Questo non è "corretto", ma è abbastanza buono nella maggior parte dei casi. Soprattutto per cose come le icone sui desktop.

Se si sta tentando di eseguire una fusione più corretta, lo si tratta come un rendering originale. Lavorare nello spazio lineare (che potrebbe richiedere una conversione iniziale) e quindi convertirlo nello spazio di visualizzazione non lineare alla fine.

Al giorno d'oggi molta grafica usa sRGB come spazio colore di visualizzazione non lineare. Se ricordo correttamente, sRGB è molto simile a una gamma di 2.2, ma ci sono delle regolazioni fatte ai valori nella fascia bassa.