Sistema de cores YUV

YUV é um sistema de codificação de cores normalmente usado como parte de um pipeline de imagens coloridas. Ele codifica uma imagem colorida ou vídeo levando em consideração a percepção humana, permitindo largura de banda reduzida para componentes de crominância, permitindo tipicamente que os erros de transmissão ou artefatos de compressão sejam mais eficientemente mascarados pela percepção humana do que usando uma representação RGB “direta”. Outras codificações de cores têm propriedades semelhantes, e a principal razão para implementar ou investigar as propriedades do Y′UV seria a interface com a televisão analógica ou digital ou o equipamento fotográfico que esteja em conformidade com certos padrões Y′UV.

O escopo dos termos Y′UV, YUV, YCbCr, YPbPr, etc., às vezes é ambíguo e se sobrepõe. Historicamente, os termos YUV e Y′UV eram usados ​​para uma codificação analógica específica de informações de cores em sistemas de televisão, enquanto o YCbCr era usado para codificação digital de informações de cores adequadas para compressão e transmissão de imagens e vídeo, como MPEG e JPEG. Hoje, o termo YUV é comumente usado na indústria de computadores para descrever formatos de arquivo codificados usando o YCbCr.

O modelo Y′UV define um espaço de cores em termos de um componente de luma (Y ′) e dois de crominância (UV). O modelo de cores Y′UV é usado no padrão de vídeo colorido composto PAL (excluindo PAL-N). Sistemas pretos e brancos anteriores usavam apenas informações de luma (Y ′). As informações de cor (U e V) foram adicionadas separadamente por meio de uma subportadora, de modo que um receptor em preto e branco ainda seria capaz de receber e exibir uma transmissão de imagem colorida no formato nativo em preto-e-branco do receptor.

Y ′ representa o componente luma (o brilho) e U e V são os componentes de crominância (cor); a luminância é denotada por Y e luma por Y ′ – os símbolos primos (‘) denotam compressão gama, com “luminância” significando brilho físico de espaço linear, enquanto “luma” é brilho perceptual (não linear).

O modelo de cores YPbPr usado em vídeo componente analógico e sua versão digital YCbCr usados ​​em vídeo digital são mais ou menos derivados dele, e às vezes são chamados Y′UV. (CB / PB e CR / PR são desvios do cinza nos eixos azul-amarelo e vermelho-ciano, enquanto U e V são diferenças de luminância azul e vermelho-luminância respectivamente.) O espaço de cores Y′IQ usado na televisão analógica NTSC sistema de transmissão está relacionado a ela, embora de uma maneira mais complexa. O espaço de cores YDbDr usado nos sistemas de transmissão de televisão analógica SECAM e PAL-N também está relacionado.

Quanto à etimologia, Y, Y, U e V não são abreviaturas. O uso da letra Y para luminância pode ser rastreada até a escolha das primárias XYZ. Isso se presta naturalmente ao uso da mesma letra na luma (Y ′), que se aproxima de um correlato perceptualmente uniforme de luminância. Da mesma forma, U e V foram escolhidos para diferenciar os eixos U e V daqueles em outros espaços, como o espaço de cromaticidade xey. Veja as equações abaixo ou compare o desenvolvimento histórico da matemática.

História
O YUVV foi inventado quando os engenheiros queriam televisão em cores em uma infraestrutura em preto e branco. Eles precisavam de um método de transmissão de sinal compatível com a TV em preto-e-branco (B & W), podendo adicionar cor. O componente luma já existia como sinal preto e branco; eles adicionaram o sinal UV a isso como uma solução.

