The **YCoCg** color model, also known as the **YCgCo** 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, VVC, 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 with even lower bit depth, **YCoCg-R**, is also supported in most of these designs and is also used in Display Stream Compression. The more complete definition with variable bit depths of Y and chrominance values is given in ITU-T H.273.

The earliest documents (circa 2003) referred to this color model as YCoCg. It was adopted in an international standard for the first time in H.264/AVC (in its second edition professional extensions project), which had primarily been designed to use the YCbCr color model. When it was adopted it was noted that the Co component carried the deviation toward red and was thus more similar to Cr than Cb, so the signal assignment and the naming was switched in the standard, resulting in the YCgCo alternative name (YCgCo is used in ITU-T H.273).

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]}

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

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:

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

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

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;
```

(All divisions are truncating, as in C. The forward transformation may be adapted to produce a similar implementation of YCoCg.)

The screen content coding extensions of the HEVC standard and the VVC standard include an adaptive color transform within the residual coding process that corresponds with switching the coding of RGB video into the YCoCg-R domain.

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]}

- Henrique Malvar and Gary Sullivan, "Transform, Scaling & Color Space Impact of Professional Extensions". Moving Picture Experts Group and Video Coding Experts Group document JVT-H031, JVT 8th meeting, Geneva, May 2003.
- Henrique Malvar and Gary Sullivan, "YCoCg-R: A color space with RGB reversibility and low dynamic range". Moving Picture Experts Group and Video Coding Experts Group document JVT-I014, JVT PExt Ad Hoc Group Meeting: Trondheim, Norway, July 2003.
- Shijun Sun, "Residual Color Transform Using YCoCg-R". Moving Picture Experts Group and Video Coding Experts Group document JVT-L014, 12th JVT meeting: Redmond, Washington, United States, July 2004.
- Woo-Shik Kim, Dmitry Birinov, and Dae-Sung Cho, Hyun Mun Kim (Multimedia Lab, Samsung AIT), "Enhancements to RGB coding in H.264/MPEG-4 AVC FRExt". Video Coding Experts Group document VCEG-Z16, 26th VCEG meeting: Busan, Korea, April 2005.
- Henrique S. Malvar, Gary J. Sullivan, and Sridhar Srinivasan, "Lifting-based Reversible Color Transformations for Image Compression",
*SPIE Applications of Digital Image Processing XXXI, Proc. SPIE*, San Diego, California, Vol. 7073, paper 7073-07, August 2008. - P. Agawane and K. R. Rao (Multimedia Processing Lab, University of Texas at Arlington), "Implementation and evaluation of residual color transform for 4:4:4 lossless RGB coding". International Conference on Recent Advances in Communication Engineering, Hyderabad, India, December, 2008.
- Tilo Strutz, "Multiplierless Reversible Colour Transforms and their Automatic Selection for Image Data Compression."
*IEEE Transactions on Circuits and Systems for Video Technology*, Vol. 23, No. 7, pp. 1249–1259, July 2013. - Tilo Strutz and Alexander Leipnitz, "Reversible Colour Spaces without Increased Bit Depth and Their Adaptive Selection."
*IEEE Signal Processing Letters*, Vol. 22, No. 9, pp. 1269–1273, September 2015.