De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Ejemplo de plano de color UV, valor Y ′ = 0,5, representado dentro de la gama de colores RGB
Una imagen junto con sus componentes Y ′, U y V respectivamente

YUV es un sistema de codificación de color que se utiliza normalmente como parte de una canalización de imágenes en color . Codifica una imagen o video en color teniendo en cuenta la percepción humana , lo que permite un ancho de banda reducido para los componentes de crominancia , lo que generalmente permite que los errores de transmisión o artefactos de compresión sean enmascarados de manera más eficiente por la percepción humana que usando una representación RGB "directa". Otras codificaciones de color tienen propiedades similares, y la razón principal para implementar o investigar las propiedades de Y′UV sería para interactuar con televisión analógica o digital o equipo fotográfico que cumpla con ciertos estándares de Y′UV.

El modelo Y′UV define un espacio de color en términos de un componente de luminancia (Y ′) y dos componentes de crominancia , llamados U (proyección azul) y V (proyección roja) respectivamente. El modelo de color Y′UV se utiliza en el estándar de video en color compuesto PAL (excluyendo PAL-N ). Los sistemas en blanco y negro anteriores usaban solo información de luma (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 imagen en color en el formato nativo en blanco y negro del receptor .

Y 'representa el componente luma (el brillo) y U y V son los componentes de crominancia (color); la luminancia se denota por Y y luma por Y ′ - los símbolos primos (') denotan corrección gamma , [1] con " luminancia " significa brillo físico del espacio lineal, mientras que " luma " es brillo perceptual (no lineal).

El alcance de los términos Y′UV, YUV, YCbCr , YPbPr , etc., es a veces ambiguo y superpuesto. Históricamente, los términos YUV e Y'UV se usaban para una codificación analógica específica de información de color en sistemas de televisión, mientras que YCbCr se usaba para codificación digital de información de color adecuada para video y compresión y transmisión de imágenes fijas como MPEG y JPEG . [2] Hoy en día, el término YUV se usa comúnmente en la industria de la computación para describir formatos de archivo que están codificados usando YCbCr .

El modelo de color YPbPr utilizado en el vídeo componente analógico y su versión digital YCbCr utilizada en el vídeo digital se derivan más o menos de él, y en ocasiones se denominan Y′UV. (C B / P B y C R / P R son desviaciones del gris en los ejes azul-amarillo y rojo-cian, mientras que U y V son diferencias de luminancia azul y rojo-luminancia respectivamente). El espacio de color Y′IQ utilizado en el sistema de radiodifusión de televisión analógica NTSC está relacionado con él, aunque de una forma más compleja. El espacio de color YDbDr , utilizado en los sistemas de transmisión de televisión SECAM y PAL-N analógicos, también está relacionado.

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 las primarias XYZ . Esto se presta naturalmente al uso de la misma letra en luma (Y ′), que se aproxima a una correlación de luminancia perceptualmente uniforme . Asimismo, se eligieron U y V para diferenciar los ejes U y V de los de otros espacios, como el espacio de cromaticidad xey. Vea las ecuaciones a continuación o compare el desarrollo histórico de las matemáticas. [3] [4] [5]

Historia [ editar ]

Y′UV se inventó cuando los ingenieros querían televisión en color en una infraestructura en blanco y negro . [6] Necesitaban un método de transmisión de señal que fuera compatible con la televisión en blanco y negro (B / N) y que pudiera 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 dicen al televisor que cambie el color de un punto determinado (las pantallas CRT no tienen píxeles discretos) sin alterar su brillo. O las señales U y V le dicen al monitor que haga un color 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 lugar. Cuanto más se acerquen los valores U y V a cero, menos cambiará 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 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 viejas señales de televisión en blanco y negro no tenían señales U y V presentes, lo que significa que la televisión en color simplemente la mostraría como televisión en blanco y negro. 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, haciendo que Y′UV sea compatible con versiones anteriores de todos los equipos existentes en blanco y negro, entrada y salida. Si el estándar de televisión en color no hubiera utilizado señales de diferencia de color, podría significar que una televisión en color haría colores divertidos con un B &W o se necesitarían circuitos adicionales 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 lo harí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.[7]

