Como calcular o comprimento de onda (Espectro) em RGB (Cor)
Primeiro, note que existem muitos sistemas de cor RGB. Para determinar a saída de cor por um display RGB, você precisa saber a cor (cromaticidade) de cada uma das 3 cores primárias. Você também precisa saber para que ponto branco o monitor está calibrado - a cor do branco que você obtém quando as 3 cores estão todas ligadas. E, finalmente, você precisa saber a função de transferência eletro-óptica (EOTF) do monitor, a função que mapeia os valores dos pixels de entrada (voltagens ou números) no brilho das 3 primárias. A EOTF é normalmente não linear, mas diferentes funções são usadas em padrões diferentes.
Se você tiver uma cor especificada como um triplo de intensidades em um padrão de codificação de cores RGB (por exemplo, sRGB), você pode calcular o que seu monitor deve emitir quando alimentado com essa entrada (assumindo que esteja calibrado). Mas se tiver um ecrã diferente que seja diferente do sRGB de qualquer forma (qualquer uma das primárias ou o ponto branco é uma cor diferente, EOTF diferente), então este segundo monitor funciona num espaço RGB diferente, e para obter a mesma cor de visualização precisa de um triplo de entrada RGB diferente.
Então escolha um sistema de cor RGB específico. Para esse sistema de cor você conhece os três cromáticos primários, que normalmente são especificados no espaço CIE (x, y). Você ainda não sabe os ganhos RGB individuais, mas você pode calculá-los. Você sabe que, quando todos os ganhos são definidos ao máximo, a saída deve ser o ponto branco calibrado. Então, você converte as primárias individuais de (x, y) para (x, y, z) forma (z = 1 - x - y), depois as organiza em 3 colunas para formar uma matriz de 3 x 3. Se você multiplicar esta matriz de 3 x 3 à direita pelo vetor da coluna (Gr Gg Gb)', o resultado é a cor CIE (X, Y, Z) (nota: capital XYZ) do branco que é produzido. Mas você conhece a cromaticidade do branco e sua luminância (geralmente na forma (x, y, Y) que é facilmente convertida em (X, Y, Z). Então agora você tem um sistema de equações que pode ser resolvido para calcular Gr, Gg, e Gb. O resultado diz-lhe que o vermelho primário do monitor (Xr, Yr, Zr) é na verdade o vermelho (x, y, z) multiplicado por Gr o ganho vermelho, e o mesmo para o verde e azul. Multiplique as 3 colunas da matriz pelos ganhos individuais, e agora você tem a matriz 3x3 que converte (R, G, B) para a faixa [0..1] em cor CIE verdadeira (X, Y, Z).
Ao inverter a matriz, você tem a conversão de qualquer (X, Y, Z) cor (R, G, B) neste sistema de cor RGB em particular. Note que se qualquer uma de R, G, ou B for menor que 0 ou maior que 1, este monitor não pode reproduzir essa cor.
Essa foi a parte mais difícil do trabalho. A seguir, você precisa descobrir qual (X, Y, Z) cor você realmente quer. Para fazer isso, você precisa obter uma cópia das funções de correspondência de cor CIE 1931 x-bar, y-bar, e z-bar. Se você estiver tentando replicar a aparência de todo um espectro de luz (muitos comprimentos de onda), você precisa integrar o produto do espectro com cada uma dessas funções separadamente. Se você estiver trabalhando com um espectro discreto (por exemplo, amplitude medida a cada 5 nm ou a cada 1 nm), isto se transforma em uma soma de produtos. Para cada comprimento de onda, multiplique a amplitude da luz na banda do espectro pelo valor da função correspondente no centro dessa banda, e depois acrescente os resultados para todos os comprimentos de onda. O resultado é a cor (X, Y, Z) que alguém (com visão de cor normal) verá quando olhar para esse espectro.
Se a sua entrada é um espectro de um único comprimento de onda, como a luz laser, então tudo que você precisa fazer é procurar o valor da barra x, barra y e barra z para esse único comprimento de onda, já que a amplitude de todos os outros comprimentos de onda é zero, então não há necessidade de soma.
Após ter o XYZ da cor que deseja, multiplique pela matriz XYZ-para-RGB para o seu ecrã RGB em particular, e ele dir-lhe-á os valores RGB que precisa para reproduzir essa cor.
As boas notícias: Se a sua entrada é realmente o espectro de algum objecto comum que reflecte a luz branca, provavelmente descobrirá que o seu monitor o pode reproduzir.
As más notícias: Se a sua entrada é uma fonte de luz de frequência única, inevitavelmente um dos pesos RGB que calcula será negativo. Isto significa que a cor que está a tentar reproduzir está fora da gama de cores do ecrã, e terá de reduzir a saturação de cor da cor desejada (esperançosamente mantendo a mesma tonalidade percebida) até obter uma cor que esteja dentro da gama do ecrã.
Agora, já li algumas coisas básicas acima. Eu não descrevi o que são funções de combinação de cores, ou a diferença entre os formatos de cor CIE (x, y, z), (X, Y, Z), e (x, y, Y). Estes já serão familiares se você tiver lido alguma introdução à ciência da cor, mas se não, você precisará encontrar um livro didático e aprendê-los.
Isto não requer nada além da matemática do ensino médio. Prefiro fazer todos os cálculos em forma vetorial e matricial, usando Excel ou Matlab, porque ambos são razoáveis para lidar com a multiplicação e inversão matricial de vetores. Mas você pode fazer a mesma matemática que um conjunto de equações escalares em um bloco de papel. A forma matricial é apenas mais compacta.
Artigos semelhantes
- A cor preta tem um comprimento de onda?
- Onde posso obter jogos defensivos como construir torres para parar onda após onda de inimigos?
- Qual é o melhor aplicativo de rádio offline no qual podemos tocar MW (onda média) e SW (onda curta) não apenas FM?
- Se as ondas de rádio têm um comprimento de onda tão grande, como poderia chegar aos telefones enquanto está dentro de casa?