Pregunta

Cuando la conversión de RGB a escala de grises, se dice que los pesos específicos a los canales R, G y B se debe aplicar. Estos pesos son:. 0,2989, 0,5870, 0,1140

Se dice que la razón de esto es diferente percepción humana / sensibilidad 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 he encontrado una buena referencia para esto en la web. ¿Cuál es el origen de estos valores?

Ver también las preguntas anteriores: aquí y here.

¿Fue útil?

Solución

Los números específicos en la pregunta son de CCIR 601 (ver el enlace de Wikipedia más adelante).

Si convierte RGB -> escala de grises con un poco diferentes números / diferentes métodos, no verá mucha diferencia en absoluto en una pantalla de ordenador normales en condiciones normales de luz - probarlo

.

Estos son algunos enlaces más sobre el color en general:

Luma

sitio web excepcional Bruce Lindbloom 's

Capítulo 4 en color en el libro de Colin Ware, "Visualización de Información", ISBN 1-55860-819-2; esta larga enlace a Ware en books.google. com puede o no puede trabajar

cambridgeincolor : excelente, bien escrito "Tutoriales sobre cómo adquirir, interpretar y procesar fotografías digitales utilizando un enfoque orientado visualmente que hace hincapié en el concepto sobre procedimiento "

En caso de encontrarse con vs RGB "lineal" "no lineal", esto es parte de una antigua nota a mí mismo en esto. Repetir, en la práctica no verá mucha diferencia.


RGB -> ^ gamma -> Y -> L *

En la ciencia del color, los valores RGB común, como en rgb html (10%, 20%, 30%), se llaman "no lineal" o gamma corregida . valores "lineal" se definen como

Rlin = R^gamma,  Glin = G^gamma,  Blin = B^gamma

donde gamma es 2,2 para muchos PCs. El usual R G B están a veces escrito como R 'G' B '(R' = RLlN ^ (1 / gamma)) (Puristas lengua clic) pero aquí voy a soltar el'.

Brillo en una pantalla CRT es proporcional a RGBlin = RGB ^ gamma, así 50% de gris en un CRT es bastante oscuro: 0.5 ^ 2.2 = 22% de brillo máximo. (Pantallas LCD son más complejos; Además, algunas tarjetas gráficas compensan gamma.)

Para obtener la medida de la claridad llamada L* de RGB, primera división R G B por 255, y calcular

Y = .2126 * R^gamma + .7152 * G^gamma + .0722 * B^gamma

Este es Y en el espacio de color XYZ; es una medida del color "luminancia". (Las fórmulas reales no son exactamente x ^ gamma, pero cerca; pegarse con x ^ gamma para un primer pase.)

Por último,

L* = 116 * Y ^ 1/3 - 16
     

"... aspira a la uniformidad perceptual [y] concuerda estrechamente la percepción humana de la ligereza." -    espacio de color Lab

Otros consejos

He encontrado que esta publicación hace referencia en la respuesta a una pregunta similar anterior. Es muy útil:

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!

Aquí está algo de código en C para convertir RGB a escala de grises. La ponderación real utilizado para la conversión de RGB a escala de grises es 0.3R + 0,6G + 0.11B. estos pesos enviaban absolutamente crítico para que pueda jugar con ellos. Los he hecho 0.25R + 0,5 G + 0.25B. Se produce una imagen ligeramente más oscuro.

Nota: el código siguiente se supone formato de píxel de 32 bits xRGB

unsigned int *pntrBWImage=(unsigned int*)..data pointer..;  //assumes 4*width*height bytes with 32 bits i.e. 4 bytes per pixel
unsigned int fourBytes;
        unsigned char r,g,b;
        for (int index=0;index<width*height;index++)
        {
            fourBytes=pntrBWImage[index];//caches 4 bytes at a time
            r=(fourBytes>>16);
            g=(fourBytes>>8);
            b=fourBytes;

            I_Out[index] = (r >>2)+ (g>>1) + (b>>2); //This runs in 0.00065s on my pc and produces slightly darker results
            //I_Out[index]=((unsigned int)(r+g+b))/3;     //This runs in 0.0011s on my pc and produces a pure average
        }

Consulte el color Preguntas para información sobre esto. Estos valores provienen de la normalización de los valores RGB que utilizamos en nuestras pantallas. En realidad, de acuerdo con el color de preguntas frecuentes, los valores que está utilizando son obsoletas, ya que son los valores utilizados para el estándar NTSC original y no los monitores modernos.

Aquí hay un documento sobre cómo se obtuvieron estos números (o similares):

https://web.archive.org/web/20160303201512/http://www.cis.rit.edu/mcsl/research/broadbent/CIE1931_RGB.pdf

  

¿Cuál es la fuente de estos valores?

El "origen" de los coeficientes publicados son las especificaciones NTSC que se pueden ver en REC601 y Características de Televisión .

La "fuente última" son la CIE circa 1931 experimentos sobre la percepción humana del color. La respuesta espectral de la visión humana no es uniforme. Experimentos condujeron a la ponderación de los valores triestímulo basado en la percepción. Nuestra L, conos M, y S 1 son sensibles a las longitudes de onda de luz que identificamos como "Rojo", "verde", y "Blue" (respectivamente), que es donde los colores primarios triestímulo se derivan . 2

La luz lineal 3 coeficientes espectrales 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 los monitores de ordenador (sRGB) o monitores de televisión de alta definición (REC709), y se detallan en los documentos de la UIT para REC709 y también < a href = "https://www.itu.int/dms_pub/itu-r/opb/rep/R-REP-BT.2380-2-2018-PDF-E.pdf" rel = "nofollow noreferrer"> BT 0,2380 a 2 (10/2018)

NOTAS (1) Los conos son el color la detección de células de la retina del ojo.
(2) Sin embargo, las longitudes de onda triestímulo elegido no están en el "pico" de cada tipo cono - valores en lugar triestímulo se eligen de manera que estimulan en particular, cono de tipo sustancialmente más que otro, es decir, separación de estímulo
. (3) Es necesario linealizar sus valores sRGB antes de aplicar los coeficientes. Discuto esto en otra respuesta aquí.

Estos valores varían de persona a persona, especialmente para las personas que son daltónicos.

es todo esto realmente necesario, la percepción humana y CRT vs LCD variará, pero la intensidad R G B no es así, ¿Por qué no L = (R + G + B)/3 y establecer el nuevo RGB a L, L, L?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top