Conversión a / desde RGB [ editar ]

SDTV con BT.601 [ editar ]

Las señales Y′UV se crean normalmente 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 del brillo o luminancia general. U y V se calculan como diferencias escaladas entre Y ′ y los valores de B y R.

BT.601 define las siguientes constantes:

Y′UV se calcula a partir de RGB (RGB lineal, no RGB o sRGB con corrección de gamma, por ejemplo) de la siguiente manera:

Los rangos resultantes de Y ′, U y V respectivamente son [0, 1], [- U max , U max ] y [- V max , V max ].

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

De manera equivalente, al sustituir los valores de las constantes y expresarlas como matrices se obtienen estas fórmulas para BT.601:

Tenga en cuenta que para valores pequeños de Y 'es posible obtener valores R, G o B negativos, por lo que en la práctica ajustamos los resultados RGB al intervalo [0,1].

HDTV con BT.709 [ editar ]

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 W R y W B en comparación con los valores seleccionados previamente en el sistema SDTV. Para HDTV, estos valores los proporciona la Rec. 709 . Esta decisión afectó aún más a la matriz para la conversión de 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 distintas de Y′UV 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 del canal de croma (U & V) necesita conversión. Todavía en cobertura del espacio de color CIE 1931la Rec. El espacio de color 709 es casi idéntico al Rec. 601 y cubre el 35,9%. [8] A diferencia de este UHDTV con Rec. 2020 cubre un área mucho más grande y además vería su propio conjunto de matrices para YUV / Y′UV.

BT.709 define estos valores de peso:

Las matrices y fórmulas de conversión para BT.709 son las siguientes:

Notas [ editar ]

  • Los pesos utilizados para calcular Y ′ (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) producen 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; Los equipos digitales como HDTV y cámaras de video digitales utilizan Y′CbCr.
  • Se supone que los valores de entrada RGB están en el espacio RGB lineal. RGB con corrección de gamma o sRGB primero deben convertirse correctamente en un espacio lineal.
  • Planos UV en un rango de Y = [0,1] usando la matriz BT.709
  • Y ′ valor de 0

  • Valor de Y ′ de 0,5

  • Valor de Y ′ de 0,5, con la gama no truncada mostrada por el rectángulo central

  • Y ′ valor de 1

Aproximaciones numéricas [ editar ]

Antes del desarrollo de procesadores rápidos 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 . 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, cualquiera que haga uso de esa opción acepta una pérdida de precisión de aproximadamente el último dígito binario, normalmente en una compensación para velocidades de cálculo mejoradas.

En los siguientes ejemplos, el operador " " denota un desplazamiento a la derecha de a por b posiciones binarias. Para aclarar, las variables usan dos caracteres de sufijo: "u" se usa para la representación final sin signo, y "t" se usa para el valor intermedio reducido. Los ejemplos siguientes se proporcionan solo para BT.601. El mismo principio se puede utilizar para realizar operaciones funcionalmente equivalentes utilizando valores que coincidan de forma aceptable con los datos que siguen el BT.709 o cualquier otro estándar comparable.

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 adaptarse a los sobreimpulsos de la señal ("timbre") debido al filtrado. El valor 235 acomoda un sobreimpulso máximo de blanco a negro de 255 - 235 = 20, o 20 / (235 - 16) = 9,1%, que es un poco más grande que el sobreimpulso máximo teórico ( fenómeno de Gibbs ) de aproximadamente el 8,9% del paso máximo. El espacio para los dedos de los pies es más pequeño, lo que permite solo un 16/219 = 7.3% de sobreimpulso, que es menor que el sobreimpulso máximo teórico del 8.9%. Es por eso que 16 se suma a Y ′ y por qué los coeficientes Y ′ en la transformada básica suman 220 en lugar de 255.[9] Los valores U y V, que pueden ser positivos o negativos, se suman con 128 para hacerlos siempre positivos, lo que da 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 de rango dará como resultado una imagen con blancos y negros "recortados" o una imagen de bajo contraste).

