

YCbCr , Y′CbCr , también escrito como YC B C R o Y′C B C R , es una familia de espacios de color que se utiliza como parte del flujo de procesamiento de imágenes en color en sistemas de vídeo y fotografía digital . Al igual que YP B P R , se basa en los colores primarios RGB ; ambos son generalmente equivalentes, pero YC B C R está destinado al vídeo digital, mientras que YP B P R está diseñado para su uso en sistemas analógicos . [ 1 ]
Y′ es el componente de luminancia , y C B y C R son los componentes de croma de diferencia azul y diferencia roja . La luminancia Y′ (con prima ) se distingue de la luminancia Y, lo que significa que la intensidad de la luz se codifica de forma no lineal en función de los colores primarios RGB corregidos gamma .
Los espacios de color Y′CbCr se definen mediante una transformación de coordenadas matemáticas a partir de los colores primarios RGB asociados y el punto blanco . Si el espacio de color RGB subyacente es absoluto, el espacio de color Y′CbCr también lo es ; por el contrario, si el espacio RGB está mal definido, Y′CbCr también lo está. La transformación se define en las ecuaciones 32 y 33 de la norma ITU-T H.273. [ 2 ]
Razón fundamental
La televisión en blanco y negro se utilizaba ampliamente antes de la llegada de la televisión en color. Debido a la cantidad de televisores y cámaras existentes, se buscaba algún tipo de retrocompatibilidad para las nuevas transmisiones en color. El ingeniero francés Georges Valensi desarrolló y patentó un sistema para transmitir color RGB como señales de luminancia y crominancia en 1938. Esto permitiría a los televisores en blanco y negro existentes procesar solo la información de luminancia e ignorar la crominancia, empaquetando esencialmente un video en blanco y negro dentro del video en color. Debido a esta retrocompatibilidad, el sistema basado en la idea de Valensi se denominó color compatible . De la misma manera, una transmisión en blanco y negro podía ser recibida por un televisor en color sin ningún circuito de procesamiento adicional. Para preservar las asignaciones de frecuencia de transmisión existentes, a la nueva información de crominancia se le asignó un ancho de banda menor que a la información de luminancia. Esto es posible porque los humanos son más sensibles a la información en blanco y negro (ver ejemplo de imagen a la derecha). Esto se denomina submuestreo de crominancia .
YCbCr y Y′CbCr son una aproximación práctica al procesamiento del color y la uniformidad perceptiva, donde los colores primarios, que corresponden aproximadamente al rojo, verde y azul, se procesan para obtener información perceptualmente significativa. De esta manera, el procesamiento, la transmisión y el almacenamiento posteriores de imágenes/vídeos pueden realizar operaciones e introducir errores de forma perceptualmente significativa. Y′CbCr se utiliza para separar una señal de luminancia (Y′) que puede almacenarse con alta resolución o transmitirse con un ancho de banda elevado, y dos componentes de croma (C B y C R ) que pueden reducirse en ancho de banda, submuestrearse, comprimirse o tratarse por separado para mejorar la eficiencia del sistema.
Conversiones
YCbCr a veces se abrevia como YCC . Por lo general, los términos Y′CbCr, YCbCr, YPbPr y Y′UV se usan 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 da lugar a diferentes valores de escala para U max y V max (en YCbCr ambos son) al convertir a/desde YUV. Y′CbCr y YCbCr difieren debido a que los valores están corregidos con gamma o no.
Las ecuaciones que aparecen a continuación ofrecen una mejor comprensión de los principios comunes y las diferencias generales entre estos formatos.
conversión RGB
R'G'B' a Y′PbPr

