YCoCg

Il modello di colore YCoCg è lo spazio colore formato da una semplice trasformazione di uno spazio colore RGB associato in un valore luma (indicato con Y) e due valori di crominanza denominati crominanza verde (Cg) e crominanza arancione (Co). È supportato in progetti di compressione di immagini e video come H.264 / MPEG-4 AVC, HEVC, JPEG XR e Dirac, poiché è semplice da calcolare, ha un buon guadagno di codifica delle trasformazioni e può essere convertito senza perdita da e verso RGB con meno bit di quelli necessari con altri modelli di colori.

Proprietà
Vantaggi del modello di colore YCoCg rispetto al modello di colore YCbCr sono il calcolo più semplice e veloce, una migliore decorrelazione dei piani di colore per migliorare le prestazioni di compressione e esattamente l’invertibilità senza perdita di dati.

Conversione con il modello di colore RGB
I tre valori del modello di colore YCoCg sono calcolati come segue dai tre valori di colore del modello di colore RGB:

I valori di Y sono compresi nell’intervallo da 0 a 1, mentre Cg e Co sono compresi nell’intervallo tra -0.5 e 0.5, come tipico dei modelli di colore “YCC” come YCbCr. Ad esempio, il rosso puro è espresso nel sistema RGB come (1, 0, 0) e nel sistema YCgCo come (1/4, – 1/4, 1/2 ). Tuttavia, poiché i coefficienti della matrice di trasformazione sono semplici frazioni binarie, è più facile da calcolare rispetto ad altre trasformazioni YCC. Per i segnali RGB con profondità di bit n, i segnali risultanti sarebbero quindi arrotondati a n bit o sarebbero normalmente n + 2 bit durante l’elaborazione dei dati in questo modulo (sebbene n + 1 bit sarebbe sufficiente per Co).

La matrice inversa viene convertita dal modello di colore YCoCg al modello di colore RGB:


Per eseguire la conversione inversa, sono necessarie solo due aggiunte e due sottrazioni, senza coefficienti a valori reali, implementandola come:
tmp = Y – Cg;
R = tmp + Co;
G = Y + Cg;
B = tmp – Co;

La variazione YCoCg-R basata sul sollevamento
Una versione in scala della trasformazione, talvolta chiamata YCoCg-R (dove “-R” si riferisce alla reversibilità), può essere implementata in modo efficiente con una profondità di bit ridotta. La versione in scala utilizza uno schema di sollevamento per renderlo esattamente invertibile riducendo al minimo la profondità di bit delle tre componenti cromatiche. Per i segnali RGB con bit di profondità n, la profondità di bit del segnale Y quando si utilizza YCoCg-R sarà n e la profondità di bit di Co e Cg sarà n + 1, in contrasto con il normale YCoCg che avrebbe bisogno di n + 2 bit per Y e Cg and n + 1 bit per Co.
Qui, i valori possibili per Y sono ancora in [0, 1], mentre i valori possibili per Co e Cg sono ora in [-1, 1].

La conversione da RGB a YCoCg-R è:
Co = R – B;
tmp = B + Co / 2;
Cg = G – tmp;
Y = tmp + Cg / 2;

La conversione da YCoCg-R a RGB è quindi:
tmp = Y – Cg / 2;
G = Cg + tmp;
B = tmp – Co / 2;
R = B + Co;