YUV

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Modelo de color matemático
Ejemplo de plano de color U-V, Y′ valor = 0.5, representado dentro de la gama de color RGB
Una imagen junto con su Y′, U y V componentes respectivamente

YUV es un modelo de color que normalmente se utiliza como parte de una canalización de imágenes en color. Codifica una imagen en color o un video teniendo en cuenta la percepción humana, lo que permite un ancho de banda reducido para los componentes de crominancia, en comparación con un "directo" Representación RGB. Históricamente, los términos YUV y Y′UV se usaban para una codificación analógica específica de información de color en los sistemas de televisión. Hoy en día, el término YUV se usa comúnmente en la industria informática para describir los espacios de color que se codifican con YCbCr.

El modelo YUV define un componente de luminancia (Y), que significa brillo de espacio lineal físico, y dos componentes de crominancia, llamados U (proyección azul) y V (proyección roja), respectivamente. Se puede usar para convertir hacia y desde el modelo RGB y con diferentes espacios de color.

El modelo Y′UV estrechamente relacionado utiliza el componente de luminancia (Y′): brillo perceptible no lineal, con los símbolos principales (') que indican la corrección gamma. Y′UV se utiliza en el estándar de TV en color analógico PAL (excepto PAL-N). Los sistemas en blanco y negro anteriores usaban solo información de luminancia (Y′). La información de color (U y V) se agregó por separado a través de una subportadora para que un receptor en blanco y negro aún pudiera recibir y mostrar una transmisión de imágenes en color en el formato nativo en blanco y negro del receptor, con sin necesidad de ancho de banda de transmisión adicional.

En cuanto a la etimología, Y, Y′, U y V no son abreviaturas. El uso de la letra Y para la luminancia se remonta a la elección de los primarios XYZ. Esto se presta naturalmente al uso de la misma letra en luma (Y′), que se aproxima a un correlato de luminancia perceptivamente uniforme. Asimismo, se eligieron U y V para diferenciar los ejes U y V de los de otros espacios, como el espacio de cromaticidad x e y. Vea las ecuaciones a continuación o compare el desarrollo histórico de las matemáticas.

Modelos de color relacionados

El alcance de los términos Y′UV, YUV, YCbCr, YPbPr, etc., a veces es ambiguo y se superpone.

Históricamente, YUV y Y′UV se usaban para referirse a los sistemas de televisión analógica. Sin embargo, a veces se aplica la misma designación a YCbCr, que se utiliza para la codificación digital de información de color adecuada para formatos de transmisión y compresión de video e imagen como MPEG y JPEG. Del mismo modo, el modelo de color YPbPr que se usa en el video componente analógico a veces se denomina Y′UV. En estos modelos de color, CB/PB y CR/PR son desviaciones de gris sobre azul. ejes amarillo y rojo-cian, mientras que en YUV U y V son diferencias de luminancia azul y luminancia roja respectivamente.

El modelo de color Y′IQ utilizado en el sistema de transmisión de televisión analógica NTSC también sigue, en términos generales, los mismos principios que YUV, aunque de una manera más compleja. El modelo de color YDbDr, utilizado en los sistemas de transmisión de televisión analógica SECAM y PAL-N, también está relacionado.

Historia

Y'UV se inventó cuando los ingenieros querían televisión en color en una infraestructura en blanco y negro. Necesitaban un método de transmisión de señal que fuera compatible con la televisión en blanco y negro (B&N) y al mismo tiempo poder agregar color. El componente luma ya existía como señal en blanco y negro; agregaron la señal UV a esto como una solución.

La representación UV de la crominancia se eligió sobre las señales R y B directas porque U y V son señales de diferencia de color. En otras palabras, las señales U y V le indican al televisor que cambie el color de un punto determinado sin alterar su brillo. O las señales U y V le dicen al monitor que haga que un color sea más brillante a costa del otro y cuánto debe cambiarse. Cuanto más altos (o más bajos cuando son negativos) los valores U y V, más saturado (colorido) se vuelve el punto. Cuanto más se acercan a cero los valores U y V, menos cambia el color, lo que significa que las luces roja, verde y azul serán más igualmente brillantes, produciendo un punto más gris. Este es el beneficio de usar señales de diferencia de color, es decir, en lugar de decir cuánto rojo hay en un color, dice cuánto es más rojo que verde o azul. A su vez, esto significaba que cuando las señales U y V fueran cero o estuvieran ausentes, solo mostraría una imagen en escala de grises. Si se hubieran utilizado R y B, estos tendrían valores distintos de cero incluso en una escena en blanco y negro, lo que requeriría las tres señales portadoras de datos. Esto fue importante en los primeros días de la televisión en color, porque las señales de televisión en blanco y negro antiguas no tenían señales U y V presentes, lo que significa que la televisión en color solo lo mostraría como televisión en blanco y negro lista para usar. Además, los receptores en blanco y negro podrían tomar la señal Y′ e ignorar las señales de color U y V, lo que hace que Y′UV sea compatible con todos los equipos, entradas y salidas en blanco y negro existentes. Si el estándar de televisión en color no hubiera usado señales de diferencia de color, podría significar que una televisión en color generaría colores divertidos a partir de una transmisión en blanco y negro o que necesitaría un circuito adicional para traducir la señal en blanco y negro a color. Fue necesario asignar un ancho de banda más estrecho al canal de crominancia porque no había ancho de banda adicional disponible. Si parte de la información de luminancia llegara a través del canal de crominancia (como sucedería si se usaran señales RB en lugar de señales UV diferenciales), la resolución en blanco y negro se habría visto comprometida.

Conversión a/desde RGB

SDTV con BT.470

Las señales Y′UV generalmente se crean a partir de una fuente RGB (rojo, verde y azul). Los valores ponderados de R, G y B se suman para producir Y′, una medida de brillo o luminancia general. U y V se calculan como diferencias escaladas entre Y′ y los valores B y R.

El estándar PAL (NTSC usó YIQ, que se gira más) define las siguientes constantes, derivadas de los primarios BT.470 System M y el punto blanco usando SMPTE RP 177 (las mismas constantes llamadas coeficientes de matriz se usaron más tarde en BT.601, aunque usa 1/2 en lugar de 0.436 y 0.615):

WR=0.299,WG=1− − WR− − WB=0,5987,WB=0.114,Umax=0.436,Vmax=0.615.{displaystyle {begin{aligned}W_{R} limit=0.299,\W_{G} limit=1-W_{R}-W_{B}=0.587,W_{B} limit=0.114,U_{max}} {=0.436,\\text{max}{max} {0.615}endend}

Las señales PAL en Y′UV se calculan a partir de R#39;'' (solo SECAM IV usó RGB lineal) de la siguiente manera:

Y.=WRR.+WGG.+WBB.=0.299R.+0,5987G.+0.114B.,U=UmaxB.− − Y.1− − WB.. 0.492()B.− − Y.),V=VmaxR.− − Y.1− − WR.. 0.877()R.− − Y.).{displaystyle {begin{aligned}Y' limit=W_{R}R'+W_{G}G'+W_{B}B'=0.299R'+0.587G'+0.114B',\U simultáneamente=U_{max}{frac}}{frac}}}{frac {B'-Y'}{1-W_{B}}approx 0.492(B'-Y'),\V paciente=V_{text{max}{frac {R'-Y'}{1-W_{R}}approx 0.877(R'-Y').end{aligned}}}}

Los rangos resultantes de Y′, U y V respectivamente son [0, 1], [−Umax, Umax], y [−Vmax, Vmax].

Al invertir la transformación anterior, se convierte Y′UV en RGB:

R.=Y.+V1− − WRVmax=Y.+V0.877=Y.+1.14V,G.=Y.− − UWB()1− − WB)UmaxWG− − VWR()1− − WR)VmaxWG=Y.− − 0,232U0,5987− − 0.341V0,5987=Y.− − 0,395U− − 0.581V,B.=Y.+U1− − WBUmax=Y.+U0.492=Y.+2.033U.{displaystyle {begin{aligned}R' limit=Y'+V{frac {1-W_{text{max}=Y'+{frac} {V}{0.877}=Y'+1.14V,G'ciendo=Y'-U{frac {W_{B} {f}}-V{frac} {W_{R} {W_{R} {V_{text{max}W_{G}\\\\\\\\\\\\\\\\cH00}\\\\\\\\cH009\cH009}\\\cH009\\\cH009cH009cH009cH009cH009cH009cH009cH009cH009cH009\cH009}\\\\\\\\cH009\\\\\\cH009cH009cH009cH009\cH009cH009\cH009\cH009\cH009\\cH009 {1-W_{U_=text{max}=Y'+{frac} {U}{0.492}=Y'+2.033U.end{aligned}}

De manera equivalente, sustituir valores por las constantes y expresarlos como matrices da estas fórmulas para BT.470 System M (PAL):

[Y.UV]=[0.2990,59870.114− − 0.14713− − 0,28860.4360.615− − 0.51499− − 0.10001][R.G.B.],[R.G.B.]=[101.139831− − 0.39465− − 0,5806012.032110][Y.UV].{fnMicrosoft Sans Serif}

Para valores pequeños de Y' es posible obtener valores de R, G o B que sean negativos, por lo que en la práctica sujetamos los resultados RGB al intervalo [0,1] o más correctamente dentro de Y'CbCr.

En BT.470 se cometió un error (porque se usó 0,115 en lugar de 0,114 para azul y el resultado fue 0,493 en lugar de 0,492). En la práctica eso no afectó a los decodificadores porque se utilizó la aproximación 1/2.03.

HDTV con BT.709

HDTV Rec. 709 (muy cerca de SDTV Rec. 601) en comparación con UHDTV Rec. 2020

Para HDTV, el ATSC decidió cambiar los valores básicos de WR y WB en comparación con los valores previamente seleccionados en el sistema SDTV. Para HDTV estos valores son proporcionados por Rec. 709. Esta decisión afectó aún más a la matriz para la conversión Y′UV↔RGB, por lo que los valores de sus miembros también son ligeramente diferentes. Como resultado, con SDTV y HDTV generalmente hay dos representaciones Y'UV distintas posibles para cualquier triple RGB: una SDTV-Y'UV y una HDTV-Y'UV. Esto significa en detalle que cuando se convierte directamente entre SDTV y HDTV, la información de luma (Y′) es aproximadamente la misma pero la representación de la información de canal de croma (U & V) necesita conversión. Todavía en cobertura del espacio de color CIE 1931, la Rec. El espacio de color 709 es casi idéntico al Rec. 601 y cubre el 35,9%. A diferencia de este UHDTV con Rec. 2020 cubre un área mucho más grande y, por lo tanto, se derivó su propia matriz para YCbCr (no YUV/Y′UV, desde el desmantelamiento de la televisión analógica).

BT.709 define estos valores de peso:

WR=0.2126,WG=1− − WR− − WB=0,75152,WB=0,0722{displaystyle {begin{aligned}W_{R} limit=0.2126,W_{G} limit=1-W_{R}-W_{B}=0.7152,\W_{B} limit=0.0722\end{aligned}}}}}}

El Umax{displaystyle U_{max} y Vmax{displaystyle V_{max} los valores son de arriba.

Las matrices de conversión para la forma analógica de BT.709 son estas, pero no hay evidencia de que alguna vez se hayan usado en la práctica (en su lugar, solo se usa la forma realmente descrita de BT.709, la forma YCbCr):

[Y.UV]=[0.21260,751520,0722− − 0,09991− − 0,36090.4360.615− − 0,5861− − 0,05639][R.G.B.][R.G.B.]=[101.280331− − 0.21482− − 0,805912.127980][Y.UV]{fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif}

Notas

  • Los pesos utilizados para calcular Y′ (la fila superior de la matriz) son idénticos a los utilizados en el espacio de color Y′IQ.
  • Valores iguales de rojo, verde y azul (es decir, niveles de gris) rendimiento 0 para U y V. Negro, RGB=(0, 0, 0), produce YUV=(0, 0, 0). Blanco, RGB=(1, 1, 1), produce YUV=(1, 0, 0).
  • Estas fórmulas se utilizan tradicionalmente en televisores y equipos analógicos; equipos digitales como HDTV y cámaras de vídeo digitales usan Y′CbCr.

Aproximaciones numéricas

Antes del desarrollo de los rápidos procesadores de punto flotante SIMD, la mayoría de las implementaciones digitales de RGB → Y′UV usaban 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, quien hace uso de esa opción acepta una pérdida de precisión de aproximadamente el último dígito binario en una compensación típica para velocidades de cálculo mejoradas.

En los siguientes ejemplos, el operador "a≫ ≫ b{displaystyle agg b}"denota un cambio de derecho a por b posiciones binarias. Para la aclaración las variables están utilizando dos caracteres índice: "u" se utiliza para la representación final no firmada, y "t" se utiliza para el valor intermedio escalado. Los ejemplos a continuación se proporcionan únicamente para BT.601. El mismo principio se puede utilizar para realizar operaciones funcionalmente equivalentes utilizando valores que hacen un partido aceptable para los datos que siguen el BT.709 o cualquier otro estándar comparable.

Los valores de Y′ se cambian y escalan convencionalmente al rango [16, 235] (referido como swing de estudio o "niveles de TV") en lugar de usar el rango completo de [0, 255] (referido como full swing o "niveles de PC"). Esta práctica se estandarizó en SMPTE-125M para adaptarse a los sobreimpulsos de la señal ("ringing") debido al filtrado. El valor 235 admite un sobreimpulso máximo de blanco a negro de 255 − 235 = 20, o 20 / (235 − 16) = 9,1 %, que es ligeramente mayor que el sobreimpulso máximo teórico (fenómeno de Gibbs) de alrededor del 8,9 % del paso máximo. El espacio para los dedos de los pies es más pequeño, lo que permite solo 16/219 = 7,3 % de sobreimpulso, que es menor que el sobreimpulso máximo teórico de 8,9 %. Esta es la razón por la cual se le suma 16 a Y′ y por qué los coeficientes de Y′ en la transformada básica suman 220 en lugar de 255. Los valores de 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–240 para U y V. (Estos rangos son importantes en la edición y producción de video, ya que el uso del rango incorrecto dará como resultado una imagen con blancos y negros "recortados", o una imagen baja). imagen de contraste.)

Columpio de estudio para YCbCr BT.601

Para conseguir el tradicional "swing de estudio" Representación de 8 bits de YCbCr para SDTV/BT.601 Se pueden utilizar las siguientes operaciones:

  1. Transformación básica de 8 bits RGB a valores de 16 bits (Y′: unsigned, Cb/Cr: firmado, los valores de matriz se redondearon para que el más adelante deseado Y′ rango de [16..235] y Cb/Cr rango de [16..240] se alcanza):
    [Y.CbCr]=[6612925− − 38− − 74112112− − 94− − 18][RGB].{begin{bmatrix}Y'CbCbend{bmatrix}={begin{bmatrix}66 implica129 implica25\-38 limite-74 implica112112} {begin{bmatrix}}{begin{bmatrix}RGBxBend}
  2. Escala hacia abajo ("conferencia8") a 8 bits con redondeo ("+128") (Y": sin firma, Cb/Cr: firmado):
    Yt.=()Y.+128)≫ ≫ 8,Cbt=()Cb+128)≫ ≫ 8,Crt=()Cr+128)≫ ≫ 8.{displaystyle {begin{aligned}Y_{t}' limit=(Y'+128)gg 8,\Cb_{t} limit=(Cb+128)gg 8,Cr_{t} limit=(Cr+128)gg 8.end{aligned}}}}}}}}}
  3. Agregue una compensación a los valores para eliminar cualquier valor negativo (todos los resultados son de 8 bits sin asignar):
    Yu.=Yt.+16,Cbu=Cbt+128,Cru=Crt+128.{displaystyle {begin{aligned}Y_{u}' limit=Y_{t}'+16,\Cb_{u} limit=Cb_{t}+128,Cr_{u} limit=Cr_{t}+128.end{aligned}}}}}}}

Alta velocidad para YCbCr BT.601

Para conseguir un "swing completo" Representación de 8 bits de Y′CbCr para SDTV/BT.601 Se pueden utilizar las siguientes operaciones:

  1. Transformación básica de 8 bits RGB a valores de 16 bits (Y′: unsigned, Cb/Cr: firmado, los valores de matriz se redondearon para que el rango de Y'CbCr deseado más adelante de cada [0.255] se alcance mientras que no puede ocurrir desbordamiento):
    [Y.CbCr]=[7715029− − 43− − 84127127− − 106− − 21][RGB].{begin{bmatrix}Y'CbCbend{bmatrix}={begin{bmatrix}77 lideres29\-43 concluyen-84 péndulo127127127 concluyen a 10 con 21end{bmatrix} {begin{bmatrix}RGBBendb}{}{}}}}}
  2. Escala abajo ("conferencia8") a valores de 8 bits con redondeo ("+128") (Y": sin firma, Cb/Cr: firmado):
    Yt.=()Y.+128)≫ ≫ 8,Cbt=()Cb+128)≫ ≫ 8,Crt=()Cr+128)≫ ≫ 8.{displaystyle {begin{aligned}Y_{t}' limit=(Y'+128)gg 8,\Cb_{t} limit=(Cb+128)gg 8,Cr_{t} limit=(Cr+128)gg 8.end{aligned}}}}}}}}}
  3. Agregue una compensación a los valores para eliminar cualquier valor negativo (todos los resultados son de 8 bits sin asignar):
    Yu.=Yt.,Cbu=Cbt+128,Cru=Crt+128.{displaystyle {begin{aligned}Y_{u}' limit=Y_{t}',\Cb_{u} limit=Cb_{t}+128,Cr_{u} limit=Cr_{t}+128.end{aligned}}}}}}