Las señales Y′CbCr (antes del escalado y los desplazamientos para convertirlas a formato digital) se denominan YPbPr y se crean a partir de la fuente RGB (rojo, verde y azul) ajustada gamma correspondiente utilizando tres constantes definidas K R , K G , K B de la siguiente manera:
donde K R , K G y K B se derivan normalmente de la definición del espacio RGB correspondiente y se requiere que se satisfaga.
La manipulación de matrices equivalente se suele denominar "matriz de color":
Aquí, los símbolos de prima (′) indican 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 luminancia (Y) resultante tendrá entonces un rango nominal de 0 a 1, y los valores de croma (P B y P R ) tendrán un rango nominal de -0,5 a +0,5.
El proceso de conversión inversa se puede obtener invirtiendo las ecuaciones anteriores.
Y′PbPr a Y′CbCr
Al representar las señales en formato digital, los resultados se escalan y redondean, y normalmente se añaden compensaciones. Por ejemplo, el escalado y la compensación aplicados al componente Y′ según la especificación (p. ej., MPEG-2 [ 3 ] ) dan como resultado un valor de 16 para el negro y un valor de 235 para el 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 volver a escalar por la fracción (235-16)/(240-16) = 219/224 cuando se realiza la matriz de color o el 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 cierto "sobreimpulso" y "subimpulso" durante el procesamiento sin necesidad de recorte indeseado . Este " margen de seguridad " y "margen de tolerancia" (o "margen de tolerancia") [ 4 ] también se puede utilizar para extender la gama de colores nominal según lo especificado por xvYCC .
El valor 235 admite un sobreimpulso máximo de (255 - 235) / (235 - 16) = 9,1 %, que es ligeramente mayor que el sobreimpulso máximo teórico ( fenómeno de Gibbs ) de aproximadamente el 8,9 % del paso máximo (de negro a blanco). El margen es menor, permitiendo solo 16 / 219 = 7,3 % de sobreimpulso —en este caso en dirección opuesta—, que es menor que el sobreimpulso máximo teórico del 8,9 %. Además, dado que los valores 0 y 255 están reservados en HDMI, el margen es en realidad ligeramente menor.
Y′CbCr a xvYCC
Dado que las ecuaciones que definen Y′CbCr se forman rotando todo el cubo de color RGB nominal y escalándolo para que se ajuste a un cubo de color YCbCr (más grande), existen algunos puntos dentro del cubo de color Y′CbCr que no pueden representarse en el dominio RGB correspondiente (al menos no dentro del rango RGB nominal). Esto dificulta la interpretación y visualización correctas de algunas señales Y′CbCr. Estos valores Y′CbCr fuera de rango son utilizados por xvYCC para codificar colores que se encuentran fuera de la gama BT.709.
Conversión ITU-R BT.601
La forma de Y′CbCr que se definió para su uso en televisión de definición estándar en la norma ITU-R BT.601 (anteriormente CCIR 601 ) para su uso con vídeo digital por componentes se deriva del espacio RGB correspondiente (primarios del sistema M de la norma ITU-R BT.470-6) de la siguiente manera:
A partir de las constantes y fórmulas anteriores, se puede derivar lo siguiente para ITU-R BT.601.
La señal analógica YPbPr, derivada de la señal analógica R'G'B', se obtiene de la siguiente manera:
La señal digital Y′CbCr (8 bits por muestra) se deriva de la señal analógica R'G'B' de la siguiente manera:
o simplemente por componentes
Las señales resultantes tienen valores de Y′ (luminancia) que van de 16 a 235, y valores de Cb y Cr (crominancia) que van de 16 a 240. Los valores de 0 a 15 se denominan margen de paso , y los valores de 236 a 255 se denominan margen de cabeza . Los mismos rangos de cuantificación, diferentes para Y y Cb, Cr, también se aplican a BT.2020 y BT.709.
Alternativamente, el Y′CbCr digital se puede derivar del R'dG'dB'd digital (8 bits por muestra, cada uno utilizando el rango completo donde cero representa el negro y 255 representa el blanco) de acuerdo con las siguientes ecuaciones:
En la fórmula siguiente, los factores de escala se multiplican por. Esto permite el valor 256 en el denominador, que se puede calcular mediante un único desplazamiento de bits .
Si la fuente digital R'd G'd B'd incluye footroom y headroom, primero se debe restar el desplazamiento de footroom 16 de cada señal y un factor de escala dedebe incluirse en las ecuaciones.
La transformada inversa es:
La transformación inversa sin redondeos (utilizando valores que provienen 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 tubos de rayos catódicos (CRT) más antiguos.
Conversión ITU-R BT.709

En la norma ITU-R BT.709 se especifica una forma diferente de Y′CbCr , principalmente para su uso en HDTV . Esta forma más reciente 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 nuevos tubos de rayos catódicos (CRT) y otros equipos de visualización modernos. Las matrices de conversión para BT.709 son las siguientes:
Las definiciones de las señales R', G' y B' también difieren entre BT.709 y BT.601, 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, hay 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' a partir de R, G y B, y en el escalado y los desplazamientos que se deben aplicar durante la conversión de R'G'B' a Y′CbCr. Por lo tanto, la conversión adecuada de Y′CbCr de una forma a otra no es solo una cuestión de invertir una matriz y aplicar la otra. De hecho, cuando Y′CbCr se diseña idealmente, los valores de K B y K R se derivan de la especificación precisa de las señales primarias de color RGB, de modo que la señal de luminancia (Y′) se corresponda lo más fielmente posible con una medición de luminancia ajustada gamma (típicamente basada en las mediciones CIE 1931 de la respuesta del sistema visual humano a los estímulos de color). [ 5 ]
Conversión ITU-R BT.2020
El estándar ITU-R BT.2020 utiliza la misma función gamma que BT.709. Define: [ 6 ]
- Luminancia no constante Y′CbCr, similar a las entradas anteriores, excepto con diferentes K B y K R .
- Luminancia constante Y′cCbcCrc, una formulación donde Y′ es la versión del códec gamma de la luminancia real . [ 6 ]
Para ambos casos, los coeficientes derivados de los primarios son:
Para NCL, la definición es clásica:;;La conversión de codificación se puede escribir, como de costumbre, como una matriz. [ 6 ] La matriz de decodificación para BT.2020-NCL es la siguiente con 14 decimales:
Los valores más pequeños de la matriz no están redondeados; son valores exactos. Para sistemas con precisión limitada (8 o 10 bits, por ejemplo), se podría utilizar una precisión menor de la matriz anterior, por ejemplo, conservando solo 6 dígitos después del punto decimal. [ 7 ]
La versión CL, YcCbcCrc, codifica: [ 6 ]
- Esta es la función gamma aplicada a la luminancia real calculada a partir del RGB lineal.
- side lo contrario.yson el mínimo y el máximo teóricos decorrespondientes a la gama. Los valores "prácticos" redondeados son,La derivación completa se puede encontrar en la recomendación. [ 6 ]
- side lo contrario. De nuevo,yson límites teóricos. Los valores redondeados son,.
La función CL se puede utilizar cuando la preservación de la luminancia es de suma importancia (véase: Submuestreo de croma § Error de luminancia gamma ), o cuando "se espera una mayor eficiencia de codificación para la entrega". La especificación hace referencia al Informe ITU-R BT.2246 sobre este tema. [ 6 ] BT.2246 afirma que CL ha mejorado la eficiencia de compresión y la preservación de la luminancia, pero NCL será más familiar para un personal que haya manejado previamente la mezcla de color y otras prácticas de producción en HDTV YCbCr. [ 8 ]
BT.2020 no define PQ y, por lo tanto, HDR; se define con mayor 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 de "luminancia casi constante". [ 9 ]
conversión JPEG
El uso de JPEG por parte de JFIF admite una versión modificada de Rec. 601 Y′CbCr, donde Y′, C B y C R tienen el rango completo de 8 bits de [0...255]. [ 10 ] 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. [ 11 ] ) Tenga en cuenta que, para la siguiente fórmula, el rango de cada entrada (R, G, B) también es el rango completo de 8 bits de [0...255].
Y de vuelta:
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 la entrada CMYK . En este formato, el valor "K" se pasa tal cual, mientras que los valores CMY se utilizan para derivar YCbCr con la matriz anterior asumiendo,, y. Como resultado, se puede utilizar un conjunto similar de técnicas de submuestreo. [ 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 los primarios y el punto blanco, de modo que situaciones como los primarios predeterminados sRGB/BT.709 de JPEG que usan la matriz BT.601 (que se deriva del Sistema M BT.470-6 que incluso usa un punto blanco diferente de D65) no ocurren (los primarios de la mayoría de las imágenes son BT.709 ). Otro ejemplo fueron los primarios P3-D65 usados por Netflix en producción con la matriz BT.2020-NCL, lo que significa que la matriz no se derivó de los primarios, aunque hoy en día Netflix permite primarios BT.2020 (después de 2021). [ 13 ] Sin embargo, los usuarios generales de Netflix nunca obtuvieron ese formato intermedio.
Aproximaciones numéricas
Antes del desarrollo de los procesadores SIMD de punto flotante de alta velocidad , la mayoría de las implementaciones digitales de RGB → Y′UV utilizaban aritmética entera, en particular aproximaciones de punto fijo . La aproximación implica que la precisión de los números utilizados (datos de entrada, datos de salida y valores constantes) es limitada, por lo que se acepta una pérdida de precisión, generalmente del último dígito binario, a cambio de una mayor velocidad de cálculo.
Los valores Y′ se desplazan y escalan convencionalmente al rango [16, 235] (conocido como rango de estudio o "niveles de TV") en lugar de utilizar el rango completo de [0, 255] (conocido como rango completo o "niveles de PC"). Esta práctica se estandarizó en SMPTE-125M para compensar las sobreoscilaciones de la señal ("oscilaciones") debidas al filtrado. [ 14 ] Los valores U y V, que pueden ser positivos o negativos, se suman a 128 para que siempre sean positivos, lo que da un rango de estudio de 16 a 240 para U y V. (Estos rangos son importantes en la edición y producción de vídeo, ya que usar un rango incorrecto dará como resultado una imagen con negros y blancos "recortados" o una imagen de bajo contraste).
Matrices aproximadas de 8 bits para BT.601
Estas matrices redondean todos los factores a la unidad de 1/256 más cercana. Como resultado, se forma un único valor intermedio de 16 bits para cada componente, y un simple desplazamiento a la derecha con redondeo (x + 128) >> 8puede solucionar la división. [ 14 ]
Para el swing de estudio:
Para un swing completo:
Skia de Google solía usar la matriz de rango completo de 8 bits mencionada anteriormente, lo que provocaba un ligero efecto de verdor en las imágenes JPEG codificadas por dispositivos Android, más perceptible al guardarlas repetidamente. El problema se solucionó en 2016, cuando se empezó a usar la versión más precisa. Gracias a las optimizaciones SIMD en libjpeg-turbo , la versión precisa es en realidad más rápida. [ 15 ]
Formatos de píxeles empaquetados y conversión
Los datos RGB se codifican normalmente a 8, 12, 16 o 24 bits por píxel. En los ejemplos siguientes, se asume RGB de 24 bits; este formato se suele denominar RGB888 . En el orden de bytes estándar, los datos se almacenan como .r0, g0, b0, r1, g1, b1, ...
Los formatos de píxeles empaquetados YCbCr se conocen comúnmente como " Y'UV ". Estos archivos pueden codificarse en 12, 16 o 24 bits por píxel. Según el submuestreo, los formatos se pueden describir como 4:2:0p, 4:2:2 y 4:4:4. El apóstrofo después de la Y suele omitirse, al igual que la "p" (de planar) después de YUV420p. En cuanto a los formatos de archivo reales, 4:2:0 es el más común, ya que los datos están más reducidos y la extensión del archivo suele ser .YUV. La relación entre la tasa de datos y el muestreo (A:B:C) se define por la relación entre los canales Y, U y V. [ 16 ] [ 17 ] La notación "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 "YUV565"). La forma inequívoca de referirse a estos formatos es mediante el código FourCC . [ 18 ]
Para convertir de RGB a YUV o viceversa, lo más sencillo es usar RGB888 y 4:4:4. Para 4:1:1, 4:2:2 y 4:2:0, primero hay que convertir los bytes a 4:4:4.
4:4:4
YUV444 es sencillo, 3 bytes por píxel (12 bytes por 4 píxeles), sin agrupamiento de píxeles. La diferencia radica únicamente en la cantidad de bits asignados a cada canal y su disposición. El YUV3esquema básico ordena los píxeles como y0, u0, v0, y1, u1, v1(usando "u" para Cb y "v" para Cr; lo mismo se aplica al contenido a continuación). [ 18 ] En computadoras, es más común ver un AYUVformato, que agrega un canal alfa y va a0, y0, u0, v0, a1, y1, u1, v1, porque los grupos de 32 bits son más fáciles de manejar. [ 16 ]
4:2:2

YUV422 agrupa 2 píxeles horizontalmente en cada "contenedor" conceptual, utilizando 4 bytes por cada 2 píxeles (8 bytes por cada 4 píxeles). Dos disposiciones principales son: [ 17 ]
- YUY2: también llamado YUYV, se ejecuta en el formato
y0, u, y1, v. - UYVY: la versión inversa de YUY2 con intercambio de bytes, se ejecuta en el formato
u, y0, v, y1.
4:1:1
YUV411 se usa raramente y coloca los píxeles en grupos horizontales de 4 (6 bytes por cada 4 píxeles). [ 17 ]
4:2:0
YUV420 (o Y′UV420p ) es muy común. Sus formatos principales son IMC2, IMC4, YV12 y NV12. [ 17 ] Estos cuatro formatos son "planares", lo que significa que los valores Y, U y V se agrupan en lugar de intercalarse. Todos ocupan 12 bits por píxel (6 bytes por cada 4 píxeles), suponiendo un canal de 8 bits.
- IMC2 primero coloca las imágenes completas en Y. Luego organiza cada línea de croma en el orden V 0 ... V n , U 0 ... U n , donde n es el número de muestras de croma por línea, igual a la mitad del ancho de Y.
- IMC4 es similar a IMC2, excepto que se ejecuta en U 0 ... U n , V 0 ... V n .
- El diseño I420 es más sencillo y se utiliza con mayor frecuencia. Se escribe la imagen completa en Y, seguida de la imagen en U y, finalmente, la imagen completa en V.

Diseño I420 - YV12 sigue el mismo diseño general que I420, solo que el orden entre las imágenes U y V está invertido. [ 19 ]
- NV12 es posiblemente el formato de 8 bits 4:2:0 más utilizado. Es el predeterminado para la vista previa de la cámara de Android . [ 20 ] La imagen completa en Y se escribe, seguida de líneas intercaladas que van U 0 , V 0 , U 1 , V 1 , etc.
También existen variantes "en mosaico" de formatos planares. [ 21 ]
Referencias
- ↑ "Espacios de color YUV, YCbCr, YPbPr" . DiscoveryBiz.Net . 2024. Consultado el 16 de abril de 2021 .
- ↑ "H.273: Puntos de código independientes de la codificación para la identificación del tipo de señal de vídeo" . www.itu.int . Consultado el 6 de enero de 2025 .
- ↑ p. ej. la especificación MPEG-2 , ITU-T H.262 2000 E pág. 44
- ↑ "MFNominalRange (mfobjects.h) - Aplicaciones Win32" . docs.microsoft.com . Consultado el 10 de noviembre de 2020 .
- ↑ Charles Poynton, Vídeo digital y HDTV , Capítulo 24, págs. 291–292, Morgan Kaufmann , 2003.
- 1 2 3 4 5 6 "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. Recuperado el 8 de septiembre de 2014 .
- ↑ "ITU-T H Suppl. 18" . Octubre de 2017. hdl : 11.1002/1000/13441 .
- ↑ «BT.2246-8 (03/2023) El estado actual de la televisión de ultra alta definición» . UIT .
- ↑ "Submuestreo en ICtCp vs YCbCr" (PDF) . Dolby Laboratories, Inc. Archivado del original (PDF) el 13 de octubre de 2018.
- ↑ Formato de intercambio de archivos JPEG Versión 1.02
- ↑ T.871: Tecnología de la información – Compresión y codificación digital de imágenes fijas de tono continuo: formato de intercambio de archivos JPEG (JFIF) . UIT-T . 11 de septiembre de 2012. Consultado el 25 de julio de 2016 .
- ↑ Consulte la documentación de libjpeg-turbo para: CS_YCCK 'YCCK (también conocido como "YCbCrK") no es un espacio de color absoluto, sino una transformación matemática de CMYK diseñada únicamente para almacenamiento y transmisión', cmyk_ycck_convert()
- ↑ "Especificación completa de entrega sin marca v9.2" . Netflix | Centro de ayuda para socios . Consultado el 24 de septiembre de 2022 .
- 1 2 Jack, Keith (1993). Video Demystified . HighText Publications. pág. 30. ISBN 1-878707-09-4.
- ↑ "Usar libjpeg-turbo para la conversión YUV->RGB en el codificador jpeg · google/skia@c7d01d3" . GitHub .
- 1 2 msdn.microsoft.com, Subtipos de vídeo YUV
- 1 2 3 4 msdn.microsoft.com, Formatos YUV de 8 bits recomendados para renderizado de vídeo
- 1 2 "2.7.1.1. Formatos YUV empaquetados — La documentación del kernel de Linux" . docs.kernel.org .
- ↑ "VideoLAN Wiki: YUV" . wiki.videolan.org .
- ^ fourcc.com Formas de píxeles YUV
- ↑ "2.7.1.2. Formatos YUV planares — La documentación del kernel de Linux" . docs.kernel.org .
Enlaces externos
- Calculadora Y′CbCr , incluyendo BT.1886
- Charles Poynton — Preguntas frecuentes sobre el color
- Charles Poynton — Ingeniería de vídeo
- Visualización del espacio de color archivada el 7 de diciembre de 2008 en Wayback Machine.
- Espacios de color YUV, YCbCr, YPbPr.
- Definición de YCbCr
Recursos de software para píxeles empaquetados:
- Kohn, Mike. Conversión de Y′UV422 a RGB mediante SSE/Ensamblador.
- libyuv
- pixfc-sse – Biblioteca C para conversiones de formato de color optimizadas para SSE
- Archivos YUV : archivos de vídeo YUV/RGB de muestra/demostración en muchos formatos YUV, que le ayudarán en las pruebas.
- Espacio de color