Partilhar via


Sobre o vídeo YUV

O vídeo digital geralmente é codificado em um formato YUV . Este artigo explica os conceitos gerais do vídeo YUV, juntamente com alguma terminologia, sem entrar profundamente na matemática do processamento de vídeo YUV.

Se você trabalhou com computação gráfica, provavelmente está familiarizado com a cor RGB. Uma cor RGB é codificada usando três valores: vermelho, verde e azul. Esses valores correspondem diretamente a partes do espectro visível. Os três valores RGB formam um sistema de coordenadas matemáticas, chamado de espaço de cor. O componente vermelho define um eixo desse sistema de coordenadas, azul define o segundo e verde define o terceiro, conforme mostrado na ilustração a seguir. Qualquer cor RGB válida fica em algum lugar dentro desse espaço de cor. Por exemplo, magenta pura é 100% azul, 100% vermelha e 0% verde.

diagrama mostrando o espaço de cor rgb

Embora o RGB seja uma maneira comum de representar cores, outros sistemas de coordenadas são possíveis. O termo YUV refere-se a uma família de espaços de cores, todos os quais codificam informações de brilho separadamente das informações de cor. Assim como o RGB, o YUV usa três valores para representar qualquer cor. Esses valores são chamados de Y', U e V. (Na verdade, esse uso do termo "YUV" é tecnicamente impreciso. No vídeo do computador, o termo YUV quase sempre se refere a um espaço de cores específico chamado Y'CbCr, discutido posteriormente. No entanto, YUV geralmente é usado como um termo geral para qualquer espaço de cor que funcione nos mesmos princípios que Y'CbCr.)

O componente Y', também chamado de luma, representa o valor de brilho da cor. O símbolo principal (') é usado para diferenciar o luma de um valor intimamente relacionado, luminância, que é designado Y. Luminance é derivado de valores RGB lineares , enquanto luma é derivado de valores RGB não lineares (corrigidos por gama). Luminância é uma medida mais próxima do brilho verdadeiro, mas o luma é mais prático de usar por razões técnicas. O símbolo principal é frequentemente omitido, mas os espaços de cor YUV sempre usam luma, não luminância.

O Luma é derivado de uma cor RGB tomando uma média ponderada dos componentes vermelho, verde e azul. Para televisão de definição padrão, a seguinte fórmula é usada:

Y' = 0.299R + 0.587G + 0.114B

Essa fórmula reflete o fato de que o olho humano é mais sensível a certos comprimentos de onda de luz do que outros, o que afeta o brilho percebido de uma cor. A luz azul parece mais esmaecida, verde parece mais brilhante, e vermelho está em algum lugar no meio. Essa fórmula também reflete as características físicas dos fósforos usados nos primeiros televisores. Uma fórmula mais recente, levando em conta a tecnologia de televisão moderna, é usada para televisão de alta definição:

Y' = 0.2125R + 0.7154G + 0.0721B

A equação de luma para televisão de definição padrão é definida em uma especificação chamada ITU-R BT.601. Para televisão de alta definição, a especificação relevante é ITU-R BT.709.

Os componentes de você e V, também chamados de valores chroma ou valores de diferença de cor , são derivados pela subtração do valor Y dos componentes vermelho e azul da cor RGB original:

U = B - Y'

V = R - Y'

Juntos, esses valores contêm informações suficientes para recuperar o valor RGB original.

Benefícios do YUV

A televisão analógica usa YUV em parte por razões históricas. Sinais de televisão de cores analógicas foram projetados para serem compatíveis com versões anteriores com televisores preto e branco. O sinal de televisão colorida carrega as informações de chroma (você e V) sobrepostas ao sinal de luma. As televisões em preto e branco ignoram o chroma e exibem o sinal combinado como uma imagem em escala de cinza. (O sinal foi projetado para que o chroma não interfira significativamente com o sinal de luma.) Os televisores de cores podem extrair o chroma e converter o sinal de volta em RGB.

