Chromaticity.gif (2862 bytes) Chromaticity Diagrams  Lab Report
CIE 1931 Chromaticity Diagram (2-degree standard observer)
ScreenChromatiticy.jpg (41796 bytes)

The purpose of this project is to demonstrate how to display a 1931 CIE chromaticity chart, as well as the transformations introduced in 1960 and 1976.  In addition, the charts can be displayed using either the 1931 2-degree standard observer, or the 1964 10-degree standard observer, and attempts to explain the difference between standard observers.

Standard Observer. The CIE 1931 "Standard Observer" is for a 2-degree field of observation based on tables of Guild and Wright.  The CIE 1964 "Standard Observer" is for a 10-degree field from the work of Stiles and Burch, and Speranskaya.  The experiments leading to the 1931 standard observer were performed using only the fovea, which covers about a 2-degree angle of vision.   The 1964 supplementary standard observer was based on color-matching experiments using a 10-degree area on the retina. The observers were instructed to ignore the central 2-degree spot.  The supplementary 1964 standard observer is recommended when visual perception of more than about 4-degrees is desired.

CIE standard observers are averages based on experiments with small numbers (~15-20) of people with normal color vision.   No real observer is probably exactly like the CIE standard observer.  See [Judd75, pp. 153-157] or [Billmeyer81, pp.42-45].  According to a Usenet Post, Danny Rich comments that  "the 1964 (ten-degree field) observer had about 50 observers but the 1931 (two-degree field) only had about a dozen.  The 1964 work included a few foreign post-doctoral fellows but the early work included only Englishmen from the region near to London."

According to [Foley96, p. 580], the 1964 tabulation is not generally useful in computer graphics since it emphasizes larger areas of constant color than are normally found in graphics.

The diagrams below, which can be viewed on the "Standard Observer" tab in the Chromaticity program, are the correct size when the program is properly calibrated.

CIE 1931 2-Degree Field of View

CIE 1964 10-Degree Field of View

2Degrees.jpg (1794 bytes) 10Degrees.jpg (6988 bytes)

For additional information about the CIE 1931 and 1964 observers see [Malacara2002, p. 36], [Judd75, p. 155] or [Billmeyer81, p. 42].

Color Matching Functions.  A set of Color Matching Functions was defined for both the 1931 and 1964 Standard Observers.  The 1-nanometer definitions for both of these Standard Observers can be found in the files, cxyz31_1.txt and cxyz64_1.txt, at [CIE Standards,], or tabulated in [Wyszecki82].

The 1-nm tabulations of the CIE color matching functions are given to seven significant figures. But according to [Wyszecki82, p. 131] "the large number of significant figures used to define the color-matching functions must not be construed as being proof that the experimental color-matching data, on which the tabulated values are based, have a comparable inherent precision.  Visual color matching is far from being that precise." But with all this precision, and with a computer, the chromaticity coordinates can be computed directly from the color matching functions instead of using the separate tabulations as in the past.

The graph of the CIE 1931 Color Matching Functions is shown below:

1931ColorMatch.jpg (57993 bytes)

An article by Hugh Fairman et al provide details about "How the CIE 1931 Color-Matching Functions Were Derived from Wright-Guild Data" (Vol 22, No 1, Feb 1997, Color Research and Application).

The curves for the CIE 1964 Color Matching Functions are only slightly different from the curves shown above or [Billmeyer81, p. 44].  See also [Malacara2002, p. 55].

Also see "Derivation of the 1964 CIE 10-degree XYZ Colour-Matching Functions and Their Applicability in Photometry" in Vol. 26, No. 1, Feb 2001, Color Research and Application.

Chromaticity Diagrams

CIE 1931 xy Chromaticity Diagram

CIE1931.jpg (10374 bytes)
The horseshoe line is the spectral locus.
The line connecting the endpoints of the horeshoe
is known as the non-spectral "line of purples."

In terms of the tristimulus values X, Y and Z:
x = X / (X + Y + Z)
y = Y / (X + Y + Z)
z = Z / (X + Y + Z)
x + y + z = 1

See [Fortner97, pp. 95-100, 102-116], or [Malacara2002, Chapter 4.]

The representation of this CIE diagram gives an undue proportion to the green area.  Various transformations of the original 1931 CIE Chromaticity Diagram have been proposed to correct this distortion and to yield approximately uniform chromaticity spacing.

Ideally, areas of least perceptible differences should be circles but due to non-uniformity of chromaticity diagrams all these areas turn out to be ellipses, which vary in size over the different parts of the diagram.  Often the MacAdam discrimination ellipses are plotted on the CIE uv uniform chromaticity diagram.   [Chamberlin80, p. 67-68]