A representação UV da crominância foi escolhida em relação aos sinais R e B retos porque U e V são sinais de diferença de cor. Em outras palavras, os sinais U e V dizem à televisão para mudar a cor de um certo pixel sem alterar seu brilho. Ou os sinais U e V dizem ao monitor para tornar uma cor mais brilhante ao custo da outra e quanto ela deve ser mudada. Quanto maior (ou menor quando negativo) os valores de U e V, mais saturado (colorido) o pixel fica. Quanto mais próximos os valores de U e V chegarem a zero, menor será a cor, o que significa que as luzes vermelha, verde e azul ficarão mais igualmente brilhantes, produzindo um pixel mais acinzentado. Este é o benefício de usar sinais de diferença de cor, isto é, em vez de dizer quanto vermelho há a uma cor, ele diz quanto é mais vermelho que verde ou azul. Por sua vez, isso significava que, quando os sinais U e V estariam zero ou ausentes, seria exibida apenas uma imagem em escala de cinza. Se R e B fossem usados, eles teriam valores diferentes de zero, mesmo em uma cena em preto e branco, exigindo todos os três sinais portadores de dados. Isso foi importante nos primórdios da televisão em cores, porque os antigos sinais de TV em preto e branco não tinham sinais U e V presentes, o que significa que a TV em cores apenas a exibia como TV P & B fora da caixa. Além disso, os receptores preto e branco podem receber o sinal Y and e ignorar os sinais de cor U e V, tornando o Y′UV compatível com todos os equipamentos, entrada e saída existentes a preto e branco. Se o padrão de TV a cores não tivesse usado sinais de diferença de cor, isso poderia significar que uma TV em cores produziria cores engraçadas de uma transmissão em preto e branco ou precisaria de circuitos adicionais para traduzir o sinal em preto e branco para colorido. Era necessário atribuir uma largura de banda mais estreita ao canal de crominância, porque não havia largura de banda adicional disponível. Se algumas das informações de luminância chegassem através do canal de crominância (como seria se os sinais de RB fossem usados ​​em vez de sinais UV diferenciais), a resolução em P & B teria sido comprometida.

Conversão de / para RGB
SDTV com BT.601
Os sinais YUV são tipicamente criados a partir de fontes RGB (vermelho, verde e azul). Os valores ponderados de R, G e B são somados para produzir Y ′, uma medida de brilho ou luminância geral. U e V são computados como diferenças escalonadas entre Y ′ e os valores B e R.

O BT.601 define as seguintes constantes:


Y′UV é calculado a partir do RGB da seguinte forma:


As faixas resultantes de Y ′, U e V, respectivamente, são [0, 1], [−Umax, Umax] e [−Vmax, Vmax].

Invertendo a transformação acima converte Y′UV para RGB:


Equivalentemente, substituindo valores para as constantes e expressando-os como matrizes, dá-se estas fórmulas para BT.601:


HDTV com BT.709

Para HDTV, o ATSC decidiu alterar os valores básicos para WR e WB em comparação com os valores previamente selecionados no sistema SDTV. Para HDTV, esses valores são fornecidos por Rec. 709. Essa decisão impactou ainda mais na matriz para a conversão Y′UV↔RGB, de modo que seus valores de membro também são ligeiramente diferentes. Como resultado, com SDTV e HDTV, geralmente há duas representações Y′UV distintas possíveis para qualquer triplo RGB: um SDTV-Y′UV e um HDTV-Y′UV. Isso significa em detalhes que, ao converter diretamente entre SDTV e HDTV, a informação de luma (Y ′) é aproximadamente a mesma, mas a representação da informação de canal de chroma (U & V) precisa de conversão. Ainda na cobertura do espaço de cor CIE 1931, o Rec. O espaço de cores 709 é quase idêntico ao Rec. 601 e abrange 35,9%. Em contraste com este UHDTV com Rec. O ano de 2020 cobre uma área muito maior e ainda veria sua própria matriz definida para YUV / Y′UV.

BT.709 define esses valores de peso:


As matrizes de conversão e fórmulas para o BT.709 são:


Notas
Os pesos usados ​​para calcular Y ′ (linha superior da matriz) são idênticos aos usados ​​no espaço de cores Y′IQ.
Valores iguais de vermelho, verde e azul (isto é, níveis de cinza) produzem 0 para U e V. Preto, RGB = (0, 0, 0), produz YUV = (0, 0, 0). Branco, RGB = (1, 1, 1), produz YUV = (1, 0, 0).
Essas fórmulas são tradicionalmente usadas em televisores e equipamentos analógicos; Equipamentos digitais como HDTV e câmeras de vídeo digitais usam o Y′CbCr.

Aproximações numéricas
Antes do desenvolvimento de processadores de ponto flutuante SIMD rápidos, a maioria das implementações digitais de RGB → Y′UV usava matemática inteira, em particular aproximações de ponto fixo. Aproximação significa que a precisão dos números utilizados (dados de entrada, dados de saída e valores constantes) é limitada e, portanto, uma perda de precisão de aproximadamente o último dígito binário é aceita por quem faz uso dessa opção em um trade-off melhores velocidades de computação.

Nos exemplos a seguir, o operador ”  Denota um deslocamento à direita de uma posição binária b. Para esclarecimento, as variáveis ​​estão usando dois caracteres de sufixo: “u” é usado para a representação final sem sinal, e “t” é usado para o valor intermediário reduzido. Os exemplos abaixo são fornecidos apenas para BT.601. O mesmo princípio pode ser usado para executar operações funcionalmente equivalentes usando valores que fazem uma correspondência aceitável para dados que seguem o BT.709 ou qualquer outro padrão comparável.

