# YCoCg

The YCoCg color model is the color space formed from a simple transformation of an associated RGB color space into a luma value (denoted as Y) and two chroma values called chrominance green (Cg) and chrominance orange (Co). It is supported in video and image compression designs such as H.264/MPEG-4 AVC, HEVC, JPEG XR, and Dirac.[1] It is simple to compute, has good transform coding gain, and can be losslessly converted to and from RGB with fewer bits than are needed with other color models. A reversible scaled version, YCoCg-R, is used in Display Stream Compression.

Original image above and representation of the individual components Y, chrominance green Cg and chrominance orange Co.

## Properties

Advantages the YCoCg color model has over the YCbCr color model are simpler and faster computation, better decorrelation of the color planes to improve compression performance, and exactly lossless invertibility.[2][3]

## Conversion with the RGB color model

The three values of the YCoCg color model are calculated as follows from the three color values of the RGB color model:

${\displaystyle {\begin{bmatrix}Y\\Co\\Cg\end{bmatrix}}={\begin{bmatrix}{\frac {1}{4}}&{\frac {1}{2}}&{\frac {1}{4}}\\{\frac {1}{2}}&0&-{\frac {1}{2}}\\-{\frac {1}{4}}&{\frac {1}{2}}&-{\frac {1}{4}}\end{bmatrix}}\cdot {\begin{bmatrix}R\\G\\B\end{bmatrix}}}$

The values of Y are in the range from 0 to 1, while Co and Cg are in the range of −0.5 to 0.5, as is typical with "YCC" color models such as YCbCr. For example, pure red is expressed in the RGB system as (1, 0, 0) and in the YCoCg system as (1/4, 1/2, −1/4).[2][3] However, since the coefficients of the transformation matrix are simple binary fractions, it is easier to compute than other YCC transformations. For RGB signals with bit depth n, either the resulting signals would then be rounded to n bits or would ordinarily be n+2 bits when processing data in this form (although n+1 bits would be sufficient for Co).

The inverse matrix converts from the YCoCg color model back to the RGB color model:

${\displaystyle {\begin{bmatrix}R\\G\\B\end{bmatrix}}={\begin{bmatrix}1&1&-1\\1&0&1\\1&-1&-1\end{bmatrix}}\cdot {\begin{bmatrix}Y\\Co\\Cg\end{bmatrix}}}$

To perform the inverse conversion, only two additions and two subtractions are necessary, without real-valued coefficients, by implementing it as:

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


## The lifting-based YCoCg-R variation

A scaled version of the transformation, sometimes called YCoCg-R (where the "-R" refers to reversibility), can be implemented efficiently with a reduced bit depth. The scaled version uses a lifting scheme to make it exactly invertible while minimizing the bit depth of the three color components. For RGB signals with bit depth n, the bit depth of the Y signal when using YCoCg-R will be n and the bit depth of Co and Cg will be n+1, as contrasted with ordinary YCoCg which would need n+2 bits for Y and Cg and n+1 bits for Co.

Here, possible values for Y are still in [0, 1], while possible values for Co and Cg are now in [-1, 1].

The conversion from RGB to YCoCg-R is:

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


The conversion from YCoCg-R to RGB is then:

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


## Efficiency gains

The use of YCoCg color space to encode RGB video in HEVC screen content coding found large coding gains for lossy video, but minimal gains when using YCoCg-R to losslessly encode video.[4]

## References

1. ^ "Dirac Specification" (PDF). BBC. p. 136. Archived from the original (pdf) on 2015-05-03. Retrieved 2010-05-04.
2. ^ a b "YCoCg: A Color Space with RGB Reversibility" (ppt). University of Texas at Arlington. Retrieved 2010-05-02.
3. ^ a b Yair Moshe. "H.264 Amendment: Fidelity Range Extensions" (PDF). Signal and Image processing Lab (SIPL), Technion Israel Institute of Technology. p. 15. Archived from the original (pdf) on 2014-10-06. Retrieved 2010-05-02.
4. ^ Shan Liu; Xiaozhong Xu; Shawmin Lei; Kevin Jou (September 2015). "Overview of HEVC extensions on screen content coding". p. 8.