Saltar al contenido

Conversión de RGB a escala de grises / intensidad

Solución:

Los números específicos en la pregunta son del CCIR 601 (consulte el enlace de Wikipedia a continuación).

Si convierte RGB -> escala de grises con números o métodos ligeramente 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

el capítulo 4 sobre Color en el libro de Colin Ware, “Visualización de información”, isbn 1-55860-819-2; este enlace largo a Ware en books.google.com puede funcionar o no

cambridgeincolor: excelentes y bien escritos “tutoriales sobre cómo adquirir, interpretar y procesar fotografías digitales utilizando un enfoque visual que enfatiza el concepto sobre el procedimiento”

Si se encuentra con RGB “lineal” vs “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 corregidos por gamma. Los valores “lineales” se definen como

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

donde gamma es 2.2 para muchas PC. Los RGB habituales a veces se escriben como R ‘G’ B ‘(R’ = Rlin ^ (1 / gamma)) (clic con la lengua de los puristas) pero aquí soltaré el ‘.

El brillo en una pantalla CRT es proporcional a RGBlin = RGB ^ gamma, por lo que el 50% de gris en un 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 ligereza llamada L* de RGB, primero divida RGB por 255 y calcule

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

Este es Y en el espacio de color XYZ; es una medida de la “luminancia” del color. (Las fórmulas reales no son exactamente x ^ gamma, pero cercanas; quédese con x ^ gamma para una primera pasada).

Finalmente,

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

“… aspira a la uniformidad de percepción [and] se asemeja mucho a la percepción humana de la ligereza “.
Espacio de color de laboratorio de Wikipedia

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 métodos diferentes para generar imágenes en escala de grises con diferentes resultados!

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 hice 0.25R + 0.5G + 0.25B. Produce una imagen un poco más oscura.

NOTA: El siguiente código asume el formato de píxeles xRGB de 32 bits

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
        }
¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *