RGB & YUV – Travel across Color Spaces

Let’s talk about Color Spaces, Levels and Ranges.

Levels Ranges & Mapping Schemes

In broadcast environment  RGB (and Y) values are conventionally shifted and scaled to the range [16, 235] referred to as
Narrow Range” = “NR” (aka “Limited Range”, “Low RGB”, “TV“, “Broadcast”, etc.).

In 8 bit representation the boundaries of this range are  [16, 235] , in 10 bit they are [64, 940], in 12 bit [256, 3760] and so on.

Thus, for digital 8 bit RGB and Y data:

  • Reference Black Level is 16 (64 on 10 bit scale),
  • Reference White Level is 235 (940 on 10 bit scale)

The headroom above 235 and the footroom below 16 accommodate signal overshoots (“ringing”) due to filtering and specular highlights.

The U & V signals are just scaled versions of Color Difference signals B-Y and R-Y, so they are bi-polar by definition.

To fit the available [0, 255] range UV signals are centered (after scaling) at mid-range point 128.

Thus, for UV signals Reference White Level Reference Black Level = 128 (512 on 10 bit scale).

In broadcast environment levels from 1 to 254 are available for video, levels 0 and 255 are used exclusively for SDI interface synchronization.

YUV Narrow Range Levels

The [0, 255]  range referred to as “Full Range” = “FR” (aka “High RGB”, “PC“, “CG”, etc) is also widely used for digital RGB interfaces, e.g. HDMI.

For YUV signals the Narrow Range ( [16, 235 Y], [16, 240 UV]) is mandatory; some consumer product use non-standard ”yuvj” [0, 255] color space.

In file based environment all levels from 0 to 255 are available for video (NR and FR) – because there is no need to reserve levels 0 and 255 for synchronization purposes.

To avoid possible confusion, due to the plurality of mapping schemes and bit ranges, the international standardization bodies prefer relative  levels schemes (also used in this post for all math expressions and coefficients):

For Y and RGB: Black = 0, White = 1,
and there is no “legal” levels beyond these limits

For UVBlack = White = 0, Min Limit = -0.5, Max Limit = +0.5.

RGB ⇔ YUV Conversion Matrices

Fundamental RGB to Y conversion coefficients (single column matrices) are defined by the international standards:

RGB to Y Encoding Matrices

UHD in the matrix label means two standards:
BT.2020-NCL (UHD-SDR),
BT.2100-NCL (UHD-HDR & HD-HDR),
HD means BT.709 and SD means BT.601 standard.

All matrices are balanced, i.e. the sums of their coefficients = 1, so the R = G = B = 1 (100% white) input produces Y = 1 (max Y value) output.

For practical applications the RGB to Y gain factors should be  rounded to the appropriate bit depth, and it  is very important to keep Unity Gain principle (sum of 3 coefficient must be exactly 1).

The following RGB ⇔ YUV matrices are just math derivatives of the 3 fundamental column matrices as above.

RGB to YUV Encoding Matrices

Note  the U & V gain factors = 0.5 for the corresponding B & R inputs and UV White Balance (if R=G=B=1, then U=V=0). This is due to the requested mapping scheme:  UV output range is [-0.5, +0.5] centered at 0.0 point.

MathCAD calculated UV coefficients with high accuracy (up to 5 digits after decimal dot). For practical applications they should be rounded to the appropriate bit depth, and it  is very important to keep UV White Balance (sum of 3 coefficients in  UV rows must be exactly zero).

Inverse YUV to RGB matrices require high accuracy in all 3 rows:

YUV to RGB Decoding Matrices

Note the Y to RGB Unity Gain factor – all 1st column coefficients in all 3 matrices are exactly 1.

Also note the U to R and V to B gain factors are 0. In other words, it means that the UV axes of YUV color pace are orthogonal and there are no cross-contributions.

Thus, the U input contributes mainly to B and  not so much to G; similarly the V input contributes mainly to R with some smaller contribution to G.

It should be noted that, in practice, the selected Encoding Color Space (i.e. the selection of RGB to YUV and YUV to RGB matrices) may or may not match Camera Color Primaries and/or Display Color Primaries.

Standards define the matrix coefficients and signal levels in relative units, i.e. [0, 1] or [0%, 100%] for RGB and Y, [-0.5, +0.5] or [-50%, +50%] for UV.

Digital signals are usually defined not in percents, but in 8, 10 or 12 bit levels. Also there are two types of digital signal ranges in use: Full & Narrow.

Next image shows the generic block diagram of the RGB data to YUV data conversion process:

RGB to YUV Conversion Block Diagram

For calculation of 8, 10, 12, etc. bit digital levels it is convenient to use ubiquitous 8 bit values adjusted by the generic scaling parameter BAF:

BAF = BitDepth Adjustment Factor = pow(2, BitDepth – 8).

The coefficients used for conversion of YUV relative levels in percents to Narrow Range (aka “D1”) YUV and Full Range YUV 10 bit data levels are shown below:

Relative YUV Levels to NR 10 bit Conversion
Relative YUV Levels to FR 10 bit Conversion

The 1st column coefficients are 10 bit offsets, 2nd column coefficients are gain factors.

These two sets of coefficients can be used for accurate calculation of  digital YUV levels, e.g. Color Bars Test Pattern levels. They are suitable for any Dynamic Range format and for any Encoding Color Space.

See next:

Tables and numerical examples of reference values, such as Color Bars Reference Levels for a variety of Color Spaces.

Learn more:

See posts in the Video Science Fundamentals category.

Leave a Reply

Your email address will not be published. Required fields are marked *