Sistemas de luminancia/crominancia en general

La principal ventaja de los sistemas de luma/croma como Y′UV y sus parientes Y′IQ y YDbDr es que siguen siendo compatibles con la televisión analógica en blanco y negro (en gran parte gracias al trabajo de Georges Valensi). El canal Y′ guarda todos los datos registrados por las cámaras en blanco y negro, por lo que produce una señal adecuada para la recepción en pantallas monocromáticas antiguas. En este caso, la U y la V simplemente se descartan. Si muestra color, se utilizan los tres canales y se puede decodificar la información RGB original.

Otra ventaja de Y′UV es que parte de la información se puede descartar para reducir el ancho de banda. El ojo humano tiene bastante poca sensibilidad espacial al color: la precisión de la información de brillo del canal de luminancia tiene un impacto mucho mayor en el detalle de la imagen discernido que el de los otros dos. Entendiendo esta deficiencia humana, los estándares como NTSC y PAL reducen considerablemente el ancho de banda de los canales de crominancia. (El ancho de banda está en el dominio temporal, pero esto se traduce en el dominio espacial a medida que se escanea la imagen).

Por lo tanto, las señales U y V resultantes pueden "comprimirse" sustancialmente. En los sistemas NTSC (Y′IQ) y PAL, las señales de crominancia tenían un ancho de banda significativamente más estrecho que el de la luminancia. Las primeras versiones de NTSC alternaban rápidamente entre colores particulares en áreas de imagen idénticas para que pareciera que se sumaban entre sí para el ojo humano, mientras que todos los estándares de video analógicos modernos e incluso la mayoría de los estándares de video digital usan submuestreo de croma al registrar la información de color de una imagen. a resolución reducida. Solo se mantiene la mitad de la resolución horizontal en comparación con la información de brillo (lo que se denomina submuestreo de croma 4:2:2) y, a menudo, la resolución vertical también se reduce a la mitad (dando 4:2:0). El estándar 4:x:x se adoptó debido al estándar NTSC de color más antiguo que usaba un submuestreo de croma de 4:1:1 (donde la resolución de color horizontal se reduce a un cuarto mientras que la vertical es de resolución completa) de modo que la imagen transmitía solo una cuarta parte de la resolución de color en comparación con la resolución de brillo. Hoy en día, solo los equipos de gama alta que procesan señales sin comprimir utilizan un submuestreo de croma de 4:4:4 con resolución idéntica tanto para la información de brillo como de color.

