Al convertir de RGB a escala de grises, se dice que se deben aplicar pesos específicos a los canales R, G y B. Estos pesos son: 0.2989, 0.5870, 0.1140.
Se dice que la razón de esto es la diferente percepción / sensibilidad humana hacia estos tres colores. A veces también se dice que estos son los valores utilizados para calcular la señal NTSC.
Sin embargo, no encontré una buena referencia para esto en la web. ¿Cuál es la fuente de estos valores?
Respuestas:
Los números específicos en la pregunta son del CCIR 601 (vea el enlace de Wikipedia a continuación).
Si convierte RGB -> escala de grises con números ligeramente diferentes / métodos diferentes, no verá mucha diferencia en la pantalla de una computadora normal en condiciones de iluminación normales, pruébelo.
Aquí hay algunos enlaces más sobre el color en general:
Wikipedia Luma
El destacado sitio web de Bruce Lindbloom
capítulo 4 sobre Color en el libro de Colin Ware, "Visualización de información", isbn 1-55860-819-2; este largo enlace a Ware en books.google.com puede o no funcionar
cambridgeincolor : excelentes "tutoriales bien escritos sobre cómo adquirir, interpretar y procesar fotografías digitales utilizando un enfoque orientado visualmente que enfatiza el concepto sobre el procedimiento"
Si te topas con RGB "lineal" frente a "no lineal", aquí hay parte de una vieja nota para mí sobre esto. Repita, en la práctica no verá mucha diferencia.
RGB -> ^ gamma -> Y -> L *
En la ciencia del color, los valores RGB comunes, como en html rgb (10%, 20%, 30%), se denominan "no lineales" o Gamma corregidos . Los valores "lineales" se definen como
donde gamma es 2.2 para muchas PC. Los RGB habituales a veces se escriben como R 'G' B '(R' = Rlin ^ (1 / gamma)) (purista clic de lengua) pero aquí soltaré el '.
El brillo en una pantalla CRT es proporcional a RGBlin = RGB ^ gamma, por lo que el 50% de gris en una CRT es bastante oscuro: .5 ^ 2.2 = 22% del brillo máximo. (Las pantallas LCD son más complejas; además, algunas tarjetas gráficas compensan la gamma).
Para obtener la medida de la luminosidad llamada
L*
desde RGB, primero divida RGB entre 255 y calculeEsto está
Y
en el espacio de color XYZ; Es una medida de color "luminancia". (Las fórmulas reales no son exactamente x ^ gamma, sino cercanas; quédese con x ^ gamma para una primera pasada).Finalmente,
fuente
Encontré que esta publicación hace referencia en una respuesta a una pregunta similar anterior. Es de mucha ayuda:
http://cadik.posvete.cz/color_to_gray_evaluation/
¡Muestra 'toneladas' de diferentes métodos para generar imágenes en escala de grises con diferentes resultados!
fuente
Aquí hay un código en c para convertir rgb a escala de grises. La ponderación real utilizada para la conversión de rgb a escala de grises es 0.3R + 0.6G + 0.11B. estos pesos no son absolutamente críticos para que puedas jugar con ellos. Los he hecho 0.25R + 0.5G + 0.25B. Produce una imagen ligeramente más oscura.
NOTA: El siguiente código asume el formato de píxeles xRGB de 32 bits
fuente
0.11111111 * ((G + (G<<1) + R) <<1) + B)
. Esto es equivalente a(2*R+6*G+B) / 9)
o0.222 R + 0.666 G + 0.111 B
. Antes de pasar a producción, compare con una fórmula precisa para varios casos de prueba.Aquí hay un documento sobre cómo se derivaron estos números (o similares):
https://web.archive.org/web/20160303201512/http://www.cis.rit.edu/mcsl/research/broadbent/CIE1931_RGB.pdf
fuente
Consulte las Preguntas frecuentes sobre el color para obtener información al respecto. Estos valores provienen de la estandarización de los valores RGB que usamos en nuestras pantallas. En realidad, de acuerdo con las Preguntas frecuentes sobre el color, los valores que está utilizando no están actualizados, ya que son los valores utilizados para el estándar NTSC original y no para los monitores modernos.
fuente
La "fuente" de los coeficientes publicados son las especificaciones NTSC que se pueden ver en Rec601 y Características de la televisión .
La "fuente fundamental" son los experimentos de CIE de 1931 sobre la percepción del color humano. La respuesta espectral de la visión humana no es uniforme. Los experimentos condujeron a la ponderación de los valores de triestímulo basados en la percepción. Nuestros conos L, M y S 1 son sensibles a las longitudes de onda de luz que identificamos como "Rojo", "Verde" y "Azul" (respectivamente), que es donde se derivan los colores primarios del triestímulo. 2
Las ponderaciones espectrales de luz lineal 3 para sRGB (y Rec709) son:
R lin * 0.2126 + G lin * 0.7152 + B lin * 0.0722 = Y
Estos son específicos de los espacios de color sRGB y Rec709, que están destinados a representar monitores de computadora (sRGB) o monitores HDTV (Rec709), y se detallan en los documentos de la UIT para Rec709 y también BT.2380-2 (10/2018)
NOTAS AL PIE (1) Los conos son las células que detectan el color de la retina del ojo.
(2) Sin embargo, las longitudes de onda de triestímulo elegidas NO están en el "pico" de cada tipo de cono; en cambio, los valores de triestímulo se eligen de manera que estimulen un tipo de cono en particular sustancialmente más que otro, es decir, la separación del estímulo.
(3) Debe linealizar sus valores sRGB antes de aplicar los coeficientes. Discuto esto en otra respuesta aquí.
fuente
Estos valores varían de persona a persona, especialmente para las personas daltónicas.
fuente
es todo esto realmente necesario, la percepción humana y la CRT vs LCD variarán, pero la intensidad RGB no, ¿por qué no
L = (R + G + B)/3
y establecer el nuevo RGB en L, L, L?fuente