O YUV tem outra vantagem que é mais relevante hoje em dia. O olho humano é menos sensível às mudanças na tonalidade do que às mudanças no brilho. Como resultado, uma imagem pode ter menos informações de chroma do que informações de luma sem sacrificar a qualidade percebida da imagem. Por exemplo, é comum amostrar os valores de chroma em metade da resolução horizontal dos exemplos de luma. Em outras palavras, para cada dois exemplos de luma em uma linha de pixels, há um exemplo de U e um exemplo de V. Supondo que 8 bits sejam usados para codificar cada valor, um total de 4 bytes são necessários para cada dois pixels (dois Y', um U e um V), para uma média de 16 bits por pixel, ou 30% menos do que a codificação RGB equivalente de 24 bits.

O YUV não é inerentemente mais compacto do que o RGB. A menos que o chroma seja reduzido, um pixel YUV tem o mesmo tamanho de um pixel RGB. Além disso, a conversão de RGB para YUV não é perdida. Se não houver nenhum downsampling, um pixel YUV poderá ser convertido novamente em RGB sem perda de informações. O downsampling torna uma imagem YUV menor e também perde algumas das informações de cor. Se executada corretamente, no entanto, a perda não será perceptuamente significativa.

YUV no vídeo do computador

As fórmulas listadas anteriormente para YUV não são as conversões exatas usadas no vídeo digital. O vídeo digital geralmente usa uma forma de YUV chamada Y'CbCr. Essencialmente, Y'CbCr funciona dimensionando os componentes YUV para os seguintes intervalos:

Componente Intervalo
Y' 16–235
Cb/Cr 16 a 240, com 128 representando zero

 

Esses intervalos pressupõem 8 bits de precisão para os componentes Y'CbCr. Aqui está a derivação exata de Y'CbCr, usando a definição BT.601 de luma:

  1. Comece com valores RGB no intervalo [0...1]. Em outras palavras, preto puro é 0 e branco puro é 1. É importante ressaltar que esses valores são RGB não lineares (corrigidos por gama).

  2. Calcule o luma. Para BT.601, Y' = 0,299R + 0,587G + 0,114B, conforme descrito anteriormente.

  3. Calcule os valores intermediários de diferença de chroma (B - Y') e (R - Y'). Esses valores têm um intervalo de +/- 0,886 para (B - Y') e +/- 0,701 para (R - Y').

  4. Dimensione os valores de diferença de chroma da seguinte maneira:

    Pb = (0,5 / (1 - 0,114)) × (B - Y')

    Pr = (0,5 / (1 - 0,299)) × (R - Y')

    Esses fatores de dimensionamento são projetados para dar a ambos os valores o mesmo intervalo numérico, +/- 0,5. Juntos, eles definem um espaço de cores YUV chamado Y'PbPr. Esse espaço de cor é usado em vídeo de componente analógico.

  5. Dimensione os valores Y'PbPr para obter os valores finais de Y'CbCr:

    Y' = 16 + 219 × Y'

    Cb = 128 + 224 × Pb

    Cr = 128 + 224 × Pr

Esses últimos fatores de dimensionamento produzem o intervalo de valores listados na tabela anterior. É claro que você pode converter RGB diretamente em Y'CbCr sem armazenar os resultados intermediários. As etapas são listadas separadamente aqui para mostrar como Y'CbCr deriva das equações yuv originais fornecidas no início deste artigo.

A tabela a seguir mostra valores RGB e YCbCr para várias cores, novamente usando a definição BT.601 de luma.

Cor R G B Y' Cb Cr
Preto 0 0 0 16 128 128
Vermelho 255 0 0 81 90 240
Verde 0 255 0 145 54 34
Azul 0 0 255 41 240 110
Ciano 0 255 255 170 166 16
Magenta 255 0 255 106 202 222
Amarelo 255 255 0 210 16 146
Branca 255 255 255 235 128 128

 

Como mostra esta tabela, Cb e Cr não correspondem a ideias intuitivas sobre cor. Por exemplo, branco puro e preto puro contêm níveis neutros de Cb e Cr (128). Os valores mais altos e mais baixos para Cb são azul e amarelo, respectivamente. Para Cr, os valores mais altos e mais baixos são vermelho e ciano.

Para obter mais informações

Tipos de mídia de vídeo

Tipos de mídia