Perché L * = 0 non corrisponde al nero nello spazio colore L * a * b *?


8

Secondo due fonti che ho trovato, nello spazio colore CIELAB LAB un valore di L * = 0 corrisponde al nero. Citando Wikipedia :

Le tre coordinate di CIELAB rappresentano la luminosità del colore (L * = 0 produce nero e L * = 100 indica bianco diffuso ...)

e citando Phil Cruse :

L'asse L * rappresenta la luminosità. Questo è verticale; da 0, che non ha leggerezza (cioè nero assoluto) ...

Tuttavia, questo sembra non essere il caso. Ad esempio, usando L * = 0, a * = 127, b * = 0 si ottiene in Mathematica:

FullForm[ColorConvert[LABColor[0, 1.27, 0], "RGB"]]

(*RGBColor[0.46364605275068677, 0., 0.052627307663056185]*)

... che non è nero.

Questo non sembra essere un bug di Mathematica, in quanto è anche riprodotto (almeno per un paio di fichi) in Julia usando il Color.jlpacchetto:

convert(RGB, LAB(0,127,0))

# RGB{Float64}(0.46778684693714695,0.0,0.04112312700274846)

Allo stesso modo, la visualizzazione del cubo di colore di LAB Colorspace è nella Neat Examplessezione della pagina della documentazione di Mathematica per LABColor. Eccolo, con la faccia L * = 0 della superficie rivolta verso la telecamera:

inserisci qui la descrizione dell'immagine

Con l'eccezione del cubo all'angolo, la maggior parte dei cubi non è decisamente nera. Quindi la mia domanda è:

  • Perché un'impostazione L * = 0 non corrisponde necessariamente al nero nello spazio colore CIELAB? L * non dovrebbe corrispondere alla luminosità percepita? Se è così, allora perché alcune parti del sottospazio L * = 0 appaiono notevolmente più luminose del nero?

Per quello che vale, ho controllato e ci sono tre domande CIELAB su Mathematica.SE e 45 su StackOverflow.
Hardmath,

2
Quando dovresti ottenere valori RGB lineari negativi, la formula non funzionerà correttamente a meno che tale possibilità non sia stata presa esplicitamente in considerazione. Se controlli la conversione in XYZ, vedi che Y diventa zero per L uguale a zero e puoi anche vedere che quando RG e B non sono tutti zero, puoi ottenere Y uguale a zero solo se alcuni dei valori RGB sono negativo.
Conte Iblis il

@CountIblis: Grazie, ma sono ancora un po 'confuso; stai dicendo che la ragione per cui si verifica la non-oscurità è che il colore LAB(0,127,0)non esiste nello spazio RGB, e quindi la conversione si traduce in errori numerici che la fanno apparire non-nera?
DumpsterDoofus,

Sì, ecco cosa si riduce. È meglio leggere sulla conversione da Lab a XYZ, quindi da XYZ a RGB lineare, la trasformazione da RGB lineare a sRGB è solo una trasformazione gamma modificata. Vedrai che da Lab a XYZ non ci sono problemi, Y sarà zero quando L è zero. Ma da XYZ quando si imposta Y = 0 mentre X e o Z sono diversi da zero, verranno indicati valori negativi per uno o più componenti RGB, ovviamente se si suppone che la luminosità totale sia zero quando non tutti i componenti RGB sono zero, alcuni devono essere negativi. Gran parte di questo è spiegato qui en.wikipedia.org/wiki/Lab_color_space
Conte Iblis,

Forse più facile da vedere:Manipulate[ ArrayPlot@ Table[LABColor[l, a, b], {a, -1, 1, .05}, {b, -1, 1, .05}], {{l, 0}, -1, 2} ]
Szabolcs il

Risposte:


5

Qualunque sia lo spazio colore "RGB" (sRGB?) Che hai inserito come destinazione in Mathematica, ha una gamma limitata di colori che sono descritti dai valori R, G e B, di solito simili a ciò che un monitor può produrre, la stampante può stampare ecc. e molto più piccolo di Lab. Poiché esiste un numero limitato di valori (256 per canale di colore in 8 bit), gli spazi colore RGB cercano di non sprecare alcun valore sui colori che non possono essere riprodotti per evitare effetti collaterali negativi.

La conversione da Lab a RGB termina con colori fuori gamma e il programma sta quindi cercando di mappare il colore Lab al colore più vicino esistente nello spazio colore RGB target, di solito tagliando qualsiasi valore <0 o> 1 a 0 e 1.

Se sei propenso a giocarci, ecco un ottimo strumento sul web, CIE Color Calculator di Bruce Lindbloom, che può essere utilizzato per conversioni interattive veloci


2

La risposta è abbastanza semplice: il colore specificato non è valido (non esiste). Tenere presente che in molti modelli di colore è possibile specificare "colori" che non esistono.

In particolare si specifica L * = 0 (nessuna luce), ma si specifica anche un * = 1,27. Come può esserci qualsiasi componente di colore se non c'è luce?

Se esamini la seguente tabella (da alcuni miei lavori inediti), vedrai che per valori inferiori a L * = 3,14 la saturazione massima è zero (come per L * = 100). Valori cromatici massimi per LCh (ab)

La tabella mostra la massima saturazione percepibile per i colori h(verticale) a diversa intensità L(orizzontale). I massimi sono stampati in grassetto.

La fonte della tabella è: [Int10] International Color Consortium. Specifiche ICC.1: 2010 (versione del profilo 4.3.0.0), 12 2010. [Online: http://www.color.org/ specifica / ICC1v43_2010-12.pdf; Stand 15. novembre 2011].

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.