Studio swing para BT.601 [ editar ]

Para obtener la representación tradicional de 8 bits "studio-swing" de Y′UV para SDTV / BT.601, se pueden utilizar las siguientes operaciones:

1. Transformación básica de valores RGB de 8 bits a valores de 16 bits (Y ′: sin signo, U / V: con signo, los valores de la matriz se redondearon para que el rango Y ′ deseado posterior de [16..235] y U / Se alcanza el rango V de [16..240]):

2. Reducir (" >> 8") a 8 bits con redondeo ("+128") (Y ′: sin signo, U / V: con signo):

3. Agregue un desplazamiento a los valores para eliminar cualquier valor negativo (todos los resultados son de 8 bits sin signo):

Full swing para BT.601 [ editar ]

Para obtener una representación de 8 bits "completa" de Y′UV para SDTV / BT.601, se pueden utilizar las siguientes operaciones:

1. Transformación básica de valores RGB de 8 bits a valores de 16 bits (Y ′: sin signo, U / V: con signo, los valores de la matriz se redondearon para que el rango Y′UV deseado posterior de cada [0..255] sea alcanzado mientras no puede ocurrir un desbordamiento):

2. Reducir (">> 8") a valores de 8 bits con redondeo ("+128") (Y ′: sin signo, U / V: con signo):

3. Agregue un desplazamiento a los valores para eliminar cualquier valor negativo (todos los resultados son de 8 bits sin signo):

Sistemas de luminancia / crominancia en general [ editar ]

La principal ventaja de los sistemas luma / chroma 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 debido al trabajo de Georges Valensi ). El canal Y ′ guarda todos los datos registrados por cámaras en blanco y negro, por lo que produce una señal adecuada para la recepción en pantallas monocromas antiguas. En este caso, la U y la V simplemente se descartan. Si se muestra el 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 muy poca sensibilidad espacial al color: la precisión de la información de brillo del canal de luminancia tiene mucho más impacto en el detalle de la imagen discernido que en los otros dos. Al comprender 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 se pueden "comprimir" 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 hacer que el ojo humano pareciera que se suman entre sí, mientras que todos los estándares de video analógicos modernos e incluso la mayoría de los digitales utilizan submuestreo de cromagrabando 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 (denominado 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 divide en cuatro mientras que la vertical es la resolución completa) de modo que la imagen lleva solo una un cuarto de la resolución de color en comparación con la resolución de brillo. Hoy en día, solo los equipos de alta gama que procesan señales sin comprimir utilizan un submuestreo de croma de 4: 4: 4 con una resolución idéntica para la información de brillo y 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 mayor ancho de banda y el otro (fortuitamente a 90 grados) el mínimo. Sin embargo, la verdadera demodulación I y Q era relativamente más compleja, requiriendo dos líneas de retardo analógicas, y los receptores NTSC rara vez la usaban.

Sin embargo, esta conversión de espacio de color tiene pérdidas , particularmente obvia en la diafonía desde el luma al cable portador de croma, y ​​viceversa, en equipos analógicos (incluidos conectores RCA para transferir una señal digital, ya que todo lo que transportan es video compuesto analógico , que es YUV, YIQ o incluso CVBS ). Además, las señales de color codificadas en NTSC y PAL hacen que las señales de luminancia y crominancia de gran 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 un rastreo de puntos y colores cruzadosartefactos. 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 de hoy es capaz de mostrar más información de la que contienen estas señales con pérdida. Para mantener el ritmo de las capacidades de las nuevas tecnologías de visualización, se hicieron intentos desde finales de la década de 1970 para preservar más de 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 algoritmos de compresión de video comunes (digitales) como MPEG-2 . La televisión digital y los DVD conservan sus transmisiones de video comprimido en el formato MPEG-2, que utiliza un espacio de color Y′CbCr completo, aunque conserva el proceso establecido de submuestreo de croma. El formato de video digital profesional CCIR 601 también usa Y′CbCr a la frecuencia de submuestreo de croma común de 4: 2: 2, principalmente para compatibilidad con estándares de video analógico anteriores. Esta secuencia 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 la 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, la gama de colores y brillos (conocida como gama de colores) de RGB (ya sea BT.601 o Rec.709) es mucho más pequeño que el rango de colores y brillos permitidos 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 producir valores RGB "no válidos", 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–235 (y rango de croma de 16–240) para televisores y contenido HD, o fuera de 0–255 para definición estándar en PC). A menos que se aborden estos valores, normalmente se "recortarán" (es decir, se limitarán) 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 de manera que caigan dentro de la gama RGB. [10]Del mismo modo, cuando RGB a una profundidad de bits determinada se convierte a YUV a la misma profundidad de bits, varios colores RGB pueden convertirse en el mismo color Y'UV, lo que da como resultado la pérdida de información.

