skip to main content

Addition is a chromaticity-independent editing operation, producing the same result in any unbounded linear gamma RGB working space

Addition is a chromaticity-independent editing operation and therefore will produce the same result in any unbounded linear gamma RGB working space. This article shows that adding Rec. 2020 red and green in the unbounded sRGB color space produces the same XYZ color (Rec. 2020 yellow) as adding Rec. 2020 red and green in the Rec. 2020 color space.

As a very relevant aside, many crucially important editing operations are highly chromaticity-dependent. Consequently unbounded sRGB should not be used as a universal color space for image editing.

Written April 2014. Updated August 2014.

This article is part of a series of articles on the limitations of unbounded sRGB as a universal color space for image editing.

Introduction: Addition is a chromaticity independent editing operation

Addition is a chromaticity independent editing operation and therefore will produce the same result in any unbounded linear gamma RGB working space. As an illustration, this article shows that adding Rec. 2020 red and green in the unbounded linear gamma sRGB color space produces the same XYZ color (Rec. 2020 yellow) as adding Rec. 2020 red and green in the Rec. 2020 color space.

As a very relevant aside and assuming a high enough bit depth, the unbounded sRGB color space can be used to encode and display any color. Occasionally a software developer will conclude that therefore unbounded sRGB can be used as a kind of universal color space for image editing. However, unlike addition, many crucially important editing operations are highly chromaticity-dependent, which means that the result of the operation depends on the RGB working space in which the operation is done. Consequently unbounded sRGB should not be used as a universal color space for image editing.

In the text below, "Rec. 2020 red", "Rec. 2020 green", and "Rec. 2020 yellow" refer to the Rec. 2020 color space's reddest red, greenest green, and yellowest yellow. All references to the Rec. 2020 and sRGB color spaces refer to the linear gamma versions of these color spaces. Colors don't add properly in nonlinear color spaces.

High bit depth GIMP 2.9 from git was used to prepare the images in the article. High bit depth GIMP 2.9 is perhaps unusual among image editors because it does allow unbounded ICC profile conversions and image editing. The default GIMP 2.9 from git uses linear gamma RGB values for some editing operations and uses "gamma corrected" RGB values for other editing operations. For this article I used a version of GIMP 2.9 from git that I modified to ensure that all editing operations were done using linear gamma processing. Also and for obvious reasons, I removed clipping code from the Addition blend mode to avoid having out of gamut channel values clipped.

Adding Rec. 2020 red and green

Adding Rec. 2020 red and green in the Rec. 2020 color space

In the Rec. 2020 color space, Rec. 2020 red color space has the floating point RGB values (1.000000, 0.000000, 0.000000).
In the Rec. 2020 color space, Rec. 2020 green has the floating point RGB values (0.000000, 1.000000, 0.000000).
Adding red and green in the Rec. 2020 color space gives Rec. 2020 yellow, which has the floating point RGB values (1.000000, 1.000000, 0.000000).

Adding Rec. 2020 red and green in the unbounded sRGB color space

Expressed as RGB values in the unbounded sRGB color space, Rec. 2020 red is (1.660581, -0.124595, -0.018144).
Expressed as RGB values in the unbounded sRGB color space, Rec. 2020 green is (-0.587709, 1.132939, -0.100573).
In the unbounded sRGB color space, the sum of Rec. 2020 red and Rec. 2020 green is still Rec. 2020 yellow. In the unbounded sRGB color space, Rec. 2020 yellow has the RGB values (1.072872, 1.008343, -0.118717).
If you convert the xcf file back to Rec. 2020 and eyedropper the sum of red and green, you get the Rec. 2020 RGB values for Rec. 2020 yellow, namely, (1.000000, 1.000000, 0.000000).

Conclusion

Addition is a chromaticity independent editing operation

Addition really is a chromaticity dependent editing operation. To illustrate this fact I added Rec. 2020 reddest red and greenest green, first in the Rec. 2020 color space and then in the unbounded sRGB color space. In both cases the resulting color is Rec. 2020 yellowest yellow. The unbounded sRGB channel values for Rec. 2020 reddest red, greenest green, and yellowest yellow look odd because expressing out of gamut colors in the sRGB color space requires using RGB values that are less than 0.0 and/or greater than 1.0.

Many editing operations are not chromaticity independent

Just because adding Rec. 2020's reddest red and greenest green gives the same result in both the Rec. 2020 and the unbounded sRGB color space doesn't mean that unbounded sRGB is suitable for use as a universal color space for image editing. Many crucially important editing operations are not chromaticity independent. For example, multiplying out of gamut colors in the unbounded sRGB color space entirely imaginary and physically impossible colors.

Test files

If you would like to replicate the results, here are the ICC profiles:

  1. sRGB-elle-V4-g100.icc
  2. rec2020-elle-V4-g100.icc