According to [Fortner97, p. 104] the terms dominant wavelength and purity often used in describing colors in a chromaticity diagram express the concepts of hue and saturation.

Note: No output device can generate an accurate image of the CIE diagram since output devices use a fixed number of phosphors or pigments (usually three or four) and no fixed number of pigments can generate all observable colors.

1960 CIE uv Chromaticity Diagram

CIE1960.jpg (8362 bytes)

Conversion of 1931 xy coordinates to 1960 uv coordinates:
u = 4x / (-2x + 12y + 3)
v = 6y / (-2x + 12y + 3)

In terms of the tristimulus values X, Y and Z:
u = 4X / (X + 15Y +3Z)
v = 6Y / (X + 15Y + 3Z)

Conversion of 1960 uv coordinates to 1931 xy coordinates:
x = 3u / (2u - 8v + 4)
y = 2v / (2u - 8v + 4)

See [Agoston87, p. 240], [Judd75, p. 296], [Billmeyer81, p. 57].

This 1960 formula "crushes" all yellow, brown, orange and red colors into a relatively small area of the diagram between the achromatic point and the spectrum locus.  This area should be as large as possible because of the importance of these colors in food, oil, paint, and other industries.  [Chamerlin80, p. 60]  A further improvement was made in the 1976 u'v' diagram:

1976 CIE u'v' Chromaticity Diagram

CIE1976.jpg (10656 bytes)
Conversion of 1976 u'v' coordinates to 1931 xy coordinates:

x = 9u' / (6u' - 16v' + 12)
y = 4v' / (6u' - 16v' + 12)
z = (-3u' - 20v' + 12) / (6u' - 16v' + 12)

For conversion from 1960 to 1976 coordinates:
u' = u
u' = 4x / (-2x + 12y + 3)
u' = 4X / (X + 15Y +3Z)

v' = 3v/2
v' = 9Y / (X + 15Y + 3Z)
v' = 9y / (-2x + 12y + 3)

w' = (-6x + 3y + 3) / (-2x + 12y + 3)

[Chamberlin80, p. 60], [Billmeyer81, p. 58], [Hunt87, Appendix 6, p. 197].

The advantage of the 1976 diagram is that the distance between points is now approximately proportional to the perceived color difference, something definitely not true in the 1931 diagram.  Historical inertia has won out over technical superiority:   the 1976 diagram is not used as much as the original 1931 diagram.  [Fortner97, p. 101]

Chromaticity Coordinates of Phosphors.

Table 1. Chromaticity Coordinates of Various Phosphors





White Point










Short-Persistence 0.61 0.35 0.29 0.59 0.15 0.063 N/A N/A [Foley96, p. 583]
Long-Persistence 0.62 0.33 0.21 0.685 0.15 0.063 N/A N/A [Foley96, p. 583]
NTSC 0.67 0.33 0.21 0.71 0.14 0.08

Illuminant C


CCIR 601-1 is the old NTSC standard. Now called Rec 601-1.

EBU 0.64 0.33 0.30 0.60 0.15 0.06

Illuminant D65