Los ejes I y Q se eligieron de acuerdo con el ancho de banda que necesita la visión humana, siendo un eje el que requiere más ancho de banda y el otro (afortunadamente a 90 grados) el mínimo. Sin embargo, la verdadera demodulación I y Q era relativamente más compleja, requería dos líneas de retardo analógicas, y los receptores NTSC rara vez la usaban.

Sin embargo, esta conversión de modelo de color tiene pérdidas, particularmente evidente en la diafonía del cable portador de luminancia al croma, y viceversa, en equipos analógicos (incluidos los conectores RCA para transferir una señal digital, ya que todo lo que transportan es compuesto analógico video, que es YUV, YIQ o incluso CVBS). Además, NTSC y PAL codifican señales de color de una manera que hace que las señales de luminancia y croma de alto ancho de banda se mezclen entre sí en un intento por mantener la compatibilidad con versiones anteriores de equipos de televisión en blanco y negro, lo que da como resultado artefactos de cruce de colores y rastreo de puntos. Cuando se creó el estándar NTSC en la década de 1950, esto no era una preocupación real ya que la calidad de la imagen estaba limitada por el equipo del monitor, no por la señal de ancho de banda limitado que se recibía. Sin embargo, la televisión moderna actual es capaz de mostrar más información de la que contienen estas señales con pérdida. Para seguir el ritmo de las capacidades de las nuevas tecnologías de visualización, desde fines de la década de 1970 se hicieron intentos para preservar más la señal Y'UV mientras se transfieren imágenes, como los conectores SCART (1977) y S-Video (1987).

