2013-05-13 8 views
26

Sto cercando una formula di correzione gamma semplice per immagini in scala di grigi con valori compresi tra 0 e 255.formula di correzione gamma:.^(Gamma) o.^(1/gamma)?

Diciamo che la gamma del mio schermo è 2.2 (è uno schermo LCD quindi probabilmente avrei bisogno di stimarla con una procedura più complicata, ma supponiamo che il mio schermo si comporti bene).

Quale delle seguenti formule sarebbe quella corretta?

(1) corretto = 255 * (immagine/255).^2.2

O

(2) corretto = 255 * (immagine/255).^(1/2,2)

(quelli sono destinati a essere codici MATLAB ma spero che siano comprensibili anche a persone non MATLAB)

Mi sono guardato in giro su internet ma ho trovato entrambe le formule in giro. Sospetto (2) sia quello giusto, e la mia confusione è dovuta alla tendenza a chiamare "valore gamma" l'inverso del valore gamma effettivo, ma apprezzerei molto il feedback di persone che sanno di cosa stanno parlando .. .

Grazie :-) vengono utilizzati

+1

hai ragione di chiedere. Questo è tutto molto confuso. –

risposta

22

La correzione gamma controlla la luminosità complessiva di un'immagine. Le immagini che non sono corrette possono sembrare sbiancate o troppo scure. Si supponga che il monitor di un computer abbia la funzione di potenza 2.2 come curva di intensità in risposta alla tensione. Ciò significa che se si invia un messaggio al monitor che un determinato pixel deve avere intensità uguale a x, verrà effettivamente visualizzato un pixel con intensità pari a x 2.2 Poiché l'intervallo di tensioni inviato al monitor è tra 0 e 1, ciò significa che il valore di intensità visualizzato sarà inferiore a quello che si desidera che sia. Si dice che tale monitor abbia una gamma di 2.2.

Quindi nel tuo caso,

Corrected = 255 * (Image/255)^(1/2.2). 
+1

grazie che è stato molto semplice! buona giornata – user42174

19

Entrambe le formule, uno per codificare gamma, e uno per decodificare gamma.

codifica Gamma viene utilizzato per aumentare la qualità dei valori ombra quando un'immagine viene memorizzata come valori di intensità intero, in modo da fare gamma codifica si utilizza la formula:

encoded = ((original/255)^(1/gamma)) * 255 

Gamma decodifica viene utilizzato per ripristinare l'originale valori, quindi la formula di ciò è:

original = ((encoded/255)^gamma) * 255 

Se il monitor fa la decodifica di gamma, si vorrebbe utilizzare la prima formula per codificare i dati immagine.

+3

buono ma attento. nella tua prima formula 'originale' è un valore SINTETIZZATO, ad esempio da un riproduttore. (raytracing, raster qualunque). ed è nello spazio (fisico) lineare. Se 'original' è il pixel di una foto, o una texture, allora NON SI APPLICA QUALUNQUE FORMULA, perché sono già codificati con gamma. se lo fai, farai semplicemente le cose due volte. E qui è dove le cose si complicano, se hai trame come input di un riproduttore? è necessario linearizzare applicando prima la formula 2, quindi eseguire la matematica, quindi tornare alla memoria. –

+0

Come sapere quale valore di gammma viene utilizzato nell'immagine acquisita dalla fotocamera logitech? – Abc

+1

@Abc: normalmente il valore gamma è 2.2 per un'immagine destinata a essere visualizzata su uno schermo normale. In genere si tratta di un'immagine JPEG che utilizza gli spazi colore sRGB o Adobe RGB. – Guffa