stringtranslate.com

YCbCr

Una visualización del espacio de color YCbCr.
El plano CbCr a luma constante Y′=0,5
Una imagen en color y sus componentes Y′, C B y C R. La imagen Y′ es esencialmente una copia en escala de grises de la imagen principal.

YCbCr , Y′CbCr , o Y Pb/Cb Pr/Cr , también escrito como YC B C R o Y′C B C R , es una familia de espacios de color utilizados como parte de la canalización de imágenes en color en vídeo y fotografía digital. sistemas. Y′ es el componente de luma y C B y C R son los componentes de croma de diferencia de azul y diferencia de rojo . Y′ (con prima ) se distingue de Y, que es luminancia , lo que significa que la intensidad de la luz se codifica de forma no lineal en función de los primarios RGB con corrección gamma .

Los espacios de color Y′CbCr se definen mediante una transformación de coordenadas matemáticas a partir de un punto blanco y primarios RGB asociados . Si el espacio de color RGB subyacente es absoluto, el espacio de color Y′CbCr también es un espacio de color absoluto ; por el contrario, si el espacio RGB está mal definido, también lo está Y′CbCr. La transformación se define en las ecuaciones 32, 33 de UIT-T H.273. Sin embargo, esa regla no se aplica a las primarias P3-D65 utilizadas por Netflix con la matriz BT.2020-NCL, lo que significa que la matriz no se derivó de las primarias, pero ahora Netflix permite las primarias BT.2020 (desde 2021). [1] Lo mismo sucede con JPEG: tiene una matriz BT.601 derivada de las primarias del System M, pero las primarias de la mayoría de las imágenes son BT.709.

Razón fundamental

Las pantallas de tubos de rayos catódicos funcionan con señales de voltaje rojas, verdes y azules, pero estas señales RGB no son eficientes como representación para el almacenamiento y la transmisión, ya que tienen mucha redundancia .

YCbCr e Y′CbCr son una aproximación práctica al procesamiento del color y la uniformidad perceptiva, donde los colores primarios correspondientes aproximadamente al rojo, verde y azul se procesan en información perceptualmente significativa. Al hacer esto, el posterior procesamiento, transmisión y almacenamiento de imágenes/videos pueden realizar operaciones e introducir errores de maneras perceptualmente significativas. Y′CbCr se utiliza para separar una señal luma (Y′) que puede almacenarse con alta resolución o transmitirse con un gran ancho de banda, y dos componentes cromáticos (C B y C R ) que pueden reducirse en ancho de banda, submuestrearse, comprimirse, o tratados por separado para mejorar la eficiencia del sistema.

Un ejemplo práctico sería disminuir el ancho de banda o la resolución asignada a "color" en comparación con "blanco y negro", ya que los humanos son más sensibles a la información en blanco y negro (ver ejemplo de imagen a la derecha). Esto se llama submuestreo de croma .

CbCr

YCbCr a veces se abrevia como YCC . Normalmente, los términos Y′CbCr, YCbCr, YPbPr y YUV se utilizan indistintamente, lo que genera cierta confusión. La principal diferencia es que YPbPr se usa con imágenes analógicas y YCbCr con imágenes digitales, lo que genera diferentes valores de escala para U max y V max (en YCbCr ambos son ) al convertir hacia/desde YUV. Y′CbCr e YCbCr difieren debido a que los valores están corregidos con gamma o no.

Las ecuaciones siguientes dan una mejor idea de los principios comunes y las diferencias generales entre estos formatos.

Conversión RGB

R'G'B' a Y′PbPr

Conversión de RGB a YCbCr

Las señales Y′CbCr (antes del escalado y las compensaciones para colocar las señales en forma digital) se denominan YPbPr y se crean a partir de la fuente RGB (rojo, verde y azul) ajustada con gamma correspondiente utilizando tres constantes definidas K R , K G , y K B de la siguiente manera:

donde K R , KG y KB normalmente se derivan de la definición del espacio RGB correspondiente y se requieren para satisfacer .

La manipulación de matrices equivalente a menudo se denomina "matriz de color":

Y su inversa:

Aquí, los símbolos primos (′) significan que se está utilizando la corrección gamma ; por lo tanto, R′, G′ y B′ varían nominalmente de 0 a 1, donde 0 representa la intensidad mínima (por ejemplo, para la visualización del color negro ) y 1 la máxima (por ejemplo, para la visualización del color blanco ). El valor de luma (Y) resultante tendrá entonces un rango nominal de 0 a 1, y los valores de croma (P B y PR ) tendrán un rango nominal de -0,5 a +0,5. El proceso de conversión inversa se puede derivar fácilmente invirtiendo las ecuaciones anteriores.