(all monitors except 21" Mitsubishi p/n 65532)
0.625 0.340 0.275 0.605 0.150 0.065

9300 K

[Dell, E-mail, 12 Jan 99]
SMPTE 0.630 0.340 0.310 0.595 0.155 0.070

Illuminant D65

P22 phosphor in NEC Multisync C400 0.610 0.350 0.307 0.595 0.150 0.065 0.280 0.315 [NEC98]
9300 K
Gamma = 2.2
P22 phosphor in KDS VS19 0.625 0.340 0.285 0.605 0.150 0.065 0.281 0.311  
High Brightness LEDs 0.700 0.300 0.170 0.700 0.130 0.075 0.310 0.320 Nichia Corporation

Also, see the Phosphor Handbook.

Table 2. Standard White Points:   Chromaticity and Color Temperature



CIE 1931 CIE 1964




xw yw
Illuminant A 2856 0.44757 0.40745 0.4512 0.4059 [Wyszecki82, p 139]
[Agoston87, p. 103]
Illuminant B 4874 0.34842 0.35161 0.3498 0.3527 [Wyszecki82, p 139]
[Agoston87, p. 103]
Illuminant C 6774 0.31006 0.31616 0.3104 0.3191 [Wyszecki82, p 139]
[Agoston87, p. 103]
Illuminant D65 6504 0.3127 0.3291 0.3138 0.3310 [Walker98]
[Agoston87, p. 103]
Illuminant D65 6504 0.312713 0.329016 - - [CICA98, 5.3]
Direct Sunlight 5335 0.3362 0.3502 - - [Agoston87, p. 103]
Light from overcast sky 6500 0.3134 0.3275 - - [Agoston87, p. 103]
Light from north sky
on a 45-degree plane
10,000 0.2773 0.2934 - - [Agoston87, p. 103]
Illuminant E 5400 1/3 1/3 1/3 1/3 [Wyszecki82, p 139]
[Agoston87, p. 103]

Maxwell Triangle and Color Gamut

In a Maxwell Triangle colors from three additive primaries are mixed in all possible combinations.  This is explained in more detail in the Maxwell Triangle Lab Report.

The chromaticity coordinates of the RGB phosphors define a Maxwell Triangle (or gamut) of the possible display colors for a CRT monitor.   Showing the gamut correctly for various color spaces is usually not possible on a single display monitor since the gamuts are slightly different and some of the colors cannot be accurately represented.  A gamut can be approximated, however, such as the SMPTE gamut shown below in the various Chromaticity Diagrams:

SMPTE Gamut in 1931 CIE xy Chromaticity Diagram

CIE1931SMPTE.jpg (12740 bytes)


SMPTE Gamut in 1960 CIE uv Chromaticity Diagram

CIE1960SMPTE.jpg (9344 bytes)


SMPTE Gamut in 1976 CIE u'v' Chromaticity Diagram

CIE1976SMPTE.jpg (12097 bytes)

Using the 1931 xy chromaticity coordinates for phosphors with the 1964 10-degree observer is not strictly correct, but is allowed in the Chromaticity program for illustrative purposes.

By the way, the "Y" of YUV is the gamma corrected "brightness" component of the colour; the "Y" of the CIE XYZ model is linear (uncorrected) brightness. Both are related, but they are not the same.  

Materials and Equipment

Software Requirements
Windows 95/98/NT/2000
Delphi 3/4/5

Hardware Requirements
800-by-600 display in High Color or True Color Display Mode
(palettes may not be correct in 256 color mode)


  1. Double click on the Chromaticity.EXE icon to start the program.
  2. Select the Standard Observer tab.  Adjust the Viewing Distance[mm] and Screen Diagonal Measurement[mm] to "calibrate" your screen.  (For Americans:  1 inch = 25.4 mm).  Now select either the 2-degree or 10-degree radio group selection to see the difference in the size of the standard observer space.   See the onscreen notes for some additional details.
  3. Select the Color Matching Functions tab and compare how similar the definitions are by picking either the 2-degree or 10-degree radio group selections.  These graphs can be printed or saved to a file (EMF, WMF or BMP formats).
  4. These color matching functions are used to create the "horseshoe" outline of the CIE chromaticity charts.  Select the CIE 1931, CIE 1960 and CIE 1976 tabs to see these various charts.
  5. Experiment with the various settings for the CIE charts:  Show gamut only, Grid lines, Wavelength values.  The Color System combobox defines the gamut.
  6. The Write File button can be used to write any of the CIE charts to disk in BMP or JPG format.  The size of the file can be specified up to 2K by 2K pixels.

When the program starts the "calibration" data for accurately displaying the size of the standard observer field of views is read from the Chromaticity.INI file.

Nearly any change on the screen results in a call to the UpdateEverything method.  This method updates what is displayed on all the tabs -- some work could be deferred until a tab is displayed but optimization was of little concern in this project.   ShowStandardObserverFieldOfView updates the Standard Observer tab.  PlotColorMatchingFunctions plots the Color Matching Functions graph.  PlotChromaticityCharts plots the 1931, 1960 and 1976 chromaticity charts.

The size of the standard observer field-of-view is defined strictly by geometry considerations.  [Add diagram here eventually.]

The TChart component is used to create the color matching functions plot.  The Series_xBar, Series_yBar and Series_zBar series are defined using the AddXY method and the GetColorMatchTriple routine, which is defined in the ColorMatchingFunctions unit.  The ColorMatchingFunctions unit contains the 1-nm definitions of the xBar, yBar and zBar values from the CVRL web page.This unit also has conversions from the 1931 xy definitions to the 1960 uv and 1976 u'v' values.

The AfterDraw method of the TChart object (ChartColorMatchingFunctionsAfterDraw) is used to label the "peaks" on the graphs.  (This seems to have also caused a Delphi 4 conversion problem that has not yet been resolved.

PlotChromaticityCharts calls CIE1931xyChart to plot the 1931 chart and CIEuvChart to plot the 1960 and 1976 charts.  These CIE_Chart routines are defined in the CIEChromaticity unit and create a bitmap of the specified size with the specified chart.  REMEMBER to free the bitmaps created by these routines.

The MapWorldToPixel unit is a simple "pantograph" that maps world coordinates to pixel coordinates.  This works well for the actual points in the CIE charts, but is somewhat of a pain when trying to add annotation labels. 

The CIE_Chart routine first draw the horseshoe outline in red in 1-nm steps using either xyChromaticityCoordiantes or uvChromaticityCoordinates routines (defined in the ColorMatchingFunctions unit).  After the outline is drawn, each scanline is considered in turn.  The left and right "sides" of the chart are established and each pixel is then colored with a call to the XYZtoRGB routine (defined in the XYZtoRGBconversion unit).   The pixel is only colored if the full chart is shown, or if the point is InsideGamut, which is a routine defined in XYZtoRGBconversion.

After coloring all the points -- pixel by pixel -- the grid lines and spectral curve with annotations are added if the corresponding checkboxes are checked.

The ShowAnnotations routine in the CIEChromaticity unit draws lines and annotation marks in an "appropriate" way.  This will be the subject of a future Lab Report in the Graphics section.

Some may want to apply a gamma correction to the generated images -- I find that gamma = 1.0 results in acceptable images.  Look at the variety of links on efg's Color Reference Library page about gamma correction.  Use gamma = 0.0 to create a black/white mask of these diagrams.

Find postscript code by Gernot Hoffmann to create the CIE chromaticity chart on this page: 

The CIE Chromaticity Diagram is quite important in understanding a number of color science concepts.



[Agoston87] George A. Agoston,
Color Theory and Its Application in Art and Design,
Springer-Verlag, 1987.
p. 240:  CIE 1960
[Billmeyer81] Fred W. Billmeyer, Jr. and Max Saltzman,
Principles of Color Technology (2nd edition),
John Wiley, 1981.
p. 42: 2-degree versus 10-degree standard observer
p. 58: CIE 1976
[Chamberlin80] G.J. Chamberlin and D.G. Chamberlin
Colour:  Its Measurement, Computation and Application,
Heyden & Son Ltd, 1980.
pp. 60-61:  CIE 1960 and 1976 formulas
[efg99] efg's Color Reference Library
[Foley96] James D. Foley, et al,
Computer Graphics Principles and Practice (2nd edition in C),
Addision-Wesley, 1996.  US  UK  DE
p. 579-580:  CIE Chromaticity Diagram
p. 583:  Short- and Long-persistence phosphors
[Fortner97] Brand Fortner and Theodore E. Meyer,
Number by Colors:  A Guide to Using Color to Understand Technical Data
Springer-Verlag, 1997.   Excellent introduction to color.
[Hoffmann02] Gernot Hoffmann's CIE Color Space
[Hunt87] R. W. G. Hunt,
Measuring Colour
John Wiley & Sons, 1987.
[Judd75] Deane B. Judd and Gunter Wyszecki,
Color in Business, Science and Industry (3rd edition),
John Wiley, 1975.
p. 296:  CIE 1960
Daniel Malacara,
Color Vision and Colorimetry:  Theory and Applications,
SPIE Press, 2002
[Poynton98] Poynton Color FAQ, 
[Young] Rendering Spectra 
[Walker96] Walker, John, Colour Rendering of Spectra, April 1996.
Mitchell N Charity's comments
about this article.
[Wyszecki82] Wyszecki, Günter and W.S. Stiles,
Color Science -- Concepts and Methods, Quantitative Data and Formula,
John Wiley, 1982.   US  UK  DE
pp. 725-737 for CIE 1931 2-degree observer data
pp. 738-751 for CIE 1964 10-degree observer data

Color Matching Functions, CIE Chromaticity Diagrams, CIE Standard Observer, wavelength[nm], Maxwell Triangle, xyz Chromaticity Coordinates, XYZ color primaries, RGB Coordinates, Bitmap.Scanline,  TChart, Cramer's Rule, MulDiv, point in triangle algorithm, InsideGamut, TSimplePantograph, screen calibration, gamma correction, ShowAnnotation, Color System, EBU, NTSC, SMPTE, White Point

Delphi 3/4/5 Source and EXE (343 KB):  Chromaticity.ZIP

Thanks to Reiner from Startek Technology Pty Ltd in Australia for assistance in the D3-to-D5 TChart conversion.  (Jan 2001)

Chromaticity diagrams from this program appeared in the June 2000 revision of the Finnish book, Insinöörin (AMK) fysiikka (Physics for Engineers), by Hannu Peltonen, Juha Perkkio, and Kari Vierinen and published by Lahden Teho-Opetus, Inc. New edition expected in May 2002.

Updated 13 Jul 2009
Since 1 Nov 1998