Por que L * = 0 não corresponde ao preto no espaço de cores L * a * b *?

8

De acordo com duas fontes que encontrei, no espaço de cores CIELAB LAB, um valor de L * = 0 corresponde ao preto. Citando a Wikipedia :

As três coordenadas do CIELAB representam a claridade da cor (L * = 0 produz preto e L * = 100 indica branco difuso ...)

e citando Phil Cruse :

O eixo L * representa a luminosidade. Isso é vertical; de 0, que não tem leveza (ou seja, preto absoluto) ...

No entanto, este parece não ser o caso. Por exemplo, usando L * = 0, a * = 127, b * = 0 é obtido no Mathematica:

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

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

... que não é preto.

Isso não parece ser um bug do Mathematica, pois também é reproduzido (para alguns sig figs, pelo menos) na Julia usando o Color.jlpacote:

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

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

Da mesma forma, visualizar o cubo de cores do LAB Colorspace está na Neat Examplesseção da página de documentação do Mathematica LABColor. Aqui está, com a face L * = 0 da superfície apontando para a câmera:

insira a descrição da imagem aqui

Com exceção do cubo na esquina, a maioria dos cubos não é preta. Então, minha pergunta é:

  • Por que uma configuração L * = 0 não corresponde necessariamente ao preto no espaço de cores do CIELAB? L * não deveria corresponder à luminosidade percebida? Se sim, então por que algumas partes do subespaço L * = 0 parecem consideravelmente mais brilhantes que o preto?
DumpsterDoofus
fonte
Para o que vale a pena, verifiquei e há três perguntas do CIELAB no Mathematica.SE e 45 no StackOverflow.
hardmath
2
Quando você deve obter valores RGB lineares negativos, a fórmula não funcionará corretamente, a menos que essa possibilidade tenha sido levada em consideração explicitamente. Se você verificar a conversão para XYZ, verá que Y se torna zero para L igual a zero e também pode ver que, quando RG e B não são todos zero, você só pode obter Y igual a zero se alguns dos valores RGB forem negativo.
Count Iblis
@CountIblis: Obrigado, mas ainda estou um pouco confuso; você está dizendo que a razão pela qual a não escuridão ocorre é que a cor LAB(0,127,0)não existe no espaço RGB e, portanto, a conversão resulta em erros numéricos que fazem com que ela pareça não preta?
precisa
Sim, é para isso que se resume. É melhor ler sobre a conversão de Lab em XYZ e, em seguida, de XYZ em RGB linear, a transformação de RGB linear em sRGB é apenas uma transformação gama modificada. Você verá que do Lab para XYZ não há problemas, Y será zero quando L for zero. Porém, a partir de XYZ, quando você define Y = 0, enquanto X e ou Z são diferentes de zero, os valores negativos serão emitidos para um ou mais componentes RGB, obviamente se a brigness total deve ser zero quando nem todos os componentes RGB são zero, alguns devem ser negativos. A maior parte disso é explicada aqui en.wikipedia.org/wiki/Lab_color_space
Count Iblis
Talvez seja mais fácil ver: #Manipulate[ ArrayPlot@ Table[LABColor[l, a, b], {a, -1, 1, .05}, {b, -1, 1, .05}], {{l, 0}, -1, 2} ]
Szabolcs

Respostas:

5

Qualquer que seja o espaço de cores "RGB" (sRGB?) Que você inseriu como destino no Mathematica, ele possui uma gama limitada de cores descritas pelos valores R, G e B, geralmente semelhantes ao que um monitor pode produzir, a impressora pode imprimir etc e muito menor que o Lab. Como existe apenas um número limitado de valores (256 por canal de cores em 8 bits), os espaços de cores RGB tentam não desperdiçar valores em cores que não podem ser reproduzidas para evitar efeitos colaterais desagradáveis.

A conversão do Lab para RGB termina com cores fora da gama e, em seguida, o programa tenta mapear a cor do Lab para a cor mais próxima que existe no espaço de cores RGB de destino, geralmente aparando os valores <0 ou> 1 a 0 e 1

Se você gosta de brincar com ele, aqui está uma ótima ferramenta na Web, a CIE Color Calculator de Bruce Lindbloom, que pode ser usada para conversões interativas rápidas

MirekE
fonte
2

A resposta é bem simples: a cor que você especificou é inválido (ela não existe). Esteja ciente de que em muitos modelos de cores é possível especificar "cores" que não existem.

Especificamente, você especifica L * = 0 (sem luz), mas também especifica um * = 1,27. Como pode haver qualquer componente de cor se não houver luz?

Se você examinar a tabela a seguir (de algum trabalho não publicado meu), verá que, para valores abaixo de L * = 3,14, a saturação máxima é zero (como é para L * = 100). Valores máximos de croma para LCh (ab)

A tabela mostra a saturação máxima perceptível para cores h(vertical) em diferentes intensidades L(horizontal). Os máximos são impressos em negrito.

A fonte da tabela é: [Int10] International Color Consortium. Especificação ICC.1: 2010 (versão do perfil 4.3.0.0), 12 de 2010. [Online: http://www.color.org/ especificação / ICC1v43_2010-12.pdf; Stand 15. November 2011].

U. Windl
fonte