sRGB es un espacio de color RGB (rojo, verde, azul) estándar que HP y Microsoft crearon en cooperación en 1996 para usar en monitores, impresoras y la World Wide Web . [2] Posteriormente fue estandarizado por la Comisión Electrotécnica Internacional (IEC) como IEC 61966-2-1:1999. [1] sRGB es el espacio de color estándar definido actualmente para la web, y generalmente es el espacio de color asumido para imágenes que no están etiquetadas para un espacio de color ni tienen un perfil de color incorporado .
sRGB codifica esencialmente las especificaciones de visualización para los monitores de computadora que se usaban en ese momento, lo que ayudó en gran medida a su aceptación. sRGB utiliza los mismos colores primarios y punto blanco que el estándar ITU-R BT.709 para HDTV , [3] una función de transferencia (o gamma ) compatible con las pantallas CRT de la época y un entorno de visualización diseñado para adaptarse a las condiciones de visualización típicas del hogar y la oficina.
sRGB define las cromaticidades de los primarios rojo, verde y azul , los colores en los que uno de los tres canales es distinto de cero y los otros dos son cero. La gama de cromaticidades que se puede representar en sRGB es el triángulo de colores definido por estos primarios, que se establecen de manera que el rango de colores dentro del triángulo se encuentre dentro del rango de colores visibles para un humano con visión tricromática normal . Al igual que con cualquier espacio de color RGB , para valores no negativos de R, G y B no es posible representar colores fuera de este triángulo.
Los valores primarios provienen de HDTV ( ITU-R BT.709 ), que son algo diferentes de los de los sistemas de televisión en color más antiguos ( ITU-R BT.601 ). Estos valores se eligieron para reflejar el color aproximado de los fósforos de los CRT de consumo en el momento de su diseño. Dado que las pantallas planas de la época se diseñaban generalmente para emular las características de los CRT, los valores también reflejaban la práctica predominante para otros dispositivos de visualización. [1]
La caracterización de la pantalla de referencia se basa en la caracterización de CIE 122. La pantalla de referencia se caracteriza por una gamma de ley de potencia nominal de 2,2, que el grupo de trabajo sRGB determinó que era representativa de los CRT utilizados con sistemas operativos Windows en ese momento. [2] La capacidad de mostrar directamente imágenes sRGB en un CRT sin ninguna búsqueda ayudó en gran medida a la adopción de sRGB. [ cita requerida ] Gamma también codifica de manera útil más datos cerca del negro, lo que reduce el ruido visible y los artefactos de cuantificación .
La norma también define una función de transferencia optoelectrónica (OETF), que define la conversión de la intensidad de la luz o señal lineal en datos de imagen comprimidos con gamma. Es una función compuesta por partes y tiene un valor aproximado de 2,2, con una parte lineal cercana a cero para evitar una pendiente infinita que enfatiza el ruido de la señal (cámara). [4] [5] Cerca de cero, una curva de ley de potencia intercepta una sección de línea recta que conduce a cero.
En la práctica, todavía hay debate y confusión sobre si los datos sRGB deben mostrarse con una gama pura de 2,2, como se define en el estándar, o con la inversa de la OETF. Algunos fabricantes de pantallas y calibradores utilizan la primera, mientras que otros utilizan la segunda. Cuando se utiliza una ley de potencia para mostrar datos que se pretendía mostrar en pantallas que utilizan la función por partes, el resultado es que los detalles de las sombras se "aplastarán" hacia un negro intenso. [6]
Una línea recta que pasa por (0,0) es , y una curva gamma que pasa por (1,1) es
Si estos se unen en el punto ( X , X /Φ) entonces:
Para evitar una torcedura donde se encuentran los dos segmentos, las derivadas deben ser iguales en este punto:
Ahora tenemos dos ecuaciones. Si tomamos como incógnitas X y Φ , podemos resolver para obtener
Los valores A = 0,055 y Γ = 2,4 se eligieron [ ¿cómo? ] para que la curva se asemejara mucho a la curva gamma-2,2. Esto da X ≈ 0,0392857, Φ ≈ 12,9232102 . Estos valores, redondeados a X = 0,03928, Φ = 12,92321, a veces describen la conversión sRGB. [7]
Los borradores de las publicaciones de los creadores de sRGB redondearon aún más Φ = 12,92 , [2] lo que dio como resultado una pequeña discontinuidad en la curva. Algunos autores adoptaron estos valores incorrectos, en parte porque el borrador del documento estaba disponible de forma gratuita y el estándar IEC oficial está detrás de un muro de pago. [8] Para el estándar, se mantuvo el valor redondeado de Φ y se volvió a calcular X como 0,04045 para hacer que la curva fuera continua, [a] lo que dio como resultado una discontinuidad de la pendiente desde 1/12,92 por debajo de la intersección hasta 1/12,70 por encima.
La especificación sRGB asume un entorno de codificación (creación) poco iluminado con una temperatura de color correlacionada ambiental (CCT) de 5003 K. Esto difiere de la CCT del iluminante ( D65 ). El uso de D50 para ambos habría hecho que el punto blanco de la mayoría del papel fotográfico pareciera excesivamente azul. [10] [11] Los otros parámetros, como el nivel de luminancia, son representativos de un monitor CRT típico.
Para obtener resultados óptimos, el ICC recomienda utilizar el entorno de visualización codificado (es decir, iluminación tenue y difusa) en lugar del entorno de visualización típico menos estricto. [2]
Los valores de los componentes sRGB , , están en el rango de 0 a 1. Cuando se representan digitalmente como números de 8 bits, estos valores de componentes de color están en el rango de 0 a 255 y deben dividirse (en una representación de punto flotante) por 255 para convertirlos al rango de 0 a 1.
¿Dónde está , , o ?
Estos valores expandidos gamma (a veces llamados "valores lineales" o "valores de luz lineal") se multiplican por una matriz para obtener CIE XYZ (la matriz tiene precisión infinita, no se permite ningún cambio en sus valores ni la adición de valores distintos de cero):
En realidad, esta es la matriz para los primarios BT.709, no solo para sRGB, la segunda fila corresponde a los coeficientes de luminancia BT.709-2 (BT.709-1 tenía un error tipográfico en estos coeficientes).
Los valores CIE XYZ deben escalarse de modo que el valor Y de D65 ("blanco") sea 1,0 ( X = 0,9505, Y = 1,0000, Z = 1,0890). Esto suele ser así, pero algunos espacios de color utilizan 100 u otros valores (como en CIELAB , cuando se utilizan puntos blancos específicos).
El primer paso en el cálculo de sRGB a partir de CIE XYZ es una transformación lineal, que puede llevarse a cabo mediante una multiplicación de matrices. (Los valores numéricos a continuación coinciden con los de la especificación oficial de sRGB, [1] [12] que corrigió pequeños errores de redondeo en la publicación original [2] de los creadores de sRGB, y asume el observador colorimétrico estándar de 2° para CIE XYZ. [2] ) Esta matriz depende de la profundidad de bits.
Estos valores RGB lineales no son el resultado final; aún así, se debe aplicar la corrección de gamma. La siguiente fórmula transforma los valores lineales en sRGB:
¿Dónde está , , o ?
Estos valores comprimidos de gamma (a veces llamados "valores no lineales") suelen recortarse en el rango de 0 a 1. Este recorte se puede realizar antes o después del cálculo de gamma, o como parte de la conversión a 8 bits. Si se requieren valores en el rango de 0 a 255, por ejemplo, para visualización de video o gráficos de 8 bits, la técnica habitual es multiplicar por 255 y redondear a un número entero.
Debido a la estandarización de sRGB en Internet, en las computadoras y en las impresoras, muchas cámaras digitales y escáneres de consumo de gama baja a media utilizan sRGB como el espacio de color de trabajo predeterminado (o el único disponible). Sin embargo, los CCD de consumo normalmente no están calibrados, lo que significa que, aunque la imagen esté etiquetada como sRGB, no se puede concluir que la imagen sea sRGB con colores precisos.
Si se desconoce el espacio de color de una imagen y se trata de un formato de imagen de 8 bits, normalmente se asume que sRGB es el valor predeterminado, en parte porque los espacios de color con una gama más amplia necesitan una mayor profundidad de bits para mantener una tasa de error de color baja (∆E). Se puede utilizar un perfil ICC o una tabla de búsqueda para convertir sRGB a otros espacios de color. Los perfiles ICC para sRGB están ampliamente distribuidos y el ICC distribuye varias variantes de perfiles sRGB, [13] incluidas variantes para ICCmax, versión 4 y versión 2. Generalmente se recomienda la versión 4, pero la versión 2 todavía se utiliza comúnmente y es la más compatible con otro software, incluidos los navegadores. La versión 2 de la especificación del perfil ICC no admite oficialmente la codificación de curva paramétrica por partes ("para"), aunque la versión 2 sí admite funciones de ley de potencia simples. [13] Sin embargo, las tablas de búsqueda se utilizan más comúnmente ya que son computacionalmente más eficientes. [ cita requerida ] Incluso cuando se utilizan curvas paramétricas, el software a menudo se reducirá a una tabla de búsqueda en tiempo de ejecución para un procesamiento eficiente. [ cita requerida ]
Como la gama sRGB iguala o supera la gama de una impresora de inyección de tinta de gama baja , una imagen sRGB suele considerarse satisfactoria para la impresión doméstica. Los profesionales de la impresión de alta gama a veces evitan sRGB porque su gama de colores no es lo suficientemente grande, especialmente en los colores azul-verde, para incluir todos los colores que se pueden reproducir en la impresión CMYK . Las imágenes destinadas a la impresión profesional a través de un flujo de trabajo con gestión de color completa (por ejemplo, salida de preimpresión ) a veces utilizan otro espacio de color como Adobe RGB (1998) , que admite una gama más amplia. Estas imágenes utilizadas en Internet se pueden convertir a sRGB utilizando herramientas de gestión de color que suelen incluirse con el software que funciona en estos otros espacios de color.
Las dos interfaces de programación dominantes para gráficos 3D, OpenGL y Direct3D , han incorporado soporte para la curva gamma sRGB.
OpenGL admite texturas con componentes de color codificados en gamma sRGB (introducidos por primera vez con la extensión EXT_texture_sRGB, [14] agregada al núcleo en OpenGL 2.1) y renderizado en framebuffers codificados en gamma sRGB (introducidos por primera vez con la extensión EXT_framebuffer_sRGB, [15] agregada al núcleo en OpenGL 3.0). El mapeo mip y la interpolación correctos de texturas gamma sRGB tienen soporte de hardware directo en las unidades de texturizado de la mayoría de las GPU modernas (por ejemplo, nVidia GeForce 8 realiza la conversión de textura de 8 bits a valores lineales antes de interpolar esos valores), y no tiene ninguna penalización de rendimiento. [16]
La enmienda 1 a IEC 61966-2-1:1999, aprobada en 2003, incluye la definición de una representación de color Y′Cb′Cr′ llamada sYCC . Aunque los colores primarios RGB se basan en BT.709, las ecuaciones para la transformación de sRGB a sYCC y viceversa se basan en BT.601 . sYCC utiliza 8 bits para los componentes, lo que da como resultado un rango de aproximadamente 0–1 para Y; -0,5–0,5 para C. [17] La enmienda también contiene una codificación de 10 bits o más llamada bg-sRGB donde 0–1 se asigna a -384 ⁄ 510 ... 639 ⁄ 510 , y bg-sYCC utiliza el mismo número de bits para un rango de aproximadamente -0,75–1,25 para Y; -1–1 para C. [17]
Como esta conversión puede dar como resultado valores sRGB fuera del rango 0–1, la enmienda describe cómo aplicar la corrección gamma a valores negativos, aplicando − f (− x ) cuando x es negativo (y f es la función sRGB↔lineal descrita anteriormente). Esto también lo utiliza scRGB .
La enmienda también recomienda una matriz XYZ a sRGB de mayor precisión que utilice siete puntos decimales, para invertir con mayor precisión la matriz sRGB a XYZ (que permanece con la precisión que se muestra arriba):