YCoCg

O modelo de cores YCoCg é o espaço de cores formado por uma transformação simples de um espaço de cores RGB associado a um valor de luma (denotado como Y) e dois valores de cromados chamados verde de crominância (Cg) e laranja de crominância (Co). Ele é suportado em projetos de compressão de vídeo e imagem como H.264 / MPEG-4 AVC, HEVC, JPEG XR e Dirac, já que é simples de calcular, tem um bom ganho de codificação de transformação e pode ser convertido sem perdas para e de RGB com menos bits do que os necessários com outros modelos de cores.

Propriedades
As vantagens que o modelo de cores YCoCg tem sobre o modelo de cores YCbCr são cálculos mais simples e rápidos, melhor correlação entre os planos de cores para melhorar o desempenho de compactação e a invertibilidade sem perdas.

Conversão com o modelo de cores RGB
Os três valores do modelo de cores YCoCg são calculados da seguinte forma a partir dos três valores de cores do modelo de cores RGB:


Os valores de Y estão na faixa de 0 a 1, enquanto Cg e Co estão na faixa de -0,5 a 0,5, como é típico em modelos de cor “YCC”, como YCbCr. Por exemplo, vermelho puro é expresso no sistema RGB como (1, 0, 0) e no sistema YCgCo como (1/4, – 1/4, 1/2 ) .. No entanto, desde os coeficientes da matriz de transformação são frações binárias simples, é mais fácil computar do que outras transformações YCC. Para sinais RGB com profundidade de bits n, os sinais resultantes seriam então arredondados para n bits ou normalmente seriam n + 2 bits ao processar dados nesta forma (embora n + 1 bits sejam suficientes para Co).

A matriz inversa é convertida do modelo de cores YCoCg de volta para o modelo de cores RGB:


Para realizar a conversão inversa, são necessárias apenas duas adições e duas subtrações, sem coeficientes reais, implementando-a como:

tmp = Y – Cg;
R = tmp + Co;
G = Y + Cg;
B = tmp – Co;

A variação YCoCg-R baseada em elevação
Uma versão escalonada da transformação, às vezes chamada de YCoCg-R (onde o “-R” se refere à reversibilidade), pode ser implementada eficientemente com uma profundidade de bits reduzida. A versão em escala usa um esquema de elevação para torná-lo exatamente invertido, minimizando a profundidade de bits dos três componentes de cor. Para sinais RGB com profundidade de bits n, a profundidade de bits do sinal Y ao usar YCoCg-R será n e a profundidade de bits de Co e Cg será n + 1, em contraste com YCoCg comum que precisaria de n + 2 bits para Y e Cg e n + 1 bits para o Co.

Aqui, os valores possíveis para Y ainda estão em [0, 1], enquanto os valores possíveis para Co e Cg estão agora em [-1, 1].

A conversão de RGB para YCoCg-R é:

Co = R – B;
tmp = B + Co / 2;
Cg = G – tmp;
Y = tmp + Cg / 2;
A conversão de YCoCg-R para RGB é então:

tmp = Y – Cg / 2;
G = Cg + tmp;
B = tmp – Co / 2;
R = B + Co;