#!/usr/bin/env python # coding: utf-8 # # Colour Matching Functions # The colour matching functions are the tristimulus values of monochromatic stimuli of equal radiant power [1] and are at the hearth of the *CIE Colour System*, their creation history has been briefly introduced in the [Spectrum](spectrum.ipynb#Colour-Matching-Functions) notebook. # # [Colour](https://github.com/colour-science/colour/) provides the following spectral sensitivity and colour matching functions: # In[1]: import colour sorted(colour.colorimetry.LMS_CMFS.keys()) # In[2]: sorted(colour.colorimetry.RGB_CMFS.keys()) # In[3]: sorted(colour.colorimetry.STANDARD_OBSERVERS_CMFS.keys()) # > Note: `'cie_2_1931'` and `'cie_10_1964'` are convenient aliases for respectively `'CIE 1931 2 Degree Standard Observer'` and `'CIE 1964 10 Degree Standard Observer'`. # In[4]: sorted(colour.CMFS.keys()) # Most of them are sourced from the [*Colour & Vision Research Laboratory*](http://www.cvrl.org/) database. # ## Tristismulus Space # Colour stimuli can be represented by vectors into a three-dimensionl space called *tristimulus space*. They are usually denoted by boldface letters such as $\textbf{Q}$, $\textbf{R}$, $\textbf{G}$ and $\textbf{B}$ where $\textbf{Q}$ represents a test colour stimulus and $\textbf{R}$, $\textbf{G}$ and $\textbf{B}$ are reserved for the fixed primary stimuli chosen for the colour matching experiment. [2] # # A colour match between an test colour stimulus $\textbf{Q}$ and the additive mixture of the three fixed primary stimuli $\textbf{R}$, $\textbf{G}$ and $\textbf{B}$ is expressed by the following equation: [2] # # $$ # \begin{equation} # \textbf{Q}=R_Q\textbf{R}+G_Q\textbf{G}+B_Q\textbf{B} # \end{equation} # $$ # # where the multipliers $R_Q$,$G_Q$,$B_Q$ measured in terms of the assigned respective units of the $\textbf{R}$, $\textbf{G}$ and $\textbf{B}$ primary stimuli are called the *tristimulus values* of $\textbf{Q}$. # # A monochromatic stimulus $\textbf{Q}_\lambda$ of wavelength $\lambda$ is the quantity $\lbrace P_\lambda d\lambda\rbrace$ that represents the radiant power in the wavelength interval of width $d\lambda$ centered at the wavelength $\lambda$ and can be expressed by the following equation: [2] # # $$ # \begin{equation} # \textbf{Q}_\lambda=R_\lambda\textbf{R}+G_\lambda\textbf{G}+B_\lambda\textbf{B} # \end{equation} # $$ # # where $R_\lambda$,$G_\lambda$,$B_\lambda$ are called the *spectral tristimulus values* of $\textbf{Q}_\lambda$. # # The equation for a colour match involving a monochromatic constituent $\textbf{E}_\lambda$ of the equal energy stimulus $\textbf{E}$ is: # # $$ # \begin{equation} # \textbf{E}_\lambda=\bar{r}(\lambda)\textbf{R}+\bar{g}(\lambda)\textbf{G}+\bar{b}(\lambda)\textbf{B} # \end{equation} # $$ # # where $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ are called the *spectral tristimulus values* of $\textbf{E}_\lambda$. The lowercase notation with an overbar indictates a special set of tristimulus values and is the standard notation for colour matching functions. # In[5]: from colour.plotting import * # In[6]: colour_style(); # In[7]: # Plotting the spectral distribution of a colour stimulus *E* having an # equal energy spectrum. sd = colour.SpectralDistribution( dict((i, 1.) for i in range(360, 830)), name='E') plot_single_sd(sd, bounding_box=[360, 830, 0, 1.5]); # ## $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ Colour Matching Functions # ### Wright & Guild 1931 2° RGB CMFs # *Wright & Guild 1931 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions are derived from the two independent experiments of Wright (1928) and Guild (1931). [3] # # Both determined the chromaticity coordinates of a set of monochromatic stimuli in the wavelength range 400-700 nm using a circular 2° angular subtense bipartite field whose image is centered at the fovea of retina to avoid any participation of rod vision in the measurements. # # The bottom half of the field was illuminated by the test colour stimulus to be matched and the top half was illuminated by the fixed primary stimuli at respective fixed wavelengths of 700 nm, 546.1 nm and 435.8 nm but adjustable intensity. # # The observer would adjust the intensity of each of the three fixed primary stimuli until both halves of the field were colour matched. # # Not all the test colour stimuli could be matched using this technique. For example, matching a yellow test colour stimulus required large amounts of red and green fixed primary stimuli. If the resulting fixed primary stimuli mixture was less yellow than the test colour stimulus, a variable amount of blue fixed primary stimulus could be added to the the test colour stimulus. For these cases, the amount of fixed primary stimulus added to the test colour stimulus was considered as a negative value. # # For example, the test colour stimulus $\textbf{E}_\lambda$ at $\lambda=475$ and fixed primary stimuli values read off at # $\bar{r}(475)=-0.045$, $\bar{g}(475)=0.032$ and $\bar{b}(475)=0.186$ can be expressed with the following equation: [4] # # $$ # \begin{equation} # \textbf{E}_{475}=-0.045\textbf{R}+0.032\textbf{G}+0.186\textbf{B} # \end{equation} # $$ # # The chromaticity coordinates $r(\lambda)$,$g(\lambda)$,$b(\lambda)$ of the monochromatic stimuli can then be calculated: # # $$ # \begin{equation} # r(\lambda)=\cfrac{\bar{r}(\lambda)}{\bar{r}(\lambda)+\bar{g}(\lambda)+\bar{b}(\lambda)}\\ # g(\lambda)=\cfrac{\bar{g}(\lambda)}{\bar{r}(\lambda)+\bar{g}(\lambda)+\bar{b}(\lambda)}\\ # b(\lambda)=\cfrac{\bar{b}(\lambda)}{\bar{r}(\lambda)+\bar{g}(\lambda)+\bar{b}(\lambda)} # \end{equation} # $$ # with # $$ # \begin{equation} # r(\lambda)+g(\lambda)+b(\lambda)=1 # \end{equation} # $$ # # *Wright & Guild 1931 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions have the following range and increments: # In[8]: colour.colorimetry.RGB_CMFS['Wright & Guild 1931 2 Degree RGB CMFs'].shape # In[9]: plot_single_cmfs('Wright & Guild 1931 2 Degree RGB CMFs', legend_location='lower right'); # ### Stiles & Burch 1955 2° RGB CMFs # *Stiles & Burch 1955 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions are the result of a major re-examination of the *CIE* standard by Stiles in the 1950's because of concern about the correctness of the *CIE 1931 2° Standard Observer* data regarding: [5] # # * The luminous efficiency function $V(\lambda)\equiv\bar{y}(\lambda)$ in the visible spectrum ends, especially the blue end. # * The inconsistency between computed and observed colour computation differences of certain titanium pigments. # * The suitability of doing colour matching in large visual fields as used in industrial colour production control. # # In 1955, the *CIE Colorimetry Comittee* decided that the discrepancies between the *CIE 1931 2° Standard Observer* and the new data from the interim report by Stiles (1955), though significant from an experimental aspect were not large enough to modify the standard for practical colorimetry. # # *Stiles & Burch 1955 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions have the following range and increments: # In[10]: colour.colorimetry.RGB_CMFS['Stiles & Burch 1955 2 Degree RGB CMFs'].shape # In[11]: plot_single_cmfs('Stiles & Burch 1955 2 Degree RGB CMFs', legend_location='upper left'); # ### Stiles & Burch 1959 10° RGB CMFs # *Stiles* following the direction recommenced by *CIE Colorimetry Committee* continued his work and focused on large-field colour matching experiments. # # In 1958 the final report of the National Physical Laboratory (N.P.L) colour-matching investigation by Stiles and Burch (1959) proposed the *Stiles & Burch 1959 10° RGB CMFs* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions. [5] # # *Stiles & Burch 1959 10° RGB CMFs* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions have the following range and increments: # In[12]: colour.colorimetry.RGB_CMFS['Stiles & Burch 1959 10 Degree RGB CMFs'].shape # In[13]: plot_single_cmfs('Stiles & Burch 1959 10 Degree RGB CMFs', legend_location='upper left'); # In[14]: # Comparing *Stiles & Burch 1955 2 Degree RGB CMFs* and # *Stiles & Burch 1959 10 Degree RGB CMFs* colour matching functions. plot_multi_cmfs(['Stiles & Burch 1955 2 Degree RGB CMFs', 'Stiles & Burch 1959 10 Degree RGB CMFs']); # ## $\bar{x}(\lambda)$ $\bar{y}(\lambda)$ $\bar{z}(\lambda)$ Colour Matching Functions # ### CIE 1931 2° Standard Observer # *Wright & Guild 1931 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions have negative values that are inconvenient for various reasons: # # * Computation of the $\textbf{R}$,$\textbf{G}$,$\textbf{B}$ tristimulus values of a given stimulus $\textbf{Q}$ defined by a spectral distribution $\lbrace P_\lambda d\lambda\rbrace$ are done according to the following equations: [6] # # $$ # \textbf{R}=\int_{\lambda_a}^{\lambda_b}P_\lambda\bar{r}(\lambda)d\lambda\\ # \textbf{G}=\int_{\lambda_a}^{\lambda_b}P_\lambda\bar{g}(\lambda)d\lambda\\ # \textbf{B}=\int_{\lambda_a}^{\lambda_b}P_\lambda\bar{b}(\lambda)d\lambda # $$ # # This computation involves summing separately products with positive and negative signs and then a final differencing of the sums. # * Computation of photometric quantities like luminance for a given stimulus requires either another direct integration using the luminous efficiency $V(\lambda)$ function or the evaluation of a linear combination of the previously computed tristimulus values. # * Development of direct-reading colorimeters is more difficult because of the sign change. # # Those reasons lead the *CIE* to transform the *Wright & Guild 1931 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions into a new set of functions based on new primary stimuli $X$, $Y$, $Z$: The *CIE 1931 2° Standard Observer* $\bar{x}(\lambda)$,$\bar{y}(\lambda)$,$\bar{z}(\lambda)$ colour matching functions. # # Transformation from *CIE RGB* colourspace $r$,$g$,$b$ chromaticity coordinates to *CIE XYZ* colourspace $x$,$y$,$z$ chromaticity coordinates is expressed as follows: [6] # # $$ # \begin{equation} # x=\cfrac{0.49000r+0.31000g+0.20000b}{0.66697r+1.13240g+1.20063b}\\ # y=\cfrac{0.17697r+0.81240g+0.01063b}{0.66697r+1.13240g+1.20063b}\\ # z=\cfrac{0.00000r+0.01000g+0.99000b}{0.66697r+1.13240g+1.20063b} # \end{equation} # $$ # # Then the $X$, $Y$ and $Z$ tristimulus values are calculated as follows: [6] # # $$ # \begin{equation} # X=\cfrac{x}{y}V,\qquad Y=V,\qquad Z=\cfrac{z}{y}V # \end{equation} # $$ # # where $V$ is the luminance of the stimulus calculated in accordance with the luminous efficiency function $V(\lambda)$. # # Transformation of the monochromatic stimuli chromaticity coordinates $r(\lambda)$,$g(\lambda)$,$b(\lambda)$ into the $\bar{x}(\lambda)$,$\bar{y}(\lambda)$,$\bar{z}(\lambda)$ colour matching functions also uses the above equation: [6] # # $$ # \begin{equation} # \bar{x}(\lambda)=\cfrac{x(\lambda)}{y(\lambda)}V(\lambda),\qquad \bar{y}(\lambda)=V(\lambda),\qquad \bar{z}(\lambda)=\cfrac{z(\lambda)}{y(\lambda)}V(\lambda) # \end{equation} # $$ # # The `colour.RGB_2_degree_cmfs_to_XYZ_2_degree_cmfs` definition is provided for educational purpose to illustrate the transformation from *Wright & Guild 1931 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions into the *CIE 1931 2° Standard Observer* $\bar{x}(\lambda)$,$\bar{y}(\lambda)$,$\bar{z}(\lambda)$ colour matching functions: # In[15]: print(colour.colorimetry.RGB_2_degree_cmfs_to_XYZ_2_degree_cmfs(435)) print(colour.colorimetry.STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'][435]) # The *CIE 1931 2° Standard Observer* $\bar{x}(\lambda)$,$\bar{y}(\lambda)$,$\bar{z}(\lambda)$ colour matching functions have the following range and increments: # In[16]: colour.colorimetry.STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].shape # In[17]: plot_single_cmfs('CIE 1931 2 Degree Standard Observer'); # ### CIE 1964 10° Standard Observer # The *CIE 1964 10° Standard Observer* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions are the result of Stiles and Burch (1959) and Speranskaya (1959) investigations with large-field colour matching experiments. # # Judd, acting for the *CIE* averaged, Stiles and Burch (1959) and Speranskaya (1959) colour matching functions after correcting Speranskaya data for rod intrusion (CIE, 1959). # # Building upon Judd new set of data, the *CIE* following the same general model than for the *CIE 1931 2° Standard Observer* created a new coordinate system. The equations to convert from the $\bar{r}_{10}(\lambda)$,$\bar{g}_{10}(\lambda)$,$\bar{b}_{10}(\lambda)$ colour matching functions to the new $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions are as follows: [7] # # $$ # \begin{equation} # \bar{x}_{10}(\lambda)=0.341080\bar{r}_{10}(\lambda)+0.189145\bar{g}_{10}(\lambda)+0.387529\bar{b}_{10}(\lambda)\\ # \bar{y}_{10}(\lambda)=0.139058\bar{r}_{10}(\lambda)+0.837460\bar{g}_{10}(\lambda)+0.073316\bar{b}_{10}(\lambda)\\ # \bar{z}_{10}(\lambda)=0.000000\bar{r}_{10}(\lambda)+0.039553\bar{g}_{10}(\lambda)+2.026200\bar{b}_{10}(\lambda) # \end{equation} # $$ # # The `colour.RGB_10_degree_cmfs_to_XYZ_10_degree_cmfs` definition is provided for educational purpose to illustrate the transformation from *Stiles & Burch 1959 10° RGB CMFs* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions into the *CIE 1931 2° Standard Observer* $\bar{r}_{10}(\lambda)$,$\bar{g}_{10}(\lambda)$,$\bar{b}_{10}(\lambda)$ colour matching functions: # In[18]: print(colour.colorimetry.RGB_10_degree_cmfs_to_XYZ_10_degree_cmfs(435)) print(colour.colorimetry.STANDARD_OBSERVERS_CMFS['CIE 1964 10 Degree Standard Observer'][435]) # The *CIE 1964 10° Standard Observer* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions have the following range and increments: # In[19]: colour.colorimetry.STANDARD_OBSERVERS_CMFS['CIE 1964 10 Degree Standard Observer'].shape # In[20]: plot_single_cmfs('CIE 1964 10 Degree Standard Observer'); # In[21]: # Comparing *CIE 1931 2 Degree Standard Observer* and # *CIE 1964 10 Degree Standard Observer* colour matching functions. plot_multi_cmfs(['CIE 1931 2 Degree Standard Observer', 'CIE 1964 10 Degree Standard Observer']); # ### CIE 2012 2° Standard Observer # The *CIE 2012 2° Standard Observer* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions are linear transformations of *Stockman & Sharpe 2° Cone Fundamentals* $\bar{l}(\lambda)$,$\bar{m}(\lambda)$,$\bar{s}(\lambda)$ colour matching functions. # # They are recommended by the CIE TC 1-36 technical commitee report (CIE 170-1:2006, 2006) as the new physiologically relevant fundamental *CIE* spectral sensitivity functions. # # The transformation produces colour matching functions similar to the *CIE 1931 2° Standard Observer* $\bar{x}(\lambda)$,$\bar{y}(\lambda)$,$\bar{z}(\lambda)$ colour matching functions and is expressed by the following equations: [8] # # $$ # \begin{equation} # \begin{aligned} # \bar{x}(\lambda)&=1.94735469\bar{l}(\lambda)-1.41445123\bar{m}(\lambda)+0.36476327\bar{s}(\lambda)\\ # \bar{y}(\lambda)&=0.68990272\bar{l}(\lambda)+0.34832189\bar{m}(\lambda)\\ # \bar{z}(\lambda)&=1.93485343\bar{s}(\lambda) # \end{aligned} # \end{equation} # $$ # # The `colour.LMS_2_degree_cmfs_to_XYZ_2_degree_cmfs` definition is provided for educational purpose to illustrate the transformation from *Stockman & Sharpe 2° Cone Fundamentals* $\bar{l}(\lambda)$,$\bar{m}(\lambda)$,$\bar{s}(\lambda)$ spectral sensitivity functions into the *CIE 2012 2° Standard Observer* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions: # In[22]: print(colour.colorimetry.LMS_2_degree_cmfs_to_XYZ_2_degree_cmfs(435)) print(colour.colorimetry.STANDARD_OBSERVERS_CMFS['CIE 2012 2 Degree Standard Observer'][435]) # The *CIE 2012 2° Standard Observer* $\bar{x}(\lambda)$,$\bar{y}(\lambda)$,$\bar{z}(\lambda)$ colour matching functions have the following range and increments: # In[23]: colour.colorimetry.STANDARD_OBSERVERS_CMFS['CIE 2012 2 Degree Standard Observer'].shape # In[24]: plot_single_cmfs('CIE 2012 2 Degree Standard Observer'); # In[25]: # Comparing *CIE 1931 2 Degree Standard Observer* and # *CIE 2012 2 Degree Standard Observer* colour matching functions. plot_multi_cmfs(['CIE 1931 2 Degree Standard Observer', 'CIE 2012 2 Degree Standard Observer']); # ### CIE 2012 10° Standard Observer # The *CIE 2012 10° Standard Observer* colour matching functions are linear transformations of *Stockman & Sharpe 10° Cone Fundamentals* $\bar{l}_{10}(\lambda)$,$\bar{m}_{10}(\lambda)$,$\bar{s}_{10}(\lambda)$ spectral sensitivity functions. # # They are recommended by the CIE TC 1-36 technical commitee report (CIE 170-1:2006, 2006) as the new physiologically relevant fundamental *CIE* colour matching functions. # # The transformation produces colour matching functions similar to the *CIE 1964 10° Standard Observer* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions and is expressed by the following equations: [9] # # $$ # \begin{equation} # \begin{aligned} # \bar{x}_{10}(\lambda)&=1.93986443\bar{l}_{10}(\lambda)-1.34664359\bar{m}_{10}(\lambda)+0.43044935\bar{s}_{10}(\lambda)\\ # \bar{y}_{10}(\lambda)&=0.69283932\bar{l}_{10}(\lambda)+0.34967567\bar{m}_{10}(\lambda)\\ # \bar{z}_{10}(\lambda)&=2.14687945\bar{s}_{10}(\lambda) # \end{aligned} # \end{equation} # $$ # # The `colour.LMS_10_degree_cmfs_to_XYZ_10_degree_cmfs` definition is provided for educational purpose to illustrate the transformation from *Stockman & Sharpe 10° Cone Fundamentals* $\bar{l}_{10}(\lambda)$,$\bar{m}_{10}(\lambda)$,$\bar{s}_{10}(\lambda)$ spectral sensitivity functions into the *CIE 2012 10° Standard Observer* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions: # In[26]: print(colour.colorimetry.LMS_10_degree_cmfs_to_XYZ_10_degree_cmfs(435)) print(colour.colorimetry.STANDARD_OBSERVERS_CMFS['CIE 2012 10 Degree Standard Observer'][435]) # The *CIE 2012 10° Standard Observer* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions have the following range and increments: # In[27]: colour.colorimetry.STANDARD_OBSERVERS_CMFS['CIE 2012 10 Degree Standard Observer'].shape # In[28]: plot_single_cmfs('CIE 2012 10 Degree Standard Observer'); # In[29]: # Comparing *CIE 2012 2 Degree Standard Observer* and # *CIE 2012 10 Degree Standard Observer* colour matching functions. plot_multi_cmfs(['CIE 2012 2 Degree Standard Observer', 'CIE 2012 10 Degree Standard Observer']); # In[30]: # Comparing *CIE 1964 10 Degree Standard Observer* and # *CIE 2012 10 Degree Standard Observer* colour matching functions. plot_multi_cmfs(['CIE 1964 10 Degree Standard Observer', 'CIE 2012 10 Degree Standard Observer']); # ## $\bar{l}(\lambda)$ $\bar{m}(\lambda)$ $\bar{s}(\lambda)$ Spectral Sensitivity Functions # ### Stockman & Sharpe Cone Fundamentals # In 1991, The *CIE* created the CIE TC 1-36 technical commitee with the objective of *establishing a fundamental chromaticity diagram of which the co-ordinates correspond to physiologically significant axes*. [10] # # By application of König’s hypothesis (Protanopes, deuteranoptes lack respectively $L-$ and $M-$cones, the spectral sensitivity of their respectively remaining $M-$ or $L-$cones must be identical to that of the corresponding cone type in normal observers) and using the latest modern data on the spectral sensitivity functions of dichromats, *Stockman* and *Sharpe* (2000) derived the *Stockman & Sharpe Cone Fundamentals* $\bar{l}_{10}(\lambda)$,$\bar{m}_{10}(\lambda)$,$\bar{s}_{10}(\lambda)$ spectral sensitivity functions of the long-wave sensitive ($L-$), medium-wave sensitive ($M-$) and short-wave sensitive ($S-$) cones, measured in the corneal plane for a 10° angular subtense viewing field. [10][11] # # The *Stockman & Sharpe 10° Cone Fundamentals* $\bar{l}_{10}(\lambda)$,$\bar{m}_{10}(\lambda)$,$\bar{s}_{10}(\lambda)$ spectral sensitivity functions are defined as linear combinations of the *Stiles & Burch 1959 10° RGB CMFs* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions expressed by the following relationships: [10] # # $$ # \begin{equation} # \begin{aligned} # \bar{l}_{10}(\lambda)&=\bar{l}_R\cdot\bar{r}_{10}(\lambda)+\bar{l}_G\cdot\bar{g}_{10}(\lambda)+\bar{l}_B\cdot\bar{b}_{10}(\lambda)\\ # \bar{m}_{10}(\lambda)&=\bar{m}_R\cdot\bar{r}_{10}(\lambda)+\bar{m}_G\cdot\bar{g}_{10}(\lambda)+\bar{m}_B\cdot\bar{b}_{10}(\lambda)\\ # \bar{s}_{10}(\lambda)&=\bar{s}_R\cdot\bar{r}_{10}(\lambda)+\bar{s}_G\cdot\bar{g}_{10}(\lambda)+\bar{s}_B\cdot\bar{b}_{10}(\lambda) # \end{aligned} # \end{equation} # $$ # # where $\bar{l}_R$, $\bar{l}_G$ and $\bar{l}_B$ are respectively the $L-$cone sensitvities to the $\textbf{R}$, $\textbf{G}$ and $\textbf{B}$ fixed primary stimuli, $\bar{m}_R$, $\bar{m}_G$ and $\bar{m}_B$ are respectively the $M-$cone sensitvities to the fixed primary stimuli and $\bar{s}_R$, $\bar{s}_G$ and $\bar{s}_B$ are respectively the $S-$cone sensitvities to the fixed primary stimuli. # # The transformation of *Stiles & Burch 1959 10° RGB CMFs* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions to the *Stockman & Sharpe 10° Cone Fundamentals* $\bar{l}_{10}(\lambda)$,$\bar{m}_{10}(\lambda)$,$\bar{s}_{10}(\lambda)$ spectral sensitivity functions is expressed by the following formulas: [10] # # $$ # \begin{equation} # \begin{aligned} # \bar{l}_{10}(\lambda)&=0.192325269\cdot\bar{r}_{10}(\lambda)+0.749548882\cdot\bar{g}_{10}(\lambda)+0.0675726702\cdot\bar{b}_{10}(\lambda)\\ # \bar{m}_{10}(\lambda)&=0.0192290085\cdot\bar{r}_{10}(\lambda)+0.940908496\cdot\bar{g}_{10}(\lambda)+0.113830196\cdot\bar{b}_{10}(\lambda)\\ # \bar{s}_{10}(\lambda)&=0.0105107859\cdot\bar{g}_{10}(\lambda)+0.991427669\cdot\bar{b}_{10}(\lambda) # \end{aligned} # \end{equation} # $$ # # The *Stockman & Sharpe 2° Cone Fundamentals* $\bar{l}(\lambda)$,$\bar{m}(\lambda)$,$\bar{s}(\lambda)$ spectral sensitivity functions were derived using the low density absorbance functions determined from the absorption of the ocular media and the macular pigment for a 10° angular subtense viewing field and taking into account the densities of the visual pigments for a 2° angular subtense viewing field. # # The same procedure one can be applied to derive cone fundamentals for every viewing angle between 1° and 10°. # # The `colour.RGB_10_degree_cmfs_to_LMS_10_degree_cmfs` definition is provided for educational purpose to illustrate the transformation from *Stiles & Burch 1959 10° RGB CMFs* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions into the *Stockman & Sharpe 10° Cone Fundamentals* $\bar{l}_{10}(\lambda)$,$\bar{m}_{10}(\lambda)$,$\bar{s}_{10}(\lambda)$ spectral sensitivity functions: # In[31]: print(colour.colorimetry.RGB_10_degree_cmfs_to_LMS_10_degree_cmfs(435)) print(colour.colorimetry.LMS_CMFS['Stockman & Sharpe 10 Degree Cone Fundamentals'][435]) # The *Stockman & Sharpe 10° Cone Fundamentals* $\bar{l}_{10}(\lambda)$,$\bar{m}_{10}(\lambda)$,$\bar{s}_{10}(\lambda)$ spectral sensitivity functions have the following range and increments: # In[32]: colour.colorimetry.LMS_CMFS['Stockman & Sharpe 10 Degree Cone Fundamentals'].shape # In[33]: plot_single_cmfs('Stockman & Sharpe 10 Degree Cone Fundamentals', y_label='Sensitivity', bounding_box=[390, 870, 0, 1.1]); # The *Stockman & Sharpe 2° Cone Fundamentals* $\bar{l}(\lambda)$,$\bar{m}(\lambda)$,$\bar{s}(\lambda)$ spectral sensitivity functions have the following range and increments: # In[34]: colour.colorimetry.LMS_CMFS['Stockman & Sharpe 2 Degree Cone Fundamentals'].shape # In[35]: plot_single_cmfs('Stockman & Sharpe 2 Degree Cone Fundamentals', y_label='Sensitivity', bounding_box=[390, 870, 0, 1.1]); # ### Smith & Pokorny 1975 Normal Trichromats # The *Smith & Pokorny 1975 Normal Trichromats* $\bar{l}(\lambda)$,$\bar{m}(\lambda)$,$\bar{s}(\lambda)$ are the cone spectral sensitivity functions for an average normal trichromat. [12] # # The *Smith & Pokorny 1975 Normal Trichromats* $\bar{l}(\lambda)$,$\bar{m}(\lambda)$,$\bar{s}(\lambda)$ spectral sensitivity functions have the following range and increments: # In[36]: colour.colorimetry.LMS_CMFS['Smith & Pokorny 1975 Normal Trichromats'].shape # In[37]: plot_single_cmfs('Smith & Pokorny 1975 Normal Trichromats', y_label='Sensitivity', bounding_box=[390, 870, 0, 1.1]); # ## Bibliography # 1. ^ CIE. (n.d.). 17-236 colour-matching functions (of a trichromatic system). Retrieved June 26, 2014, from http://eilv.cie.co.at/term/236 # 2. ^ Wyszecki, G., & Stiles, W. S. (2000). Tristimulus Space. In *Color Science: Concepts and Methods, Quantitative Data and Formulae* (p. 119,120,123). Wiley. ISBN:978-0471399186 # 3. ^ Hunter, R., & Harold, R. W. (1987). *The Measurement of Appearance* (2nd ed., pp. 1–432). New York: Wiley. ISBN:978-0471830061 # 4. ^ Wyszecki, G., & Stiles, W. S. (2000). Basic Colorimetric Equations. In *Color Science: Concepts and Methods, Quantitative Data and Formulae* (p. 124,125,750). Wiley. ISBN:978-0471399186 # 5. ^ Wyszecki, G., & Stiles, W. S. (2000). The CIE 1964 Standard Observer. In *Color Science: Concepts and Methods, Quantitative Data and Formulae* (p. 140,333). Wiley. ISBN:978-0471399186 # 6. ^ Wyszecki, G., & Stiles, W. S. (2000). Table 1(3.3.3). In *Color Science: Concepts and Methods, Quantitative Data and Formulae* (pp. 138–139). Wiley. ISBN:978-0471399186 # 7. ^ Wyszecki, G., & Stiles, W. S. (2000). Equation 8(3.3.3). In *Color Science: Concepts and Methods, Quantitative Data and Formulae* (p. 141). Wiley. ISBN:978-0471399186 # 8. ^ CVRL. (n.d.). CIE (2012) 2-deg XYZ “physiologically-relevant” colour matching functions. Retrieved June 25, 2014, from http://www.cvrl.org/database/text/cienewxyz/cie2012xyz2.htm # 9. ^ CVRL. (n.d.). CIE (2012) 10-deg XYZ “physiologically-relevant” colour matching functions. Retrieved June 25, 2014, from http://www.cvrl.org/database/text/cienewxyz/cie2012xyz10.htm # 10. ^ CIE TC 1-36. (2006). CIE 170-1:2006 Fundamental Chromaticity Diagram with Physiological Axes - Part 1 (pp. 1–56). ISBN:978-3-901-90646-6 # 11. ^ Stockman, a, & Sharpe, L. T. (2000). The spectral sensitivities of the middle- and long-wavelength-sensitive cones derived from measurements in observers of known genotype. Vision Research, 40(13), 1711–37. Retrieved from http://www.ncbi.nlm.nih.gov/pubmed/10814758 # 12. ^ Machado, G. (2010). A model for simulation of color vision deficiency and a color contrast enhancement technique for dichromats. Retrieved from http://www.lume.ufrgs.br/handle/10183/26950 # ## Dataset # 1. *Wright & Guild 1931 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions: Wyszecki, G., & Stiles, W. S. (2000). Table 1(3.3.3). In *Color Science: Concepts and Methods, Quantitative Data and Formulae* (pp. 138–139). Wiley. ISBN:978-0471399186 # 2. *Stiles & Burch 1955 2° RGB CMFs* $\bar{r}(\lambda)$,$\bar{g}(\lambda)$,$\bar{b}(\lambda)$ colour matching functions: CVRL. (n.d.). Stiles & Burch individual 2-deg colour matching data. Retrieved February 24, 2014, from http://www.cvrl.org/stilesburch2_ind.htm # 3. *Stiles & Burch 1959 10° RGB CMFs* $\bar{r}_{10}(\lambda)$,$\bar{g}_{10}(\lambda)$,$\bar{b}_{10}(\lambda)$ colour matching functions: CVRL. (n.d.). Stiles & Burch individual 10-deg colour matching data. Retrieved February 24, 2014, from http://www.cvrl.org/stilesburch10_ind.htm # 4. *CIE 1931 2° Standard Observer* $\bar{x}(\lambda)$,$\bar{y}(\lambda)$,$\bar{z}(\lambda)$ colour matching functions: CVRL. (n.d.). CIE (1931) 2-deg colour matching functions. Retrieved February 24, 2014, from http://www.cvrl.org/database/text/cmfs/ciexyz31.htm # 5. *CIE 1964 10° Standard Observer* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions: CVRL. (n.d.). CIE (1964) 10-deg colour matching functions. Retrieved February 24, 2014, from http://www.cvrl.org/database/text/cmfs/ciexyz64.htm # 6. *CIE 2012 2° Standard Observer* $\bar{x}(\lambda)$,$\bar{y}(\lambda)$,$\bar{z}(\lambda)$ colour matching functions: CVRL. (n.d.). CIE (2012) 2-deg XYZ “physiologically-relevant” colour matching functions. Retrieved June 25, 2014, from http://www.cvrl.org/database/text/cienewxyz/cie2012xyz2.htm # 7. *CIE 2012 10° Standard Observer* $\bar{x}_{10}(\lambda)$,$\bar{y}_{10}(\lambda)$,$\bar{z}_{10}(\lambda)$ colour matching functions: CVRL. (n.d.). CIE (2012) 10-deg XYZ “physiologically-relevant” colour matching functions. Retrieved June 25, 2014, from http://www.cvrl.org/database/text/cienewxyz/cie2012xyz10.htm # 8. *Stockman & Sharpe 2° Cone Fundamentals* $\bar{l}(\lambda)$,$\bar{m}(\lambda)$,$\bar{s}(\lambda)$ spectral sensitivity functions: CVRL. (n.d.). Cone Fundamentals. Retrieved June 23, 2014, from http://www.cvrl.org/cones.htm # 9. *Stockman & Sharpe 10° Cone Fundamentals* $\bar{l}_{10}(\lambda)$,$\bar{m}_{10}(\lambda)$,$\bar{s}_{10}(\lambda)$ spectral sensitivity functions: CVRL. (n.d.). Cone Fundamentals. Retrieved June 23, 2014, from http://www.cvrl.org/cones.htm # 10. *Smith & Pokorny 1975 Normal Trichromats* $\bar{l}(\lambda)$,$\bar{m}(\lambda)$,$\bar{s}(\lambda)$: Machado, G. (2010). A model for simulation of color vision deficiency and a color contrast enhancement technique for dichromats. Retrieved from http://www.lume.ufrgs.br/handle/10183/26950