Os valores Y conventional são convencionalmente deslocados e escalonados para o intervalo [16, 235] (referido como balanço de estúdio ou “níveis de TV”) em vez de usar toda a faixa de [0, 255] (referido como “full swing” ou “níveis de PC” ”). Esta prática foi padronizada no SMPTE-125M para acomodar overshoots de sinal (“toque”) devido à filtragem. O valor 235 acomoda um overshoot máximo de preto-branco de 255 – 235 = 20, ou 20 / (235 – 16) = 9,1%, que é ligeiramente maior que o overshoot máximo teórico (fenômeno de Gibbs) de cerca de 8,9% do passo máximo. O toe-room é menor, permitindo apenas 16/219 = 7,3% overshoot, o que é menor do que o máximo teórico de 8,9%. É por isso que 16 é adicionado a Y ′ e por que os coeficientes Y in na soma básica somam 220 em vez de 255. Os valores U e V, que podem ser positivos ou negativos, são somados com 128 para torná-los sempre positivos, dando um faixa de estúdio de 16 a 240 para U e V. (Esses intervalos são importantes na edição e produção de vídeo, já que usar o intervalo errado resultará em uma imagem com pretos e brancos “cortados” ou uma imagem de baixo contraste).

Balanço de estúdio para BT.601
Para obter a tradicional representação de 8 bits “swing-studio” do Y′UV para SDTV / BT.601, as seguintes operações podem ser usadas:

1. Transformações básicas de RGB de 8 bits para valores de 16 bits (Y ′: sem sinal, U / V: sinalizado, valores de matriz arredondados de forma que o intervalo Y desired desejado de [16..235] e U / V alcance de [16..240] é alcançado):


2. Escala para baixo (“>> 8”) para 8 bits com arredondamento (“+128”) (Y ′: sem sinal, U / V: sinalizado):


3. Adicione um deslocamento aos valores para eliminar quaisquer valores negativos (todos os resultados são de 8 bits sem sinal):


Balanço completo para BT.601
Para obter uma representação de 8 bits “full-swing” de Y′UV para SDTV / BT.601, as seguintes operações podem ser usadas:

1. Transformação básica de RGB de 8 bits para valores de 16 bits (Y ′: sem sinal, U / V: sinalizado, valores de matriz arredondados para que o intervalo Y′UV desejado de cada [0..255] seja atingido enquanto nenhum estouro pode acontecer):


2. Reduza a escala (“>> 8”) para valores de 8 bits com arredondamento (“+128”) (Y ′: sem sinal, U / V: sinalizado):


3. Adicione um deslocamento aos valores para eliminar quaisquer valores negativos (todos os resultados são de 8 bits sem sinal):


Sistemas de luminância / crominância em geral

A principal vantagem dos sistemas luma / chroma, como o Y′UV, e seus parentes Y′IQ e YDbDr, é que eles permanecem compatíveis com a televisão analógica em preto e branco (em grande parte devido ao trabalho de Georges Valensi). O canal Y sav salva todos os dados gravados pelas câmeras em preto e branco, produzindo um sinal adequado para recepção em monitores monocromáticos antigos. Nesse caso, o U e o V são simplesmente descartados. Se estiver exibindo cor, todos os três canais serão usados ​​e as informações RGB originais poderão ser decodificadas.

Outra vantagem do Y′UV é que algumas das informações podem ser descartadas para reduzir a largura de banda. O olho humano tem pouca sensibilidade espacial à cor: a precisão da informação de brilho do canal de luminância tem muito mais impacto nos detalhes da imagem do que nos outros dois. Entendendo essa deficiência humana, padrões como NTSC e PAL reduzem consideravelmente a largura de banda dos canais de crominância. (A largura de banda está no domínio temporal, mas isso se traduz no domínio espacial quando a imagem é digitalizada.)

Portanto, os sinais U e V resultantes podem ser substancialmente “comprimidos”. Nos sistemas NTSC (Y′IQ) e PAL, os sinais de crominância tinham uma largura de banda significativamente mais estreita do que a da luminância. Versões anteriores do NTSC alternavam rapidamente entre cores específicas em áreas de imagem idênticas para fazê-las aparecer adicionando-se umas às outras ao olho humano, enquanto todos os modernos padrões de vídeo analógicos e até os mais digitais usam subamostragem de cromas gravando as informações de cores de uma imagem em resolução reduzida. Apenas metade da resolução horizontal comparada com a informação de brilho é mantida (denominada subamostragem de croma de 4: 2: 2), e freqüentemente a resolução vertical também é reduzida pela metade (dando 4: 2: 0). O padrão 4: x: x foi adotado devido ao padrão NTSC colorido mais antigo que usava uma subamostragem de croma de 4: 1: 1 (onde a resolução de cor horizontal é dividida enquanto a vertical é resolução total) para que a imagem carregasse apenas trimestre tanta resolução de cor em comparação com a resolução de brilho. Atualmente, apenas equipamentos de alta performance processando sinais não-comprimidos usam uma subamostragem de croma de 4: 4: 4 com resolução idêntica para informações de brilho e cor.