Y′PbPr a Y′CbCr

Cuando se representan las señales en forma digital, los resultados se escalan y se redondean, y normalmente se agregan compensaciones. Por ejemplo, la escala y el desplazamiento aplicados al componente Y′ según la especificación (por ejemplo, MPEG-2 [2] ) dan como resultado el valor de 16 para negro y el valor de 235 para blanco cuando se utiliza una representación de 8 bits. El estándar tiene versiones digitalizadas de 8 bits de C B y C R escaladas a un rango diferente de 16 a 240. En consecuencia, a veces es necesario reescalar por la fracción (235-16)/(240-16) = 219/224 al hacer matriz de color o procesamiento en el espacio YCbCr, lo que produce distorsiones de cuantificación cuando el procesamiento posterior no se realiza utilizando profundidades de bits más altas.

El escalado que da como resultado el uso de un rango de valores digitales más pequeño de lo que podría parecer deseable para la representación del rango nominal de los datos de entrada permite algunos "sobrepasos" y "bajos alcances" durante el procesamiento sin necesidad de recortes indeseables . Este " espacio para la cabeza " y el "espacio para los pies" [3] también se pueden utilizar para ampliar la gama de colores nominal , según lo especificado por xvYCC .

El valor 235 se adapta a un sobrepaso máximo de (255 - 235) / (235 - 16) = 9,1%, que es ligeramente mayor que el sobrepaso máximo teórico ( fenómeno de Gibbs ) de aproximadamente el 8,9% del máximo (blanco y negro). ) paso. El espacio para los pies es más pequeño, lo que permite solo un sobrepaso de 16/219 = 7,3%, que es menor que el sobrepaso máximo teórico del 8,9%. Además, debido a que los valores 0 y 255 están reservados en HDMI, el espacio es un poco menor.

Y′CbCr en xvYCC

Dado que las ecuaciones que definen Y′CbCr se forman de una manera que gira todo el cubo de color RGB nominal y lo escala para que quepa dentro de un cubo de color YCbCr (más grande), hay algunos puntos dentro del cubo de color Y′CbCr que no se pueden representar en el dominio RGB correspondiente (al menos no dentro del rango RGB nominal). Esto causa cierta dificultad para determinar cómo interpretar y mostrar correctamente algunas señales Y′CbCr. xvYCC utiliza estos valores de Y′CbCr fuera de rango para codificar colores fuera de la gama BT.709.

Conversión UIT-R BT.601

La forma de Y′CbCr que se definió para el uso de televisión de definición estándar en el estándar ITU-R BT.601 (anteriormente CCIR 601 ) para su uso con vídeo por componentes digitales se deriva del espacio RGB correspondiente (ITU-R BT.470- 6 primarias del Sistema M) de la siguiente manera:

A partir de las constantes y fórmulas anteriores, se puede derivar lo siguiente para ITU-R BT.601.

El YPbPr analógico del R'G'B' analógico se deriva de la siguiente manera:

El Y′CbCr digital (8 bits por muestra) se deriva del R'G'B' analógico de la siguiente manera:

o simplemente por componentes

Las señales resultantes oscilan entre 16 y 235 para Y' (Cb y Cr oscilan entre 16 y 240); los valores de 0 a 15 se denominan espacio para los pies , mientras que los valores de 236 a 255 se denominan espacio para la cabeza .

Alternativamente, el Y′CbCr digital se puede derivar del R'dG'dB'd digital (8 bits por muestra, cada uno usando el rango completo donde cero representa el negro y 255 representa el blanco) de acuerdo con las siguientes ecuaciones:

En la siguiente fórmula, los factores de escala se multiplican por . Esto permite el valor 256 en el denominador, que se puede calcular mediante un solo desplazamiento de bits .

Si la fuente digital R'd G'd B'd incluye espacio para los pies y espacio para la cabeza, primero se debe restar el desplazamiento 16 del espacio para los pies de cada señal y se debe incluir un factor de escala en las ecuaciones.

La transformada inversa es:

La transformada inversa sin redondeos (usando valores provenientes directamente de la recomendación ITU-R BT.601) es:

Esta forma de Y′CbCr se utiliza principalmente para sistemas de televisión de definición estándar más antiguos , ya que utiliza un modelo RGB que se ajusta a las características de emisión de fósforo de los CRT más antiguos .