En lugar de Y′UV, se usó Y′CbCr como formato estándar para los algoritmos de compresión de video comunes (digitales), como MPEG-2. La televisión digital y los DVD conservan sus flujos de video comprimido en formato MPEG-2, que utiliza un espacio de color Y′CbCr completamente definido, aunque conserva el proceso establecido de submuestreo cromático. El formato de video digital profesional CCIR 601 también usa Y′CbCr a la tasa de submuestreo de croma común de 4:2:2, principalmente para compatibilidad con estándares de video analógico anteriores. Este flujo se puede mezclar fácilmente en cualquier formato de salida necesario.

Y′UV no es un espacio de color absoluto. Es una forma de codificar información RGB, y el color real que se muestra depende de los colorantes RGB reales utilizados para mostrar la señal. Por lo tanto, un valor expresado como Y′UV solo es predecible si se utilizan colorantes RGB estándar (es decir, un conjunto fijo de cromaticidades primarias o un conjunto particular de rojo, verde y azul).

Además, el rango de colores y brillos (conocido como gama de colores y volumen de color) de RGB (ya sea BT.601 o Rec.709) es mucho más pequeño que el rango de colores y brillos permitido por Y′UV.. Esto puede ser muy importante cuando se convierte de Y′UV (o Y′CbCr) a RGB, ya que las fórmulas anteriores pueden generar valores "no válidos" Valores RGB: es decir, valores por debajo del 0 % o muy por encima del 100 % del rango (p. ej., fuera del rango de luminancia estándar de 16 a 235 (y el rango de croma de 16 a 240) para televisores y contenido HD, o fuera de 0 a 255 para contenido estándar). definición en PC). A menos que estos valores se traten, por lo general serán "recortados" (es decir, limitado) al rango válido del canal afectado. Esto cambia el tono del color, lo cual es muy indeseable, por lo que a menudo se considera mejor desaturar los colores ofensivos para que entren en la gama RGB. Del mismo modo, cuando RGB con una profundidad de bits determinada se convierte en YUV con la misma profundidad de bits, varios colores RGB pueden convertirse en el mismo color Y'UV, lo que provoca la pérdida de información.

