Ao converter de RGB para escala de cinza, diz-se que pesos específicos para os canais R, G e B devem ser aplicados. Esses pesos são: 0,2989, 0,5870, 0,1140.
Diz-se que a razão para isso é a percepção / sensibilidade humana diferente em relação a essas três cores. Às vezes, também é dito que esses são os valores usados para calcular o sinal NTSC.
No entanto, não encontrei uma boa referência para isso na web. Qual é a fonte desses valores?
Respostas:
Os números específicos na pergunta são do CCIR 601 (consulte o link da Wikipedia abaixo).
Se você converter RGB -> escala de cinza com números ligeiramente diferentes / métodos diferentes, não verá muita diferença na tela normal do computador em condições normais de iluminação - experimente.
Aqui estão mais alguns links sobre cores em geral:
Wikipedia Luma
O excelente site de Bruce Lindbloom
o capítulo 4 sobre Cor no livro de Colin Ware, "Visualização da Informação", isbn 1-55860-819-2; esse longo link para o Ware em books.google.com pode ou não funcionar
cambridgeincolor : "tutoriais excelentes e bem escritos sobre como adquirir, interpretar e processar fotografias digitais usando uma abordagem visualmente orientada que enfatiza o conceito sobre o procedimento"
Se você se deparar com RGB "linear" vs "não linear", aqui está parte de uma observação antiga sobre isso. Repita, na prática você não verá muita diferença.
RGB -> ^ gama -> Y -> L *
Na ciência das cores, os valores comuns de RGB, como em html rgb (10%, 20%, 30%), são chamados de "não lineares" ou corrigidos por gama . Os valores "lineares" são definidos como
onde gama é 2.2 para muitos PCs. O RGB usual às vezes é escrito como R 'G' B '(R' = Rlin ^ (1 / gama)) (puristas, clique na língua), mas aqui eu vou largar o '.
O brilho em uma tela CRT é proporcional a RGBlin = RGB ^ gama, portanto 50% de cinza em um CRT é bastante escuro: 0,5 ^ 2,2 = 22% do brilho máximo. (Os monitores LCD são mais complexos; além disso, algumas placas gráficas compensam a gama).
Para obter a medida da luminosidade chamada
L*
de RGB, primeiro divida o RGB por 255 e calculeIsso está
Y
no espaço de cores XYZ; é uma medida da cor "luminância". (As fórmulas reais não são exatamente x ^ gama, mas fecham; use x ^ gama para uma primeira passagem.)Finalmente,
fonte
Descobri que esta publicação referenciava uma resposta a uma pergunta semelhante anterior. É muito útil:
http://cadik.posvete.cz/color_to_gray_evaluation/
Ele mostra 'toneladas' de métodos diferentes para gerar imagens em escala de cinza com resultados diferentes!
fonte
Heres algum código em c para converter rgb em escala de cinza. O peso real usado para conversão de rgb em escala de cinza é 0.3R + 0.6G + 0.11B. esses pesos não são absolutamente críticos para que você possa brincar com eles. Eu os fiz 0.25R + 0.5G + 0.25B. Produz uma imagem um pouco mais escura.
NOTA: O código a seguir assume o formato de pixel xRGB de 32 bits
fonte
0.11111111 * ((G + (G<<1) + R) <<1) + B)
. Isso é equivalente a(2*R+6*G+B) / 9)
ou0.222 R + 0.666 G + 0.111 B
. Antes de iniciar a produção, compare com uma fórmula precisa para vários casos de teste.Aqui está um artigo sobre como esses números (ou similares) foram derivados:
https://web.archive.org/web/20160303201512/http://www.cis.rit.edu/mcsl/research/broadbent/CIE1931_RGB.pdf
fonte
Consulte as Perguntas frequentes sobre cores para obter informações sobre isso. Esses valores vêm da padronização dos valores RGB que usamos em nossos displays. Na verdade, de acordo com as Perguntas frequentes sobre cores, os valores que você está usando estão desatualizados, pois são os valores usados para o padrão NTSC original e não para os monitores modernos.
fonte
A "fonte" dos coeficientes publicados são as especificações NTSC que podem ser vistas no Rec601 e Características da televisão .
A "fonte final" são os experimentos da CIE, por volta de 1931, sobre a percepção da cor humana. A resposta espectral da visão humana não é uniforme. Experimentos levaram à ponderação dos valores de tristímulos com base na percepção. Nossos cones L, M e S 1 são sensíveis aos comprimentos de onda da luz que identificamos como "Vermelho", "Verde" e "Azul" (respectivamente), que é onde as cores primárias dos tristímulos são derivadas. 2
As ponderações espectrais da luz linear 3 para sRGB (e Rec709) são:
R lin * 0,2126 + G lin * 0,7152 + B lin * 0,0722 = Y
Eles são específicos para os espaços de cores sRGB e Rec709, destinados a representar monitores de computador (sRGB) ou HDTV (Rec709), e são detalhados nos documentos da UIT para Rec709 e também BT.2380-2 (10/2018)
NOTAS (1) Os cones são as células de detecção de cor da retina do olho.
(2) No entanto, os comprimentos de onda de tristímulo escolhidos NÃO estão no "pico" de cada tipo de cone - em vez disso, os valores de tristímulo são escolhidos de modo a estimular um tipo de cone específico substancialmente mais do que outro, ou seja, separação de estímulos.
(3) Você precisa linearizar seus valores de sRGB antes de aplicar os coeficientes. Discuto isso em outra resposta aqui.
fonte
Esses valores variam de pessoa para pessoa, especialmente para pessoas que são daltônicas.
fonte
é tudo isso realmente necessário, a percepção humana e o CRT vs LCD variam, mas a intensidade do RGB não. Por que não
L = (R + G + B)/3
e defina o novo RGB como L, L, L?fonte