Conversión UIT-R BT.709

Rec. 709 en comparación con la Rec. 2020

En el estándar ITU-R BT.709 se especifica una forma diferente de Y′CbCr , principalmente para uso en HDTV . La forma más nueva también se utiliza en algunas aplicaciones orientadas a pantallas de ordenador, como sRGB (aunque la matriz utilizada para la forma sRGB de YCbCr, sYCC , sigue siendo BT.601). En este caso, los valores de Kb y Kr difieren, pero las fórmulas para utilizarlos son las mismas. Para ITU-R BT.709, las constantes son:

Esta forma de Y′CbCr se basa en un modelo RGB que se ajusta mejor a las características de emisión de fósforo de los CRT más nuevos y otros equipos de visualización modernos. [ cita necesaria ] Las matrices de conversión para BT.709 son estas:

Las definiciones de las señales R', G' y B' también difieren entre BT.709 y BT.601, y difieren dentro de BT.601 dependiendo del tipo de sistema de TV en uso (625 líneas como en PAL y SECAM o 525 líneas como en NTSC ), y difieren aún más en otras especificaciones. En diferentes diseños existen diferencias en las definiciones de las coordenadas de cromaticidad R, G y B, el punto blanco de referencia, el rango de gama admitido, las funciones exactas de precompensación gamma para derivar R', G' y B' de R, G, y B, y en la escala y compensaciones que se aplicarán durante la conversión de R'G'B' a Y′CbCr. Entonces, la conversión adecuada de Y′CbCr de una forma a otra no es solo cuestión de invertir una matriz y aplicar la otra. De hecho, cuando Y′CbCr se diseña idealmente, los valores de KB y K R se derivan de la especificación precisa de las señales primarias de color RGB, de modo que la señal luma (Y′) corresponda lo más cerca posible a una señal gamma- Medición ajustada de luminancia (normalmente basada en las mediciones CIE 1931 de la respuesta del sistema visual humano a los estímulos de color). [4]

Conversión UIT-R BT.2020

El estándar ITU-R BT.2020 utiliza la misma función gamma que BT.709. Define: [5]

Para ambos, los coeficientes derivados de las primarias son:

Para NCL, la definición es clásica: Y' = 0,2627R' + 0,6780 G' + 0,0593 B'; Cb = (B'-Y')/1,8814; Cr = (R' - Y') / 1,4746. La conversión de codificación se puede escribir, como es habitual, como una matriz. [5] La matriz de decodificación para BT.2020-NCL es esta con 14 decimales:

Los valores más pequeños de la matriz no se redondean; son valores precisos. Para sistemas con precisión limitada (8 o 10 bits, por ejemplo), se podría utilizar una precisión más baja de la matriz anterior, conservando solo 6 dígitos después del punto decimal. [6]

La versión CL, YcCbcCrc, codifica: [5]

La función CL se puede utilizar cuando la preservación de la luminancia es de primordial importancia (ver: Submuestreo de croma § Error de luminancia gamma ), o cuando "existe la expectativa de una mejor eficiencia de codificación para la entrega". La especificación hace referencia al Informe UIT-R BT.2246 sobre este asunto. [5] BT.2246 establece que CL ha mejorado la eficiencia de compresión y la preservación de la luminancia, pero NCL resultará más familiar para el personal que anteriormente haya manejado la mezcla de colores y otras prácticas de producción en HDTV YCbCr. [7]

BT.2020 no define PQ y, por lo tanto, HDR; se define con más detalle en SMPTE ST 2084 y BT.2100 . BT.2100 introducirá el uso de IC T C P , un espacio de color semiperceptual derivado de RGB lineal con buena linealidad de tono. Es una "luminancia casi constante". [8]

Conversión SMPTE 240M

El estándar SMPTE 240M (utilizado en el sistema de televisión analógico HD MUSE ) define YCC con estos coeficientes:

Los coeficientes se derivan de los primarios SMPTE 170M y del punto blanco, tal como se utiliza en el estándar 240M.

Conversión JPEG

El uso JFIF de JPEG admite una Rec. modificada. 601 Y′CbCr donde Y′, C B y C R tienen el rango completo de 8 bits de [0...255]. [9] A continuación se muestran las ecuaciones de conversión expresadas con seis dígitos decimales de precisión. (Para ecuaciones ideales, consulte ITU-T T.871. [10] ) Tenga en cuenta que para las siguientes fórmulas, el rango de cada entrada (R,G,B) es también el rango completo de 8 bits de [0... 255].