Os eixos I e Q foram escolhidos de acordo com a largura de banda necessária para a visão humana, sendo um eixo que requer a maior largura de banda e o outro (fortuitamente a 90 graus) o mínimo. No entanto, a demodulação I e Q verdadeira era relativamente mais complexa, exigindo duas linhas de atraso analógicas, e os receptores NTSC raramente a usavam.

No entanto, esta conversão de espaço de cores é com perdas, particularmente óbvia em crosstalk da luma para o fio transportador de croma, e vice-versa, em equipamentos analógicos (incluindo conectores RCA para transferir um sinal digital, pois todos eles carregam vídeo composto analógico, que é YUV, YIQ ou mesmo CVBS). Além disso, NTSC e PAL codificaram sinais coloridos de uma maneira que faz com que os sinais de chroma e luma de alta largura de banda se misturem para manter a compatibilidade retroativa com equipamentos de televisão preto e branco, o que resulta em artefatos de rastreamento de pontos e cores cruzadas. Quando o padrão NTSC foi criado na década de 1950, essa não era uma preocupação real, já que a qualidade da imagem era limitada pelo equipamento do monitor, não pelo sinal de largura de banda limitada que estava sendo recebido. No entanto, a televisão moderna de hoje é capaz de exibir mais informações do que aquelas contidas nesses sinais de perda. Para acompanhar as habilidades das novas tecnologias de exibição, foram feitas tentativas desde o final dos anos 70 para preservar mais o sinal Y′UV durante a transferência de imagens, como os conectores SCART (1977) e S-Video (1987).

Em vez de Y′UV, Y′CbCr foi usado como o formato padrão para algoritmos de compressão de vídeo comuns (digitais) como o MPEG-2. A televisão digital e os DVDs preservam seus fluxos de vídeo compactados no formato MPEG-2, que usa um espaço de cores Y′CbCr completo, embora mantendo o processo estabelecido de subamostragem de crominância. O formato de vídeo digital profissional CCIR 601 também usa o Y′CbCr na taxa de subamostragem de cromatismo comum de 4: 2: 2, principalmente para compatibilidade com os padrões de vídeo analógico anteriores. Este fluxo pode ser facilmente misturado em qualquer formato de saída necessário.

Y′UV não é um espaço de cores absoluto. É uma forma de codificar a informação RGB e a cor real exibida depende dos corantes RGB utilizados para exibir o sinal. Portanto, um valor expresso como Y′UV só é previsível se forem usados ​​colorantes RGB padrão (isto é, um conjunto fixo de cromaticidades primárias ou conjunto específico de vermelho, verde e azul).

Além disso, o intervalo de cores e brilho (conhecido como gama de cores) do RGB (seja BT.601 ou Rec.709) é muito menor que o intervalo de cores e brilho permitido pelo Y′UV. Isso pode ser muito importante ao converter de Y′UV (ou Y′CbCr) para RGB, pois as fórmulas acima podem produzir valores RGB “inválidos” – isto é, valores abaixo de 0% ou muito acima de 100% do intervalo (por exemplo, fora do intervalo de 16–235 luma padrão (e faixa de croma de 16–240) para TVs e conteúdo HD, ou fora de 0–255 para definição padrão em PCs). A menos que esses valores sejam tratados, eles geralmente serão “cortados” (isto é, limitados) para o intervalo válido do canal afetado. Isso muda a matiz da cor, o que é muito indesejável, portanto, é, portanto, considerado melhor dessaturar as cores ofensivas de forma que elas caiam dentro da gama RGB. Da mesma forma, quando o RGB em uma determinada profundidade de bit é convertido em YUV na mesma profundidade de bits, várias cores RGB podem se tornar da mesma cor Y′UV, resultando em perda de informações.

Relação com Y′CbCr
Y′UV é frequentemente usado como um termo para YCbCr. No entanto, eles são formatos completamente diferentes com diferentes fatores de escala.

No entanto, a relação entre eles no caso padrão é simples. Em particular, o canal Y é o mesmo em ambos, ambos, Cb e U, são proporcionais a (BY), e ambos, Cr e V, são proporcionais a (RY).