Luma and chroma
The YCbCr transform splits a color into the luma , a weighted sum of R, G and B, and two color differences and :
Edges, texture and text live almost entirely in . The chroma channels mostly contain large, smooth regions, because object colors change much less often than shading does. The visual system matches this: its resolution for color differences is several times lower than for brightness.
Subsampling schemes
The chroma channels are stored at a reduced resolution, one value per block (here the block average). The notation describes a region 4 pixels wide and 2 rows high: luma samples per row, chroma samples in the first row and additional ones in the second.
- 4:4:4: no subsampling.
- 4:2:2: half horizontal resolution, blocks. Common in professional video.
- 4:2:0: half resolution in both directions, blocks. The default for JPEG and most video.
- 4:1:1: a quarter of the horizontal resolution, blocks.
With blocks, the number of stored values per pixel drops from 3 to
To display the image, the decoder upsamples the chroma channels back to full size, by repeating each value (nearest neighbor) or by interpolating between block centers (bilinear), and converts back to RGB.
Try this
- Compare the landscape at 4:2:0 with the original. Can you find any difference without zooming?
- Switch “reduce” to luma Y with the same scheme. It saves less data, but the image gets visibly blurry and blocky.
- Try 8 × 8 blocks on chroma. Zoom in: color bleeds across edges, while the shapes stay sharp.
- Open the colored text at 4:2:0 and zoom to 4×. Red on blue and magenta on green suffer most, black on white not at all.
- Look at the and channels. In 8 × 8 mode they are coarse blocks, yet the image still looks detailed.
- Compare nearest-neighbor and bilinear upsampling at 4 × 4 blocks: blocky versus soft color fringes.
- The zone plate is gray, so its chroma is constant. Chroma subsampling changes nothing, luma subsampling destroys it.