Y de regreso:

La conversión anterior es idéntica a sYCC cuando la entrada se proporciona como sRGB, excepto que IEC 61966-2-1:1999/Amd1:2003 solo proporciona cuatro dígitos decimales.

JPEG también define un formato "YCCK" de Adobe para entrada CMYK . En este formato, el valor "K" se pasa tal cual, mientras que CMY se utiliza para derivar YCbCr con la matriz anterior asumiendo R=1-C, G=1-M y B=1-Y. Como resultado, se puede utilizar un conjunto similar de técnicas de submuestreo. [11]

Coeficientes para BT.470-6 Sistema B, G primarios

Estos coeficientes no se utilizan y nunca se utilizaron. [12]

Sistemas de luminancia derivados de la cromaticidad.

H.273 también describe sistemas de luminancia constante y no constante que se derivan estrictamente de primarios y punto blanco, de modo que situaciones como sRGB/BT.709 primarios predeterminados de JPEG que usan matriz BT.601 (que se deriva de BT.470- 6 Sistema M) no sucede.

Aproximaciones numéricas

Antes del desarrollo de procesadores rápidos de punto flotante SIMD , la mayoría de las implementaciones digitales de RGB → Y′UV utilizaban matemáticas enteras, en particular aproximaciones de punto fijo . La aproximación significa que la precisión de los números utilizados (datos de entrada, datos de salida y valores constantes) es limitada y, por lo tanto, quienquiera que haga uso de esa opción acepta una pérdida de precisión de aproximadamente el último dígito binario, generalmente en una compensación para velocidades de cálculo mejoradas.

Los valores de Y′ se desplazan y escalan convencionalmente al rango [16, 235] (denominado swing de estudio o "niveles de TV") en lugar de utilizar el rango completo de [0, 255] (denominado swing completo o "niveles de PC"). "). Esta práctica se estandarizó en SMPTE-125M para dar cabida a los excesos de señal ("timbre") debido al filtrado. [13] Los valores U y V, que pueden ser positivos o negativos, se suman con 128 para que sean siempre positivos, dando un rango de estudio de 16 a 240 para U y V. (Estos rangos son importantes en la edición y producción de video, ya que usar el rango incorrecto dará como resultado una imagen con blancos y negros "recortados" o una imagen de bajo contraste).

Matrices aproximadas de 8 bits para BT.601

Estas matrices redondean todos los factores a la unidad 1/256 más cercana. Como resultado, sólo se forma un valor intermedio de 16 bits para cada componente, y un simple desplazamiento a la derecha con redondeo (x + 128) >> 8puede encargarse de la división. [13]

Para swing de estudio:

Para pleno apogeo:

Skia de Google solía utilizar la matriz de rango completo de 8 bits anterior, lo que daba como resultado un ligero efecto verde en las imágenes JPEG codificadas por dispositivos Android, más notable al guardarlas repetidamente. El problema se solucionó en 2016, cuando se utilizó la versión más precisa. Debido a las optimizaciones SIMD en libjpeg-turbo , la versión precisa es en realidad más rápida. [14]

Formatos de píxeles empaquetados y conversión

Los archivos RGB suelen estar codificados en 8, 12, 16 o 24 bits por píxel. En estos ejemplos, asumiremos 24 bits por píxel, que se escribe como RGB888 . El formato de byte estándar es simplemente r0, g0, b0, r1, g1, b1, ....

Los formatos de píxeles empaquetados YCbCr a menudo se denominan "YUV". Estos archivos se pueden codificar en 12, 16 o 24 bits por píxel. Dependiendo del submuestreo, los formatos pueden describirse en gran medida como 4:4:4, 4:2:2 y 4:2:0p. El apóstrofe después de la Y a menudo se omite, al igual que la "p" (de plano) después de YUV420p. En términos de formatos de archivo reales, 4:2:0 es el más común, ya que los datos son más reducidos y la extensión del archivo suele ser ".YUV". La relación entre la velocidad de datos y el muestreo (A:B:C) se define por la relación entre los canales Y, U y V. [15] [16] La notación de "YUV" seguida de tres números es vaga: los tres números podrían referirse al submuestreo (como se hace en "YUV420"), o podrían referirse a la profundidad de bits en cada canal (como se hace en hecho en "YUV565"). La forma inequívoca de referirse a estos formatos es mediante el código FourCC . [17]