Relación con Y′CbCr [ editar ]

Y′UV se usa a menudo como un término para YCbCr . Sin embargo, aunque están relacionados, son formatos diferentes con diferentes factores de escala. [11] 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, los canales Y 'de ambos están relacionados linealmente entre sí, tanto Cb como U están relacionados linealmente con (BY), y tanto Cr como V están relacionados linealmente con (RY).

Tipos de muestreo [ editar ]

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

Conversión entre Y′UV y RGB [ editar ]

Los archivos RGB generalmente se codifican en 8, 12, 16 o 24 bits por píxel. En estos ejemplos, asumiremos 24 bits por píxel, que está escrito 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) e Y′UV420p (o YUV420). El apóstrofe después de la Y se omite a menudo, 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 y el canal U y V. [12] [13]

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

YUV444 3 bytes por píxel (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íxelesYUV420p 6 bytes por 4 píxeles, reordenado

Conversión de Y′UV444 a RGB888 [ editar ]

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:

En arquitecturas 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: [14]

Para la conversión de Y'UV a RGB, utilizando los coeficientes c, dye, y teniendo en cuenta que denota fijar un valor en el rango de 8 bits de 0 a 255, las siguientes fórmulas proporcionan la conversión de Y'UV a RGB ( Versión NTSC):

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

La versión ITU-R de la fórmula es diferente, con , mientras que y superior:

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

Conversión de Y′UV422 a RGB888 [ editar ]

Entrada: leer 4 bytes de Y′UV (u, y1, v, y2)
Salida: escribe 6 bytes de RGB (R, G, B, R, G, B)
u = yuv [0];y1 = yuv [1];v = yuv [2];y2 = yuv [3];

Con esta información, se podría analizar como formato Y′UV444 normal para obtener información de 2 píxeles RGB:

rgb1 = Y'UV444toRGB888 (y1, u, v);rgb2 = Y'UV444toRGB888 (y2, u, v);

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

Entrada: Leer 4 bytes de Y′UV (y1, u, y2, v), (y1, y2, u, v) o (u, v, y1, y2)

Conversión de Y′UV411 a RGB888 [ editar ]

Entrada: leer 6 bytes de Y′UV
Salida: escribe 12 bytes de RGB
// Extrae los componentes de YUVu = 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);

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

Conversión de Y′UV420p (y Y′V12 o YV12) a RGB888 [ editar ]

Y′UV420p es un formato plano, lo que significa que los valores Y ′, U y V están agrupados en lugar de intercalados. La razón de esto es que al agrupar los valores U y V juntos, 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 de Y ′ vienen primero, seguidos de todos los valores de U, seguidos finalmente de todos los valores de V.

El formato Y′V12 es esencialmente el mismo que Y′UV420p, pero tiene los datos U y V intercambiados: 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 pueden procesarse utilizando el mismo algoritmo.

Como ocurre 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 de 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 2 por 2, y los siguientes índices X / 4 son los valores V que también se aplican a cada bloque 2 por 2.

Como se muestra en la imagen anterior, los componentes Y ′, U y V en Y′UV420 se codifican por separado en bloques secuenciales. El valor AY ′ se almacena 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 de arriba. 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).

Conversión de Y′UV420sp (NV21) a RGB (Android) [ editar ]

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

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

void  YUVImage :: yuv2rgb ( uint8_t  yValue ,  uint8_t  uValue ,  uint8_t  vValue ,  uint8_t  * r ,  uint8_t  * g ,  uint8_t  * b )  const  {  int  rTmp  =  yValue  +  ( 1.370705  *  ( vValue -128 );  // o computación rápida de números enteros con una pequeña aproximación  // rTmp = yValue + (351 * (vValue-128)) >> 8;  int  gTmp  =  yValue -  ( 0.698001  *  ( vValue -128 ))  -  ( 0.337633  *  ( uValue -128 ));  // gTmp = yValue - (179 * (vValue-128) + 86 * (uValue-128)) >> 8;  int  bTmp  =  yValue  +  ( 1.732446  *  ( uValue -128 ));  // bTmp = yValue + (443 * (uValue-128)) >> 8;  * r  =  pinza ( rTmp ,  0 ,  255 );  * g  =  abrazadera ( gTmp , 0 ,  255 );  * b  =  pinza ( bTmp ,  0 ,  255 ); }

Referencias [ editar ]

  1. ^ Pauta de ingeniería EG 28, "Glosario anotado de términos esenciales para la producción electrónica", SMPTE, 1993.
  2. ^ Poynton, Charles. "YUV y luminancia considerados dañinos: una petición de terminología precisa en video" [1]
  3. ^ CIELUV
  4. ^ Espacio de color CIE 1960
  5. ^ Macadán, David L. (1 de agosto de 1937). "Transformaciones proyectivas de especificaciones de color ICI" . Revista de la Optical Society of America . 27 (8): 294-297. Código bibliográfico : 1937JOSA ... 27..294M . doi : 10.1364 / JOSA.27.000294 . Consultado el 12 de abril de 2014 .
  6. ^ Maller, Joe. Color RGB y YUV , Referencia de FXScript
  7. ^ W. Wharton & D. Howorth, Principios de recepción televisiva , Pitman Publishing, 1971, págs. 161-163
  8. ^ " " Super Hi-Vision "como televisión de próxima generación y sus parámetros de vídeo" . Pantalla de información . Consultado el 1 de enero de 2013 .
  9. ^ Keith Jack. Video desmitificado . ISBN 1-878707-09-4.
  10. ^ Limitación de señales de video digital YUV (publicación de la BBC) Autores: VG Devereux http://downloads.bbc.co.uk/rd/pubs/reports/1987-22.pdf
  11. ^ Poynton, Charles (19 de junio de 1999). "YUV y luminancia considerados perjudiciales" (PDF) . Consultado el 18 de noviembre de 2016 . Cite journal requires |journal= (help)
  12. ^ msdn.microsoft.com, formatos YUV de 8 bits recomendados para la reproducción de video
  13. ^ msdn.microsoft.com, subtipos de video YUV
  14. ^ https://msdn.microsoft.com/en-us/library/ms893078.aspx
  15. ^ fourcc.com formas de píxeles YUV
  16. ^ https://android.googlesource.com/platform/frameworks/av/+/0e4e5a8/media/libstagefright/yuv/YUVImage.cpp

Enlaces externos [ editar ]

  • Conversión de píxeles RGB / Y'UV
  • Explicación de muchos formatos diferentes en la familia Y′UV
  • Poynton, Charles. Ingeniería de video
  • Caja de herramientas Colorlab MATLAB para el cálculo de la ciencia del color y la reproducción precisa del color (por Jesús Malo y María José Luque, Universitat de Valencia). Incluye colorimetría triestímulo estándar CIE y transformaciones a varios modelos de apariencia de color no lineales (CIE Lab, CIE CAM, etc.).
  • Kohn, Mike. Y′UV422 a RGB usando SSE / Ensamblaje
  • Espacios de color YUV, YCbCr, YPbPr
  • Formatos de color para procesamiento de imágenes y video: conversión de color entre RGB, YUV, YCbCr e YPbPr
  • libyuv
  • pixfc-sse : biblioteca C de conversiones de formato de color optimizadas para SSE
  • Archivos YUV: archivos de video YUV / RGB de muestra / demostración en muchos formatos YUV, lo ayudan a realizar la prueba.