Relación con Y′CbCr

Y′UV se usa a menudo como término para YCbCr. Sin embargo, aunque están relacionados, son formatos diferentes con diferentes factores de escala. La matriz no escalada se usa en el PhotoYCC de Photo CD. U y V son señales bipolares que pueden ser positivas o negativas, y son cero para los grises, mientras que YCbCr generalmente escala todos los canales al rango 16–235 o al rango 0–255, lo que hace que Cb y Cr sean cantidades sin signo que son 128 para grises

Sin embargo, la relación entre ellos en el caso estándar es simple. En particular, el Y' los canales de ambos están relacionados linealmente entre sí, tanto Cb como U están relacionados linealmente con (B-Y), y tanto Cr como V están relacionados linealmente con (R-Y).

Tipos de muestreo

Para obtener una señal digital, las imágenes Y′UV se pueden muestrear de varias maneras diferentes; ver submuestreo de croma.

Conversión entre Y'UV y RGB

Los archivos RGB suelen estar codificados en 8, 12, 16 o 24 bits por píxel. En estos ejemplos, supondremos 24 bits por píxel, que se escribe como RGB888. El formato de bytes estándar es:

R0, g0, b0, r1, g1, b1,...

Los archivos Y′UV se pueden codificar en 12, 16 o 24 bits por píxel. Los formatos comunes son Y'UV444 (o YUV444), YUV411, Y'UV422 (o YUV422) y Y'UV420p (o YUV420). El apóstrofe después de la Y a menudo se omite, al igual que la "p" después de YUV420p. En términos de formatos de archivo reales, YUV420 es el más común, ya que los datos se comprimen más fácilmente 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 el canal Y a U y V.

Para convertir de RGB a YUV o viceversa, lo más sencillo es usar RGB888 y YUV444. Para YUV411, YUV422 y YUV420, los bytes deben convertirse primero a YUV444.

YUV444 3 bytes por pixel (12 bytes por 4 píxeles)
YUV422 4 bytes por 2 píxeles (8 bytes por 4 píxeles)
YUV411 6 bytes por 4 píxeles
YUV420p 6 bytes por 4 píxeles, reordenado

Conversión Y'UV444 a RGB888

La función [R, G, B] = Y′UV444toRGB888(Y′, U, V) convierte el formato Y′UV a formato RGB simple.

Las fórmulas de conversión RGB utilizadas para el formato Y'UV444 también son aplicables al formato de transmisión de TV NTSC estándar de YUV420 (o YUV422 para el caso). Para YUV420, dado que cada muestra U o V se usa para representar 4 muestras Y que forman un cuadrado, un método de muestreo adecuado puede permitir la utilización de las fórmulas de conversión exactas que se muestran a continuación. Para obtener más detalles, consulte la demostración del formato 4:2:0 en la sección inferior de este artículo.

Estas fórmulas se basan en el estándar NTSC:

Y.=0.299R+0,5987G+0.114BU=− − 0.147R− − 0,2989G+0.436BV=0.615R− − 0,515G− − 0.100B{displaystyle {begin{aligned}Y' limit=0.299R+0.587G+0.114B\U paciente=-0.147R-0.289G+0.436BV rest=0.615R-0.515G-0.100Bend{aligned}}}}}}}

En arquitecturas más antiguas que no son SIMD, la aritmética de punto flotante es mucho más lenta que la aritmética de punto fijo, por lo que una formulación alternativa es:

Y.=()()66R+129G+25B+128)≫ ≫ 8)+16U=()()− − 38R− − 74G+112B+128)≫ ≫ 8)+128V=()()112R− − 94G− − 18B+128)≫ ≫ 8)+128{displaystyle {begin{aligned}Y' Dime=(66R+129G+25B+128)gg 8)+16U simultáneamente=(((-38R-74G+112B+128)gg 8)+128Vciente=(112R-94G-18B+128)gg 8)+128end{aligned}

Para la conversión de Y'UV a RGB, utilizando los coeficientes c, d y e, y notando que []0255{displaystyle []_{0} {255} denotes clamping a value to the 8-bit range of 0 to 255, the following formulae provide the conversion from Y′UV to RGB (NTSC version):

c=Y.− − 16d=U− − 128e=V− − 128{displaystyle {begin{aligned}ciéndose=Y'-16d viviendo=U-128e simultáneamente=V-128end{aligned}}
R=[()298c+409e+128)≫ ≫ 8]0255G=[()298c− − 100d− − 208e+128)≫ ≫ 8]0255B=[()298c+516d+128)≫ ≫ 8]0255{displaystyle {begin{aligned}Riéndose=[(298c+409e+128)gg 8]_{0}{255}G simultáneamente=[(298c-100d-208e+128)gg 8]_{0}{255}B mutuamente=[(298c+516d+128)gg 8]_{0} {255}end{aligned}}

Nota: Las fórmulas anteriores en realidad están implícitas para YCbCr. Aunque aquí se usa el término YUV, YUV y YCbCr no son exactamente lo mismo de manera estricta.

La versión ITU-R de la fórmula es diferente, con max()CB)=max()CR)=0.499↦ ↦ 7F16{displaystyle max(C_{B})=max(C_{R})=0.499mapsto mathrm {7F} _{16}, mientras max()U)=0.436↦ ↦ 7016{displaystyle max(U)=0.436mapsto 70_{16} y max()V)=0.615↦ ↦ 7016{displaystyle max(V)=0.615mapsto 70_{16} arriba:

Y=0.299R+0,5987G+0.114B+0CB=− − 0.169R− − 0.331G+0.499B+128CR=0.499R− − 0.418G− − 0,0813B+128R=[Y+1.402× × ()CR− − 128)]0255G=[Y− − 0.344× × ()CB− − 128)− − 0.714× × ()CR− − 128)]0255B=[Y+1.772× × ()CB− − 128)]0255{fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif}

Operación entera del estándar ITU-R para YCbCr (8 bits por canal) a RGB888:

CR=CR− − 128;CB=CB− − 128;R=Y+CR+()CR≫ ≫ 2)+()CR≫ ≫ 3)+()CR≫ ≫ 5)G=Y− − ()()CB≫ ≫ 2)+()CB≫ ≫ 4)+()CB≫ ≫ 5))− − ()()CR≫ ≫ 1)+()CR≫ ≫ 3)+()CR≫ ≫ 4)+()CR≫ ≫ 5))B=Y+CB+()CB≫ ≫ 1)+()CB≫ ≫ 2)+()CB≫ ≫ 6){displaystyle {begin{aligned}C_{R} limit=C_{R}-128;\C_{B} limit=C_{B}-128;\\\cH00=Y+C_{R}+(C_{R}gg 2)+(C_{_B}g})

Conversión de Y'UV422 a RGB888

Entrada: Lea 4 bytes de Y′UV (u, y1, v, y2)
Producto: Escribe 6 bytes de RGB (R, G, B, R, G, B)
u = yuv[0];
y1 = yuv[1];
v = yuv[2];
y2 = yuv[3];
YUV422=[uSí.1vSí.2]{displaystyle {YUV}_{422}={begin{bmatrix}u sensibley_{1}v sensibley_{2}end{bmatrix}}}}
YUV444=[Sí.1uvSí.2uv]{displaystyle {YUV}_{444}={begin{bmatrix}y_{1} {0}}}}} {c}}}
RGB=M− − 1YUV444{displaystyle {}=M^{-1} {} {444}

Usando esta información, podría analizarse como formato Y'UV444 regular para obtener información de 2 píxeles RGB:

rgb1 = Y′UV444toRGB888(y1, u, v);
rgb2 = Y′UV444toRGB888(y2, u, v);
Yuv422 yuy2.svg

Y′UV422 también se puede expresar con los valores en un orden alternativo, p. para el código de formato FourCC YUY2.

Entrada: Lea 4 bytes de Y "UV (y1, u, y2, v), (y1, y2, u, v) o (u, v, y1, y2)
YUY422=[Sí.1uSí.2v]{displaystyle {YUYUY}_{422}={begin{bmatrix}y_{1}
YYU422=[Sí.1Sí.2uv]{displaystyle {YU}_{422}={begin{bmatrix}y_{1} {2}\u pulsavend{bmatrix}}
UVY422=[uvSí.1Sí.2]{displaystyle {UVY}={begin{bmatrix}u pulsav\y_{1} {2}end{bmatrix}}}}

Conversión de Y'UV411 a RGB888

Entrada: Lea 6 bytes de Y′UV
Producto: Escribe 12 bytes de RGB
// Extract YUV components
u = yuv[0];
y1 = yuv[1];
y2 = yuv[2];
v = yuv[3];
y3 = yuv[4];
y4 = yuv[5];
rgb1 = Y′UV444toRGB888(y1, u, v);
rgb2 = Y′UV444toRGB888(y2, u, v);
rgb3 = Y′UV444toRGB888(y3, u, v);
rgb4 = Y′UV444toRGB888(y4, u, v);
YUV411=[uSí.1Sí.2vSí.3Sí.4]{displaystyle {YUV}_{411}={begin{bmatrix}u sensibley_{1} {2}v disminuyey_{3} {4}end{bmatrix}}}}} {}}} {}}} {}}}} {}}}} {}}}}} {}}}}}}}}}}}
YUV444=[Sí.1uvSí.2uvSí.3uvSí.4uv]{displaystyle {YUV}_{444}={begin{bmatrix}y_{1} {0} {0}} {c} {c}}} {c} {c}}}}}} {cH}}}}}}}}}}}}} {cH}}}}}}}}} {c}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} {c}}}}} {c}}} {c}}}}}}}}}}}}}}}} {c}}}}}}}}}}}}}}}}}}}}}}} {

Entonces, el resultado es que obtenemos valores de 4 píxeles RGB (4*3 bytes) de 6 bytes. Esto significa reducir a la mitad el tamaño de los datos transferidos, con una pérdida de calidad.

Conversión de Y'UV420p (y Y'V12 o YV12) a RGB888

Y′UV420p es un formato plano, lo que significa que los valores Y′, U y V se agrupan en lugar de intercalarse. La razón de esto es que al agrupar los valores U y V, la imagen se vuelve mucho más comprimible. Cuando se le da una matriz de una imagen en el formato Y′UV420p, todos los valores Y′ vienen primero, seguidos por todos los valores U, seguidos finalmente por todos los valores V.

El formato Y′V12 es esencialmente el mismo que Y′UV420p, pero tiene los datos U y V cambiados: los valores Y′ son seguidos por los valores V, con los valores U al final. Siempre que se tenga cuidado de extraer los valores U y V de las ubicaciones adecuadas, tanto Y'UV420p como Y'V12 se pueden procesar con el mismo algoritmo.

Al igual que con la mayoría de los formatos Y′UV, hay tantos valores Y′ como píxeles. Donde X es igual a la altura multiplicada por el ancho, los primeros índices X en la matriz son valores Y' que corresponden a cada píxel individual. Sin embargo, solo hay una cuarta parte de los valores U y V. Los valores U y V corresponden a cada bloque de 2 por 2 de la imagen, lo que significa que cada entrada U y V se aplica a cuatro píxeles. Después de los valores Y′, los siguientes índices X/4 son los valores U para cada bloque de 2 por 2, y los siguientes índices X/4 después de eso son los valores V que también se aplican a cada bloque de 2 por 2.

Yuv420.svg

Como se muestra en la imagen anterior, los componentes Y', U y V en Y'UV420 se codifican por separado en bloques secuenciales. Se almacena un valor Y′ para cada píxel, seguido de un valor U para cada bloque cuadrado de píxeles de 2×2 y, finalmente, un valor V para cada bloque de 2×2. Los valores correspondientes de Y′, U y V se muestran usando el mismo color en el diagrama anterior. Lea línea por línea como un flujo de bytes de un dispositivo, el bloque Y′ se encontraría en la posición 0, el bloque U en la posición x×y (6×4 = 24 en este ejemplo) y el bloque V en la posición x ×y + (x×y)/4 (aquí, 6×4 + (6×4)/4 = 30).

Y′UV420sp (NV21) a conversión RGB (Android)

Este formato (NV21) es el formato de imagen estándar en la vista previa de cámara de Android. Imagen plana YUV 4:2:0, con muestras Y de 8 bits, seguida de un plano V/U intercalado con muestras cromáticas submuestreadas 2x2 de 8 bits.

Código C++ utilizado en Android para convertir píxeles de YUVImage:

vacío YUVImage::yuv2rgb()uint8_t Sí. Valor, uint8_t uValue, uint8_t vValue, uint8_t *r, uint8_t *g, uint8_t *b) const {} int r Tmp = Sí. Valor + ()1.370705 * ()vValue-128));  // o computación de entero rápido con una pequeña aproximación // rTmp = yValue + (351*(vValue-128)) título8; int g Tmp = Sí. Valor - ()0.698001 * ()vValue-128) - ()0.337633 * ()uValue-128));  // gTmp = yValue - (179*(vValue-128) + 86*(uValue-128))) título8; int b Tmp = Sí. Valor + ()1.732446 * ()uValue-128)); // bTmp = yValue + (443*(uValue-128)) título8; *r = pinza()r Tmp, 0, 255); *g = pinza()g Tmp, 0, 255); *b = pinza()b Tmp, 0, 255);}

Contenido relacionado

Alcance (informática)

En programación informática, el alcance de un enlace de nombre es la parte de un programa donde el enlace de nombre es válido; es decir, donde el nombre...

Súper Mario 64

Super Mario 64 es un juego de plataformas desarrollado y publicado por Nintendo para Nintendo 64. Fue lanzado en Japón y Norteamérica en 1996 y en las...

Intercambio de llaves Diffie-Hellman

Tradicionalmente, la comunicación cifrada segura entre dos partes requería que primero intercambiaran claves por algún medio físico seguro, como listas de...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save