Para convertir de RGB a YUV o viceversa, lo más sencillo es utilizar RGB888 y 4:4:4. Para 4:1:1, 4:2:2 y 4:2:0, los bytes deben convertirse primero a 4:4:4.

4:4:4

4:4:4 es sencillo, ya que no se realiza ninguna agrupación de píxeles: la diferencia radica únicamente en cuántos bits tiene cada canal y su disposición. El YUV3esquema básico utiliza 3 bytes por píxel, con el orden y0, u0, v0, y1, u1, v1(usando "u" para Cb y "v" para Cr; lo mismo se aplica al contenido siguiente). [17] En las computadoras, es más común ver un AYUVformato que agrega un canal alfa y dice a0, y0, u0, v0, a1, y1, u1, v1, porque los grupos de 32 bits son más fáciles de manejar. [15]

4:2:2

4:2:2 agrupa 2 píxeles horizontalmente en cada "contenedor" conceptual. Dos disposiciones principales son: [16]

4:1:1

4:1:1 rara vez se utiliza. Los píxeles están en grupos horizontales de 4. [16]

4:2:0

4:2:0 se utiliza con mucha frecuencia. Los formatos principales son IMC2, IMC4, YV12 y NV12. [16] Todos estos cuatro formatos son "planos", lo que significa que los valores Y, U y V están agrupados en lugar de intercalados. Todos ellos ocupan 12 bits por píxel, suponiendo un canal de 8 bits.

También existen variantes "en mosaico" de formatos planos. [19]

Referencias

  1. ^ "Especificación de entrega completa sin marca v9.2". netflix | Centro de ayuda para socios . Consultado el 24 de septiembre de 2022 .
  2. ^ por ejemplo, la especificación MPEG-2 , ITU-T H.262 2000 E pág. 44
  3. ^ "MFNominalRange (mfobjects.h) - aplicaciones Win32". docs.microsoft.com . Consultado el 10 de noviembre de 2020 .
  4. ^ Charles Poynton, Vídeo digital y HDTV , Capítulo 24, págs. 291–292, Morgan Kaufmann , 2003.
  5. ^ abcdef "BT.2020: Valores de parámetros para sistemas de televisión de ultra alta definición para producción e intercambio internacional de programas". Unión Internacional de Telecomunicaciones . Junio ​​de 2014 . Consultado el 8 de septiembre de 2014 .
  6. ^ "UIT-T H Suplemento 18". Octubre de 2017. hdl : 11.1002/1000/13441 .
  7. ^ "BT.2246-8 (03/2023) El estado actual de la televisión de ultra alta definición". UIT .
  8. ^ "Submuestreo en ICtCp vs YCbCr" (PDF) . Dolby Laboratories, Inc. Archivado desde el original (PDF) el 13 de octubre de 2018.
  9. ^ Formato de intercambio de archivos JPEG versión 1.02
  10. ^ T.871: Tecnología de la información - Compresión y codificación digital de imágenes fijas de tonos continuos: formato de intercambio de archivos JPEG (JFIF). UIT-T . 11 de septiembre de 2012 . Consultado el 25 de julio de 2016 .
  11. ^ Consulte la documentación de libjpeg-turbo para: CS_YCCK 'YCCK (también conocido como "YCbCrK") no es un espacio de color absoluto sino más bien una transformación matemática de CMYK diseñada únicamente para almacenamiento y transmisión', cmyk_ycck_convert(); ver
  12. ^ "Suplemento 1 de EBU Tech 3237" (PDF) . pag. 18 . Consultado el 15 de abril de 2021 .
  13. ^ ab Jack, Keith (1993). Vídeo desmitificado . Publicaciones de alto texto. pag. 30.ISBN _ 1-878707-09-4.
  14. ^ "Utilice libjpeg-turbo para la conversión YUV->RGB en el codificador jpeg · google/skia@c7d01d3". GitHub .
  15. ^ ab msdn.microsoft.com, subtipos de vídeo YUV
  16. ^ abcd msdn.microsoft.com, formatos YUV de 8 bits recomendados para renderizado de vídeo
  17. ^ ab "2.7.1.1. Formatos YUV empaquetados: documentación del kernel de Linux". docs.kernel.org .
  18. ^ fourcc.com Formas de píxeles YUV
  19. ^ "2.7.1.2. Formatos planos YUV: documentación del kernel de Linux". docs.kernel.org .

enlaces externos

Recursos de software para píxeles empaquetados: