Colour is an open-source Python package providing a comprehensive number of algorithms and datasets for colour science.

It is freely available under the BSD-3-Clause terms.

Colour is an affiliated project of NumFOCUS, a 501(c)(3) nonprofit in the United States.

1 Draft Release Notes#

The draft release notes from the develop branch are available at this url.

2 Sponsors#

We are grateful for the support of our sponsors. If you’d like to join them, please consider becoming a sponsor on OpenCollective.

3 Features#

Most of the objects are available from the colour namespace:

import colour

3.1 Automatic Colour Conversion Graph - colour.graph#

Starting with version 0.3.14, Colour implements an automatic colour conversion graph enabling easier colour conversions.

https://colour.readthedocs.io/en/develop/_static/Examples_Colour_Automatic_Conversion_Graph.png
sd = colour.SDS_COLOURCHECKERS["ColorChecker N Ohta"]["dark skin"]
colour.convert(sd, "Spectral Distribution", "sRGB", verbose={"mode": "Short"})
===============================================================================
*                                                                             *
*   [ Conversion Path ]                                                       *
*                                                                             *
*   "sd_to_XYZ" --> "XYZ_to_sRGB"                                             *
*                                                                             *
===============================================================================
array([ 0.45675795,  0.30986982,  0.24861924])
illuminant = colour.SDS_ILLUMINANTS["FL2"]
colour.convert(
    sd,
    "Spectral Distribution",
    "sRGB",
    sd_to_XYZ={"illuminant": illuminant},
)
array([ 0.47924575,  0.31676968,  0.17362725])

3.2 Chromatic Adaptation - colour.adaptation#

XYZ = [0.20654008, 0.12197225, 0.05136952]
D65 = colour.CCS_ILLUMINANTS["CIE 1931 2 Degree Standard Observer"]["D65"]
A = colour.CCS_ILLUMINANTS["CIE 1931 2 Degree Standard Observer"]["A"]
colour.chromatic_adaptation(XYZ, colour.xy_to_XYZ(D65), colour.xy_to_XYZ(A))
array([ 0.2533053 ,  0.13765138,  0.01543307])
sorted(colour.CHROMATIC_ADAPTATION_METHODS)
['CIE 1994', 'CMCCAT2000', 'Fairchild 1990', 'Von Kries', 'Zhai 2018']

3.3 Algebra - colour.algebra#

3.3.1 Kernel Interpolation#

y = [5.9200, 9.3700, 10.8135, 4.5100, 69.5900, 27.8007, 86.0500]
x = range(len(y))
colour.KernelInterpolator(x, y)([0.25, 0.75, 5.50])
array([  6.18062083,   8.08238488,  57.85783403])

3.3.2 Sprague (1880) Interpolation#

y = [5.9200, 9.3700, 10.8135, 4.5100, 69.5900, 27.8007, 86.0500]
x = range(len(y))
colour.SpragueInterpolator(x, y)([0.25, 0.75, 5.50])
array([  6.72951612,   7.81406251,  43.77379185])

3.4 Colour Appearance Models - colour.appearance#

XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
XYZ_w = [95.05, 100.00, 108.88]
L_A = 318.31
Y_b = 20.0
colour.XYZ_to_CIECAM02(XYZ, XYZ_w, L_A, Y_b)
CAM_Specification_CIECAM02(J=34.434525727858997, C=67.365010921125943, h=22.279164147957065, s=62.81485585332716, Q=177.47124941102123, M=70.024939419291414, H=2.6896085344238898, HC=None)
colour.XYZ_to_CIECAM16(XYZ, XYZ_w, L_A, Y_b)
CAM_Specification_CIECAM16(J=34.434525727858997, C=67.365010921125943, h=22.279164147957065, s=62.81485585332716, Q=177.47124941102123, M=70.024939419291414, H=2.6896085344238898, HC=None)
colour.XYZ_to_CAM16(XYZ, XYZ_w, L_A, Y_b)
CAM_Specification_CAM16(J=33.880368498111686, C=69.444353357408033, h=19.510887327451748, s=64.03612114840314, Q=176.03752758512178, M=72.18638534116765, H=399.52975599115319, HC=None)
colour.XYZ_to_Hellwig2022(XYZ, XYZ_w, L_A)
CAM_Specification_Hellwig2022(J=33.880368498111686, C=40.347043294550311, h=19.510887327451748, s=117.38555017188679, Q=45.34489577734751, M=53.228355383108031, H=399.52975599115319, HC=None)
colour.XYZ_to_Kim2009(XYZ, XYZ_w, L_A)
CAM_Specification_Kim2009(J=19.879918542450902, C=55.839055250876946, h=22.013388165090046, s=112.97979354939129, Q=36.309026130161449, M=46.346415858227864, H=2.3543198369639931, HC=None)
colour.XYZ_to_ZCAM(XYZ, XYZ_w, L_A, Y_b)
CAM_Specification_ZCAM(J=38.347186278956357, C=21.12138989208518, h=33.711578931095197, s=81.444585609489536, Q=76.986725284523772, M=42.403805833900506, H=0.45779200212219573, HC=None, V=43.623590687423544, K=43.20894953152817, W=34.829588380192149)

3.5 Colour Blindness - colour.blindness#

import numpy as np

cmfs = colour.LMS_CMFS["Stockman & Sharpe 2 Degree Cone Fundamentals"]
colour.msds_cmfs_anomalous_trichromacy_Machado2009(cmfs, np.array([15, 0, 0]))[450]
array([ 0.08912884,  0.0870524 ,  0.955393  ])
primaries = colour.MSDS_DISPLAY_PRIMARIES["Apple Studio Display"]
d_LMS = (15, 0, 0)
colour.matrix_anomalous_trichromacy_Machado2009(cmfs, primaries, d_LMS)
array([[-0.27774652,  2.65150084, -1.37375432],
       [ 0.27189369,  0.20047862,  0.52762768],
       [ 0.00644047,  0.25921579,  0.73434374]])

3.6 Colour Correction - colour characterisation#

import numpy as np

RGB = [0.17224810, 0.09170660, 0.06416938]
M_T = np.random.random((24, 3))
M_R = M_T + (np.random.random((24, 3)) - 0.5) * 0.5
colour.colour_correction(RGB, M_T, M_R)
array([ 0.1806237 ,  0.07234791,  0.07848845])
sorted(colour.COLOUR_CORRECTION_METHODS)
['Cheung 2004', 'Finlayson 2015', 'Vandermonde']

3.7 ACES Input Transform - colour characterisation#

sensitivities = colour.MSDS_CAMERA_SENSITIVITIES["Nikon 5100 (NPL)"]
illuminant = colour.SDS_ILLUMINANTS["D55"]
colour.matrix_idt(sensitivities, illuminant)
(array([[ 0.59368175,  0.30418371,  0.10213454],
       [ 0.00457979,  1.14946003, -0.15403982],
       [ 0.03552213, -0.16312291,  1.12760077]]), array([ 1.58214188,  1.        ,  1.28910346]))

3.8 Colorimetry - colour.colorimetry#

3.8.1 Spectral Computations#

colour.sd_to_XYZ(colour.SDS_LIGHT_SOURCES["Neodimium Incandescent"])
array([ 36.94726204,  32.62076174,  13.0143849 ])
sorted(colour.SPECTRAL_TO_XYZ_METHODS)
['ASTM E308', 'Integration', 'astm2015']

3.8.2 Multi-Spectral Computations#

msds = np.array(
    [
        [
            [
                0.01367208,
                0.09127947,
                0.01524376,
                0.02810712,
                0.19176012,
                0.04299992,
            ],
            [
                0.00959792,
                0.25822842,
                0.41388571,
                0.22275120,
                0.00407416,
                0.37439537,
            ],
            [
                0.01791409,
                0.29707789,
                0.56295109,
                0.23752193,
                0.00236515,
                0.58190280,
            ],
        ],
        [
            [
                0.01492332,
                0.10421912,
                0.02240025,
                0.03735409,
                0.57663846,
                0.32416266,
            ],
            [
                0.04180972,
                0.26402685,
                0.03572137,
                0.00413520,
                0.41808194,
                0.24696727,
            ],
            [
                0.00628672,
                0.11454948,
                0.02198825,
                0.39906919,
                0.63640803,
                0.01139849,
            ],
        ],
        [
            [
                0.04325933,
                0.26825359,
                0.23732357,
                0.05175860,
                0.01181048,
                0.08233768,
            ],
            [
                0.02484169,
                0.12027161,
                0.00541695,
                0.00654612,
                0.18603799,
                0.36247808,
            ],
            [
                0.03102159,
                0.16815442,
                0.37186235,
                0.08610666,
                0.00413520,
                0.78492409,
            ],
        ],
        [
            [
                0.11682307,
                0.78883040,
                0.74468607,
                0.83375293,
                0.90571451,
                0.70054168,
            ],
            [
                0.06321812,
                0.41898224,
                0.15190357,
                0.24591440,
                0.55301750,
                0.00657664,
            ],
            [
                0.00305180,
                0.11288624,
                0.11357290,
                0.12924391,
                0.00195315,
                0.21771573,
            ],
        ],
    ]
)
colour.msds_to_XYZ(
    msds,
    method="Integration",
    shape=colour.SpectralShape(400, 700, 60),
)
array([[[  7.68544647,   4.09414317,   8.49324254],
        [ 17.12567298,  27.77681821,  25.52573685],
        [ 19.10280411,  34.45851476,  29.76319628]],
       [[ 18.03375827,   8.62340812,   9.71702574],
        [ 15.03110867,   6.54001068,  24.53208465],
        [ 37.68269495,  26.4411103 ,  10.66361816]],
       [[  8.09532373,  12.75333339,  25.79613956],
        [  7.09620297,   2.79257389,  11.15039854],
        [  8.933163  ,  19.39985815,  17.14915636]],
       [[ 80.00969553,  80.39810464,  76.08184429],
        [ 33.27611427,  24.38947838,  39.34919287],
        [  8.89425686,  11.05185138,  10.86767594]]])
sorted(colour.MSDS_TO_XYZ_METHODS)
['ASTM E308', 'Integration', 'astm2015']

3.8.3 Blackbody Spectral Radiance Computation#

colour.sd_blackbody(5000)
SpectralDistribution([[  3.60000000e+02,   6.65427827e+12],
                      [  3.61000000e+02,   6.70960528e+12],
                      [  3.62000000e+02,   6.76482512e+12],
                      ...
                      [  7.78000000e+02,   1.06068004e+13],
                      [  7.79000000e+02,   1.05903327e+13],
                      [  7.80000000e+02,   1.05738520e+13]],
                     interpolator=SpragueInterpolator,
                     interpolator_args={},
                     extrapolator=Extrapolator,
                     extrapolator_args={'right': None, 'method': 'Constant', 'left': None})

3.8.4 Dominant, Complementary Wavelength & Colour Purity Computation#

xy = [0.54369557, 0.32107944]
xy_n = [0.31270000, 0.32900000]
colour.dominant_wavelength(xy, xy_n)
(array(616.0),
 array([ 0.68354746,  0.31628409]),
 array([ 0.68354746,  0.31628409]))

3.8.5 Lightness Computation#

colour.lightness(12.19722535)
41.527875844653451
sorted(colour.LIGHTNESS_METHODS)
['Abebe 2017',
 'CIE 1976',
 'Fairchild 2010',
 'Fairchild 2011',
 'Glasser 1958',
 'Lstar1976',
 'Wyszecki 1963']

3.8.6 Luminance Computation#

colour.luminance(41.52787585)
12.197225353400775
sorted(colour.LUMINANCE_METHODS)
['ASTM D1535',
 'CIE 1976',
 'Fairchild 2010',
 'Fairchild 2011',
 'Newhall 1943',
 'astm2008',
 'cie1976']

3.8.7 Whiteness Computation#

XYZ = [95.00000000, 100.00000000, 105.00000000]
XYZ_0 = [94.80966767, 100.00000000, 107.30513595]
colour.whiteness(XYZ, XYZ_0)
array([ 93.756     ,  -1.33000001])
sorted(colour.WHITENESS_METHODS)
['ASTM E313',
 'Berger 1959',
 'CIE 2004',
 'Ganz 1979',
 'Stensby 1968',
 'Taube 1960',
 'cie2004']

3.8.8 Yellowness Computation#

XYZ = [95.00000000, 100.00000000, 105.00000000]
colour.yellowness(XYZ)
4.3400000000000034
sorted(colour.YELLOWNESS_METHODS)
['ASTM D1925', 'ASTM E313', 'ASTM E313 Alternative']

3.8.9 Luminous Flux, Efficiency & Efficacy Computation#

sd = colour.SDS_LIGHT_SOURCES["Neodimium Incandescent"]
colour.luminous_flux(sd)
23807.655527367202
sd = colour.SDS_LIGHT_SOURCES["Neodimium Incandescent"]
colour.luminous_efficiency(sd)
0.19943935624521045
sd = colour.SDS_LIGHT_SOURCES["Neodimium Incandescent"]
colour.luminous_efficacy(sd)
136.21708031547874

3.9 Contrast Sensitivity Function - colour.contrast#

colour.contrast_sensitivity_function(u=4, X_0=60, E=65)
358.51180789884984
sorted(colour.CONTRAST_SENSITIVITY_METHODS)
['Barten 1999']

3.10 Colour Difference - colour.difference#

Lab_1 = [100.00000000, 21.57210357, 272.22819350]
Lab_2 = [100.00000000, 426.67945353, 72.39590835]
colour.delta_E(Lab_1, Lab_2)
94.035649026659485
sorted(colour.DELTA_E_METHODS)
['CAM02-LCD',
 'CAM02-SCD',
 'CAM02-UCS',
 'CAM16-LCD',
 'CAM16-SCD',
 'CAM16-UCS',
 'CIE 1976',
 'CIE 1994',
 'CIE 2000',
 'CMC',
 'DIN99',
 'ITP',
 'cie1976',
 'cie1994',
 'cie2000']

3.11 IO - colour.io#

3.11.1 Images#

RGB = colour.read_image("Ishihara_Colour_Blindness_Test_Plate_3.png")
RGB.shape
(276, 281, 3)

3.11.2 Look Up Table (LUT) Data#

LUT = colour.read_LUT("ACES_Proxy_10_to_ACES.cube")
print(LUT)
LUT3x1D - ACES Proxy 10 to ACES
-------------------------------
Dimensions : 2
Domain     : [[0 0 0]
              [1 1 1]]
Size       : (32, 3)
RGB = [0.17224810, 0.09170660, 0.06416938]
LUT.apply(RGB)
array([ 0.00575674,  0.00181493,  0.00121419])

3.12 Colour Models - colour.models#

3.12.1 CIE xyY Colourspace#

colour.XYZ_to_xyY([0.20654008, 0.12197225, 0.05136952])
array([ 0.54369557,  0.32107944,  0.12197225])

3.12.2 CIE L*a*b* Colourspace#

colour.XYZ_to_Lab([0.20654008, 0.12197225, 0.05136952])
array([ 41.52787529,  52.63858304,  26.92317922])

3.12.3 CIE L*u*v* Colourspace#

colour.XYZ_to_Luv([0.20654008, 0.12197225, 0.05136952])
array([ 41.52787529,  96.83626054,  17.75210149])

3.12.4 CIE 1960 UCS Colourspace#

colour.XYZ_to_UCS([0.20654008, 0.12197225, 0.05136952])
array([ 0.13769339,  0.12197225,  0.1053731 ])

3.12.5 CIE 1964 U*V*W* Colourspace#

XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
colour.XYZ_to_UVW(XYZ)
array([ 94.55035725,  11.55536523,  40.54757405])

3.12.6 CAM02-LCD, CAM02-SCD, and CAM02-UCS Colourspaces - Luo, Cui and Li (2006)#

XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
XYZ_w = [95.05, 100.00, 108.88]
L_A = 318.31
Y_b = 20.0
surround = colour.VIEWING_CONDITIONS_CIECAM02["Average"]
specification = colour.XYZ_to_CIECAM02(XYZ, XYZ_w, L_A, Y_b, surround)
JMh = (specification.J, specification.M, specification.h)
colour.JMh_CIECAM02_to_CAM02UCS(JMh)
array([ 47.16899898,  38.72623785,  15.8663383 ])
XYZ = [0.20654008, 0.12197225, 0.05136952]
XYZ_w = [95.05 / 100, 100.00 / 100, 108.88 / 100]
colour.XYZ_to_CAM02UCS(XYZ, XYZ_w=XYZ_w, L_A=L_A, Y_b=Y_b)
array([ 47.16899898,  38.72623785,  15.8663383 ])

3.12.7 CAM16-LCD, CAM16-SCD, and CAM16-UCS Colourspaces - Li et al. (2017)#

XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
XYZ_w = [95.05, 100.00, 108.88]
L_A = 318.31
Y_b = 20.0
surround = colour.VIEWING_CONDITIONS_CAM16["Average"]
specification = colour.XYZ_to_CAM16(XYZ, XYZ_w, L_A, Y_b, surround)
JMh = (specification.J, specification.M, specification.h)
colour.JMh_CAM16_to_CAM16UCS(JMh)
array([ 46.55542238,  40.22460974,  14.25288392])
XYZ = [0.20654008, 0.12197225, 0.05136952]
XYZ_w = [95.05 / 100, 100.00 / 100, 108.88 / 100]
colour.XYZ_to_CAM16UCS(XYZ, XYZ_w=XYZ_w, L_A=L_A, Y_b=Y_b)
array([ 46.55542238,  40.22460974,  14.25288392])

3.12.8 DIN99 Colourspace and DIN99b, DIN99c, DIN99d Refined Formulas#

Lab = [41.52787529, 52.63858304, 26.92317922]
colour.Lab_to_DIN99(Lab)
array([ 53.22821988,  28.41634656,   3.89839552])

3.12.9 ICaCb Colourspace#

XYZ_to_ICaCb(np.array([0.20654008, 0.12197225, 0.05136952]))
array([ 0.06875297,  0.05753352,  0.02081548])

3.12.10 IgPgTg Colourspace#

colour.XYZ_to_IgPgTg([0.20654008, 0.12197225, 0.05136952])
array([ 0.42421258,  0.18632491,  0.10689223])

3.12.11 IPT Colourspace#

colour.XYZ_to_IPT([0.20654008, 0.12197225, 0.05136952])
array([ 0.38426191,  0.38487306,  0.18886838])

3.12.12 Jzazbz Colourspace#

colour.XYZ_to_Jzazbz([0.20654008, 0.12197225, 0.05136952])
array([ 0.00535048,  0.00924302,  0.00526007])

3.12.13 hdr-CIELAB Colourspace#

colour.XYZ_to_hdr_CIELab([0.20654008, 0.12197225, 0.05136952])
array([ 51.87002062,  60.4763385 ,  32.14551912])

3.12.14 hdr-IPT Colourspace#

colour.XYZ_to_hdr_IPT([0.20654008, 0.12197225, 0.05136952])
array([ 25.18261761, -22.62111297,   3.18511729])

3.12.15 Hunter L,a,b Colour Scale#

XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
colour.XYZ_to_Hunter_Lab(XYZ)
array([ 34.92452577,  47.06189858,  14.38615107])

3.12.16 Hunter Rd,a,b Colour Scale#

XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
colour.XYZ_to_Hunter_Rdab(XYZ)
array([ 12.197225  ,  57.12537874,  17.46241341])

3.12.17 Oklab Colourspace#

colour.XYZ_to_Oklab([0.20654008, 0.12197225, 0.05136952])
array([ 0.51634019,  0.154695  ,  0.06289579])

3.12.18 OSA UCS Colourspace#

XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
colour.XYZ_to_OSA_UCS(XYZ)
array([-3.0049979 ,  2.99713697, -9.66784231])

3.12.19 ProLab Colourspace#

colour.XYZ_to_ProLab([0.51634019, 0.15469500, 0.06289579])
array([1.24610688, 2.39525236, 0.41902126])

3.12.20 Ragoo and Farup (2021) Optimised IPT Colourspace#

colour.XYZ_to_IPT_Ragoo2021([0.20654008, 0.12197225, 0.05136952])
array([ 0.42248243,  0.2910514 ,  0.20410663])

3.12.21 Yrg Colourspace - Kirk (2019)#

colour.XYZ_to_Yrg([0.20654008, 0.12197225, 0.05136952])
array([ 0.13137801,  0.49037645,  0.37777388])

3.12.22 Y’CbCr Colour Encoding#

colour.RGB_to_YCbCr([1.0, 1.0, 1.0])
array([ 0.92156863,  0.50196078,  0.50196078])

3.12.23 YCoCg Colour Encoding#

colour.RGB_to_YCoCg([0.75, 0.75, 0.0])
array([ 0.5625,  0.375 ,  0.1875])

3.12.24 ICtCp Colour Encoding#

colour.RGB_to_ICtCp([0.45620519, 0.03081071, 0.04091952])
array([ 0.07351364,  0.00475253,  0.09351596])

3.12.25 HSV Colourspace#

colour.RGB_to_HSV([0.45620519, 0.03081071, 0.04091952])
array([ 0.99603944,  0.93246304,  0.45620519])

3.12.26 IHLS Colourspace#

colour.RGB_to_IHLS([0.45620519, 0.03081071, 0.04091952])
array([ 6.26236117,  0.12197943,  0.42539448])

3.12.27 Prismatic Colourspace#

colour.RGB_to_Prismatic([0.25, 0.50, 0.75])
array([ 0.75      ,  0.16666667,  0.33333333,  0.5       ])

3.12.28 RGB Colourspace and Transformations#

XYZ = [0.21638819, 0.12570000, 0.03847493]
illuminant_XYZ = [0.34570, 0.35850]
illuminant_RGB = [0.31270, 0.32900]
chromatic_adaptation_transform = "Bradford"
matrix_XYZ_to_RGB = [
    [3.24062548, -1.53720797, -0.49862860],
    [-0.96893071, 1.87575606, 0.04151752],
    [0.05571012, -0.20402105, 1.05699594],
]
colour.XYZ_to_RGB(
    XYZ,
    illuminant_XYZ,
    illuminant_RGB,
    matrix_XYZ_to_RGB,
    chromatic_adaptation_transform,
)
array([ 0.45595571,  0.03039702,  0.04087245])

3.12.29 RGB Colourspace Derivation#

p = [0.73470, 0.26530, 0.00000, 1.00000, 0.00010, -0.07700]
w = [0.32168, 0.33767]
colour.normalised_primary_matrix(p, w)
array([[  9.52552396e-01,   0.00000000e+00,   9.36786317e-05],
       [  3.43966450e-01,   7.28166097e-01,  -7.21325464e-02],
       [  0.00000000e+00,   0.00000000e+00,   1.00882518e+00]])

3.12.30 RGB Colourspaces#

sorted(colour.RGB_COLOURSPACES)
['ACES2065-1',
 'ACEScc',
 'ACEScct',
 'ACEScg',
 'ACESproxy',
 'ARRI Wide Gamut 3',
 'ARRI Wide Gamut 4',
 'Adobe RGB (1998)',
 'Adobe Wide Gamut RGB',
 'Apple RGB',
 'Best RGB',
 'Beta RGB',
 'Blackmagic Wide Gamut',
 'CIE RGB',
 'Cinema Gamut',
 'ColorMatch RGB',
 'DCDM XYZ',
 'DCI-P3',
 'DCI-P3-P',
 'DJI D-Gamut',
 'DRAGONcolor',
 'DRAGONcolor2',
 'DaVinci Wide Gamut',
 'Display P3',
 'Don RGB 4',
 'EBU Tech. 3213-E',
 'ECI RGB v2',
 'ERIMM RGB',
 'Ekta Space PS 5',
 'F-Gamut',
 'FilmLight E-Gamut',
 'ITU-R BT.2020',
 'ITU-R BT.470 - 525',
 'ITU-R BT.470 - 625',
 'ITU-R BT.709',
 'ITU-T H.273 - 22 Unspecified',
 'ITU-T H.273 - Generic Film',
 'Max RGB',
 'N-Gamut',
 'NTSC (1953)',
 'NTSC (1987)',
 'P3-D65',
 'PLASA ANSI E1.54',
 'Pal/Secam',
 'ProPhoto RGB',
 'Protune Native',
 'REDWideGamutRGB',
 'REDcolor',
 'REDcolor2',
 'REDcolor3',
 'REDcolor4',
 'RIMM RGB',
 'ROMM RGB',
 'Russell RGB',
 'S-Gamut',
 'S-Gamut3',
 'S-Gamut3.Cine',
 'SMPTE 240M',
 'SMPTE C',
 'Sharp RGB',
 'V-Gamut',
 'Venice S-Gamut3',
 'Venice S-Gamut3.Cine',
 'Xtreme RGB',
 'aces',
 'adobe1998',
 'prophoto',
 'sRGB']

3.12.31 OETFs#

sorted(colour.OETFS)
['ARIB STD-B67',
 'Blackmagic Film Generation 5',
 'DaVinci Intermediate',
 'ITU-R BT.2020',
 'ITU-R BT.2100 HLG',
 'ITU-R BT.2100 PQ',
 'ITU-R BT.601',
 'ITU-R BT.709',
 'ITU-T H.273 IEC 61966-2',
 'ITU-T H.273 Log',
 'ITU-T H.273 Log Sqrt',
 'SMPTE 240M']

3.12.32 EOTFs#

sorted(colour.EOTFS)
['DCDM',
 'DICOM GSDF',
 'ITU-R BT.1886',
 'ITU-R BT.2100 HLG',
 'ITU-R BT.2100 PQ',
 'ITU-T H.273 ST.428-1',
 'SMPTE 240M',
 'ST 2084',
 'sRGB']

3.12.33 OOTFs#

sorted(colour.OOTFS)
['ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ']

3.12.34 Log Encoding / Decoding#

sorted(colour.LOG_ENCODINGS)
['ACEScc',
 'ACEScct',
 'ACESproxy',
 'ARRI LogC3',
 'ARRI LogC4',
 'Canon Log',
 'Canon Log 2',
 'Canon Log 3',
 'Cineon',
 'D-Log',
 'ERIMM RGB',
 'F-Log',
 'F-Log2',
 'Filmic Pro 6',
 'L-Log',
 'Log2',
 'Log3G10',
 'Log3G12',
 'N-Log',
 'PLog',
 'Panalog',
 'Protune',
 'REDLog',
 'REDLogFilm',
 'S-Log',
 'S-Log2',
 'S-Log3',
 'T-Log',
 'V-Log',
 'ViperLog']

3.12.35 CCTFs Encoding / Decoding#

sorted(colour.CCTF_ENCODINGS)
['ACEScc',
 'ACEScct',
 'ACESproxy',
 'Apple Log Profile',
 'ARRI LogC3',
 'ARRI LogC4',
 'ARIB STD-B67',
 'Canon Log',
 'Canon Log 2',
 'Canon Log 3',
 'Cineon',
 'D-Log',
 'DCDM',
 'DICOM GSDF',
 'ERIMM RGB',
 'F-Log',
 'F-Log2',
 'Filmic Pro 6',
 'Gamma 2.2',
 'Gamma 2.4',
 'Gamma 2.6',
 'ITU-R BT.1886',
 'ITU-R BT.2020',
 'ITU-R BT.2100 HLG',
 'ITU-R BT.2100 PQ',
 'ITU-R BT.601',
 'ITU-R BT.709',
 'Log2',
 'Log3G10',
 'Log3G12',
 'PLog',
 'Panalog',
 'ProPhoto RGB',
 'Protune',
 'REDLog',
 'REDLogFilm',
 'RIMM RGB',
 'ROMM RGB',
 'S-Log',
 'S-Log2',
 'S-Log3',
 'SMPTE 240M',
 'ST 2084',
 'T-Log',
 'V-Log',
 'ViperLog',
 'sRGB']

3.12.36 Recommendation ITU-T H.273 Code points for Video Signal Type Identification#

colour.COLOUR_PRIMARIES_ITUTH273.keys()
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 22, 23])
colour.models.describe_video_signal_colour_primaries(1)
===============================================================================
*                                                                             *
*   Colour Primaries: 1                                                       *
*   -------------------                                                       *
*                                                                             *
*   Primaries        : [[ 0.64  0.33]                                         *
*                       [ 0.3   0.6 ]                                         *
*                       [ 0.15  0.06]]                                        *
*   Whitepoint       : [ 0.3127  0.329 ]                                      *
*   Whitepoint Name  : D65                                                    *
*   NPM              : [[ 0.4123908   0.35758434  0.18048079]                 *
*                       [ 0.21263901  0.71516868  0.07219232]                 *
*                       [ 0.01933082  0.11919478  0.95053215]]                *
*   NPM -1           : [[ 3.24096994 -1.53738318 -0.49861076]                 *
*                       [-0.96924364  1.8759675   0.04155506]                 *
*                       [ 0.05563008 -0.20397696  1.05697151]]                *
*   FFmpeg Constants : ['AVCOL_PRI_BT709', 'BT709']                           *
*                                                                             *
===============================================================================
colour.TRANSFER_CHARACTERISTICS_ITUTH273.keys()
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
colour.models.describe_video_signal_transfer_characteristics(1)
===============================================================================
*                                                                             *
*   Transfer Characteristics: 1                                               *
*   ---------------------------                                               *
*                                                                             *
*   Function         : <function oetf_BT709 at 0x165bb3550>                   *
*   FFmpeg Constants : ['AVCOL_TRC_BT709', 'BT709']                           *
*                                                                             *
===============================================================================
colour.MATRIX_COEFFICIENTS_ITUTH273.keys()
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
colour.models.describe_video_signal_matrix_coefficients(1)
===============================================================================
*                                                                             *
*   Matrix Coefficients: 1                                                    *
*   ----------------------                                                    *
*                                                                             *
*   Matrix Coefficients : [ 0.2126  0.0722]                                   *
*   FFmpeg Constants    : ['AVCOL_SPC_BT709', 'BT709']                        *
*                                                                             *
===============================================================================

3.13 Colour Notation Systems - colour.notation#

3.13.1 Munsell Value#

colour.munsell_value(12.23634268)
4.0824437076525664
sorted(colour.MUNSELL_VALUE_METHODS)
['ASTM D1535',
 'Ladd 1955',
 'McCamy 1987',
 'Moon 1943',
 'Munsell 1933',
 'Priest 1920',
 'Saunderson 1944',
 'astm2008']

3.13.2 Munsell Colour#

colour.xyY_to_munsell_colour([0.38736945, 0.35751656, 0.59362000])
'4.2YR 8.1/5.3'
colour.munsell_colour_to_xyY("4.2YR 8.1/5.3")
array([ 0.38736945,  0.35751656,  0.59362   ])

3.14 Optical Phenomena - colour.phenomena#

colour.rayleigh_scattering_sd()
SpectralDistribution([[  3.60000000e+02,   5.99101337e-01],
                      [  3.61000000e+02,   5.92170690e-01],
                      [  3.62000000e+02,   5.85341006e-01],
                      ...
                      [  7.78000000e+02,   2.55208377e-02],
                      [  7.79000000e+02,   2.53887969e-02],
                      [  7.80000000e+02,   2.52576106e-02]],
                     interpolator=SpragueInterpolator,
                     interpolator_args={},
                     extrapolator=Extrapolator,
                     extrapolator_args={'right': None, 'method': 'Constant', 'left': None})

3.15 Light Quality - colour.quality#

3.15.1 Colour Fidelity Index#

colour.colour_fidelity_index(colour.SDS_ILLUMINANTS["FL2"])
70.120825477833037
sorted(colour.COLOUR_FIDELITY_INDEX_METHODS)
['ANSI/IES TM-30-18', 'CIE 2017']

3.15.2 Colour Quality Scale#

colour.colour_quality_scale(colour.SDS_ILLUMINANTS["FL2"])
64.111703163816699
sorted(colour.COLOUR_QUALITY_SCALE_METHODS)
['NIST CQS 7.4', 'NIST CQS 9.0']

3.15.3 Colour Rendering Index#

colour.colour_rendering_index(colour.SDS_ILLUMINANTS["FL2"])
64.233724121664807

3.15.4 Academy Spectral Similarity Index (SSI)#

colour.spectral_similarity_index(
    colour.SDS_ILLUMINANTS["C"], colour.SDS_ILLUMINANTS["D65"]
)
94.0

3.16 Spectral Up-Sampling & Recovery - colour.recovery#

3.16.1 Reflectance Recovery#

colour.XYZ_to_sd([0.20654008, 0.12197225, 0.05136952])
SpectralDistribution([[  3.60000000e+02,   8.40144095e-02],
                      [  3.65000000e+02,   8.41264236e-02],
                      [  3.70000000e+02,   8.40057597e-02],
                      ...
                      [  7.70000000e+02,   4.46743012e-01],
                      [  7.75000000e+02,   4.46817187e-01],
                      [  7.80000000e+02,   4.46857696e-01]],
                     SpragueInterpolator,
                     {},
                     Extrapolator,
                     {'method': 'Constant', 'left': None, 'right': None})
sorted(colour.REFLECTANCE_RECOVERY_METHODS)
['Jakob 2019', 'Mallett 2019', 'Meng 2015', 'Otsu 2018', 'Smits 1999']

3.16.2 Camera RGB Sensitivities Recovery#

illuminant = colour.colorimetry.SDS_ILLUMINANTS["D65"]
sensitivities = colour.characterisation.MSDS_CAMERA_SENSITIVITIES["Nikon 5100 (NPL)"]
reflectances = [
    sd.copy().align(colour.recovery.SPECTRAL_SHAPE_BASIS_FUNCTIONS_DYER2017)
    for sd in colour.characterisation.SDS_COLOURCHECKERS["BabelColor Average"].values()
]
reflectances = colour.colorimetry.sds_and_msds_to_msds(reflectances)
RGB = colour.colorimetry.msds_to_XYZ(
    reflectances,
    method="Integration",
    cmfs=sensitivities,
    illuminant=illuminant,
    k=0.01,
    shape=colour.recovery.SPECTRAL_SHAPE_BASIS_FUNCTIONS_DYER2017,
)
colour.recovery.RGB_to_msds_camera_sensitivities_Jiang2013(
    RGB,
    illuminant,
    reflectances,
    colour.recovery.BASIS_FUNCTIONS_DYER2017,
    colour.recovery.SPECTRAL_SHAPE_BASIS_FUNCTIONS_DYER2017,
)
RGB_CameraSensitivities([[  4.00000000e+02,   7.22815777e-03,   9.22506480e-03,
                           -9.88368972e-03],
                         [  4.10000000e+02,  -8.50457609e-03,   1.12777480e-02,
                            3.86248655e-03],
                         [  4.20000000e+02,   4.58191132e-02,   7.15520948e-02,
                            4.04068293e-01],
                         ...
                         [  6.80000000e+02,   4.08276173e-02,   5.55290476e-03,
                            1.39907862e-03],
                         [  6.90000000e+02,  -3.71437574e-03,   2.50935640e-03,
                            3.97652622e-04],
                         [  7.00000000e+02,  -5.62256563e-03,   1.56433970e-03,
                            5.84726936e-04]],
                        ['red', 'green', 'blue'],
                        SpragueInterpolator,
                        {},
                        Extrapolator,
                        {'method': 'Constant', 'left': None, 'right': None})

3.17 Correlated Colour Temperature Computation Methods - colour.temperature#

colour.uv_to_CCT([0.1978, 0.3122])
array([  6.50751282e+03,   3.22335875e-03])
sorted(colour.UV_TO_CCT_METHODS)
['Krystek 1985', 'Ohno 2013', 'Planck 1900', 'Robertson 1968', 'ohno2013', 'robertson1968']
sorted(colour.XY_TO_CCT_METHODS)
['CIE Illuminant D Series',
 'Hernandez 1999',
 'Kang 2002',
 'McCamy 1992',
 'daylight',
 'hernandez1999',
 'kang2002',
 'mccamy1992']

3.18 Colour Volume - colour.volume#

colour.RGB_colourspace_volume_MonteCarlo(colour.RGB_COLOURSPACE_RGB["sRGB"])
821958.30000000005

3.19 Geometry Primitives Generation - colour.geometry#

colour.primitive("Grid")
(array([ ([-0.5,  0.5,  0. ], [ 0.,  1.], [ 0.,  0.,  1.], [ 0.,  1.,  0.,  1.]),
          ([ 0.5,  0.5,  0. ], [ 1.,  1.], [ 0.,  0.,  1.], [ 1.,  1.,  0.,  1.]),
          ([-0.5, -0.5,  0. ], [ 0.,  0.], [ 0.,  0.,  1.], [ 0.,  0.,  0.,  1.]),
          ([ 0.5, -0.5,  0. ], [ 1.,  0.], [ 0.,  0.,  1.], [ 1.,  0.,  0.,  1.])],
         dtype=[('position', '<f4', (3,)), ('uv', '<f4', (2,)), ('normal', '<f4', (3,)), ('colour', '<f4', (4,))]), array([[0, 2, 1],
          [2, 3, 1]], dtype=uint32), array([[0, 2],
          [2, 3],
          [3, 1],
          [1, 0]], dtype=uint32))
sorted(colour.PRIMITIVE_METHODS)
['Cube', 'Grid']
colour.primitive_vertices("Quad MPL")
array([[ 0.,  0.,  0.],
       [ 1.,  0.,  0.],
       [ 1.,  1.,  0.],
       [ 0.,  1.,  0.]])
sorted(colour.PRIMITIVE_VERTICES_METHODS)
['Cube MPL', 'Grid MPL', 'Quad MPL', 'Sphere']

3.20 Plotting - colour.plotting#

Most of the objects are available from the colour.plotting namespace:

from colour.plotting import *

colour_style()

3.20.1 Visible Spectrum#

plot_visible_spectrum("CIE 1931 2 Degree Standard Observer")
_images/Examples_Plotting_Visible_Spectrum.png

3.20.2 Spectral Distribution#

plot_single_illuminant_sd("FL1")
_images/Examples_Plotting_Illuminant_F1_SD.png

3.20.3 Blackbody#

blackbody_sds = [
    colour.sd_blackbody(i, colour.SpectralShape(0, 10000, 10))
    for i in range(1000, 15000, 1000)
]
plot_multi_sds(
    blackbody_sds,
    y_label="W / (sr m$^2$) / m",
    plot_kwargs={"use_sd_colours": True, "normalise_sd_colours": True},
    legend_location="upper right",
    bounding_box=(0, 1250, 0, 2.5e6),
)
_images/Examples_Plotting_Blackbodies.png

3.20.4 Colour Matching Functions#

plot_single_cmfs(
    "Stockman & Sharpe 2 Degree Cone Fundamentals",
    y_label="Sensitivity",
    bounding_box=(390, 870, 0, 1.1),
)
_images/Examples_Plotting_Cone_Fundamentals.png

3.20.5 Luminous Efficiency#

sd_mesopic_luminous_efficiency_function = (
    colour.sd_mesopic_luminous_efficiency_function(0.2)
)
plot_multi_sds(
    (
        sd_mesopic_luminous_efficiency_function,
        colour.PHOTOPIC_LEFS["CIE 1924 Photopic Standard Observer"],
        colour.SCOTOPIC_LEFS["CIE 1951 Scotopic Standard Observer"],
    ),
    y_label="Luminous Efficiency",
    legend_location="upper right",
    y_tighten=True,
    margins=(0, 0, 0, 0.1),
)
_images/Examples_Plotting_Luminous_Efficiency.png

3.20.6 Colour Checker#

from colour.characterisation.dataset.colour_checkers.sds import (
    COLOURCHECKER_INDEXES_TO_NAMES_MAPPING,
)

plot_multi_sds(
    [
        colour.SDS_COLOURCHECKERS["BabelColor Average"][value]
        for key, value in sorted(COLOURCHECKER_INDEXES_TO_NAMES_MAPPING.items())
    ],
    plot_kwargs={
        "use_sd_colours": True,
    },
    title=("BabelColor Average - " "Spectral Distributions"),
)
_images/Examples_Plotting_BabelColor_Average.png
plot_single_colour_checker("ColorChecker 2005", text_kwargs={"visible": False})
_images/Examples_Plotting_ColorChecker_2005.png

3.20.7 Chromaticities Prediction#

plot_corresponding_chromaticities_prediction(2, "Von Kries", "Bianco 2010")
_images/Examples_Plotting_Chromaticities_Prediction.png

3.20.8 Chromaticities#

import numpy as np

RGB = np.random.random((32, 32, 3))
plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(
    RGB,
    "ITU-R BT.709",
    colourspaces=["ACEScg", "S-Gamut"],
    show_pointer_gamut=True,
)
_images/Examples_Plotting_Chromaticities_CIE_1931_Chromaticity_Diagram.png

3.20.9 Colour Rendering Index Bars#

plot_single_sd_colour_rendering_index_bars(colour.SDS_ILLUMINANTS["FL2"])
_images/Examples_Plotting_CRI.png

3.20.10 ANSI/IES TM-30-18 Colour Rendition Report#

plot_single_sd_colour_rendition_report(colour.SDS_ILLUMINANTS["FL2"])
_images/Examples_Plotting_Colour_Rendition_Report.png

3.20.11 Gamut Section#

plot_visible_spectrum_section(section_colours="RGB", section_opacity=0.15)
_images/Examples_Plotting_Plot_Visible_Spectrum_Section.png
plot_RGB_colourspace_section("sRGB", section_colours="RGB", section_opacity=0.15)
_images/Examples_Plotting_Plot_RGB_Colourspace_Section.png

3.20.12 Colour Temperature#

plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(["A", "B", "C"])
_images/Examples_Plotting_CCT_CIE_1960_UCS_Chromaticity_Diagram.png

4 User Guide#

User Guide#

The user guide provides an overview of Colour and explains important concepts and features, details can be found in the API Reference.

Tutorial#

Note

An interactive version of the tutorial is available via Google Colab.

Colour spreads over various domains of Colour Science, from colour models to optical phenomena, this tutorial does not give a complete overview of the API but is a good introduction to the main concepts.

Note

A directory with examples is available at this path in Colour installation: colour/examples. It can also be explored directly on Github.

from colour.plotting import *

colour_style()

plot_visible_spectrum()
_images/Tutorial_Visible_Spectrum.png

Overview#

Colour is organised around various sub-packages:

  • adaptation: Chromatic adaptation models and transformations.

  • algebra: Algebra utilities.

  • appearance: Colour appearance models.

  • biochemistry: Biochemistry computations.

  • blindness: Colour vision deficiency models.

  • characterisation: Colour correction, camera and display characterisation.

  • colorimetry: Core objects for colour computations.

  • constants: CIE and CODATA constants.

  • continuous: Base objects for continuous data representation.

  • contrast: Objects for contrast sensitivity computation.

  • corresponding: Corresponding colour chromaticities computations.

  • difference: Colour difference computations.

  • geometry: Geometry primitives generation.

  • graph: Graph for automatic colour conversions.

  • hints: Type hints for annotations.

  • io: Input / output objects for reading and writing data.

  • models: Colour models.

  • notation: Colour notation systems.

  • phenomena: Computation of various optical phenomena.

  • plotting: Diagrams, figures, etc…

  • quality: Colour quality computation.

  • recovery: Reflectance recovery.

  • temperature: Colour temperature and correlated colour temperature computation.

  • utilities: Various utilities and data structures.

  • volume: Colourspace volumes computation and optimal colour stimuli.

Most of the public API is available from the root colour namespace:

import colour

print(colour.__all__[:5] + ["..."])
['domain_range_scale', 'get_domain_range_scale', 'set_domain_range_scale', 'CHROMATIC_ADAPTATION_METHODS', 'CHROMATIC_ADAPTATION_TRANSFORMS', '...']

The various sub-packages also expose their public API:

from pprint import pprint

for sub_package in (
    "adaptation",
    "algebra",
    "appearance",
    "biochemistry",
    "blindness",
    "characterisation",
    "colorimetry",
    "constants",
    "continuous",
    "contrast",
    "corresponding",
    "difference",
    "geometry",
    "graph",
    "hints",
    "io",
    "models",
    "notation",
    "phenomena",
    "plotting",
    "quality",
    "recovery",
    "temperature",
    "utilities",
    "volume",
):
    print(sub_package.title())
    pprint(getattr(colour, sub_package).__all__[:5] + ["..."])
    print("\n")
Adaptation
['CHROMATIC_ADAPTATION_TRANSFORMS',
 'CAT_BIANCO2010',
 'CAT_BRADFORD',
 'CAT_CAT02',
 'CAT_CAT02_BRILL2008',
 '...']


Algebra
['get_sdiv_mode',
 'set_sdiv_mode',
 'sdiv_mode',
 'sdiv',
 'is_spow_enabled',
 '...']


Appearance
['InductionFactors_Hunt',
 'VIEWING_CONDITIONS_HUNT',
 'CAM_Specification_Hunt',
 'XYZ_to_Hunt',
 'CAM_Specification_ATD95',
 '...']


Biochemistry
['REACTION_RATE_MICHAELISMENTEN_METHODS',
 'reaction_rate_MichaelisMenten',
 'SUBSTRATE_CONCENTRATION_MICHAELISMENTEN_METHODS',
 'substrate_concentration_MichaelisMenten',
 'reaction_rate_MichaelisMenten_Michaelis1913',
 '...']


Blindness
['CVD_MATRICES_MACHADO2010',
 'msds_cmfs_anomalous_trichromacy_Machado2009',
 'matrix_anomalous_trichromacy_Machado2009',
 'matrix_cvd_Machado2009',
 '...']


Characterisation
['RGB_CameraSensitivities',
 'RGB_DisplayPrimaries',
 'MSDS_ACES_RICD',
 'MSDS_CAMERA_SENSITIVITIES',
 'CCS_COLOURCHECKERS',
 '...']


Colorimetry
['SpectralShape',
 'SPECTRAL_SHAPE_DEFAULT',
 'SpectralDistribution',
 'MultiSpectralDistributions',
 'reshape_sd',
 '...']


Constants
['CONSTANT_K_M',
 'CONSTANT_KP_M',
 'CONSTANT_AVOGADRO',
 'CONSTANT_BOLTZMANN',
 'CONSTANT_LIGHT_SPEED',
 '...']


Continuous
['AbstractContinuousFunction', 'Signal', 'MultiSignals', '...']


Contrast
['optical_MTF_Barten1999',
 'pupil_diameter_Barten1999',
 'sigma_Barten1999',
 'retinal_illuminance_Barten1999',
 'maximum_angular_size_Barten1999',
 '...']


Corresponding
['BRENEMAN_EXPERIMENTS',
 'BRENEMAN_EXPERIMENT_PRIMARIES_CHROMATICITIES',
 'CorrespondingColourDataset',
 'CorrespondingChromaticitiesPrediction',
 'corresponding_chromaticities_prediction_CIE1994',
 '...']


Difference
['delta_E_CAM02LCD',
 'delta_E_CAM02SCD',
 'delta_E_CAM02UCS',
 'delta_E_CAM16LCD',
 'delta_E_CAM16SCD',
 '...']


Geometry
['ellipse_coefficients_general_form',
 'ellipse_coefficients_canonical_form',
 'point_at_angle_on_ellipse',
 'ellipse_fitting_Halir1998',
 'ELLIPSE_FITTING_METHODS',
 '...']


Graph
['CONVERSION_GRAPH',
 'CONVERSION_GRAPH_NODE_LABELS',
 'describe_conversion_path',
 'convert',
 '...']


Hints
['ArrayLike', 'NDArray', 'ModuleType', 'Any', 'Callable', '...']


Io
['LUT1D',
 'LUT3x1D',
 'LUT3D',
 'LUT_to_LUT',
 'AbstractLUTSequenceOperator',
 '...']


Models
['COLOURSPACE_MODELS',
 'COLOURSPACE_MODELS_AXIS_LABELS',
 'COLOURSPACE_MODELS_DOMAIN_RANGE_SCALE_1_TO_REFERENCE',
 'Jab_to_JCh',
 'JCh_to_Jab',
 '...']


Notation
['CSS_COLOR_3_BASIC',
 'CSS_COLOR_3_EXTENDED',
 'CSS_COLOR_3',
 'MUNSELL_COLOURS_ALL',
 'MUNSELL_COLOURS_1929',
 '...']


Phenomena
['scattering_cross_section',
 'rayleigh_optical_depth',
 'rayleigh_scattering',
 'sd_rayleigh_scattering',
 '...']


Plotting
['SD_ASTMG173_ETR',
 'SD_ASTMG173_GLOBAL_TILT',
 'SD_ASTMG173_DIRECT_CIRCUMSOLAR',
 'CONSTANTS_COLOUR_STYLE',
 'CONSTANTS_ARROW_STYLE',
 '...']


Quality
['SDS_TCS',
 'SDS_VS',
 'ColourRendering_Specification_CIE2017',
 'colour_fidelity_index_CIE2017',
 'ColourQuality_Specification_ANSIIESTM3018',
 '...']


Recovery
['SPECTRAL_SHAPE_BASIS_FUNCTIONS_DYER2017',
 'BASIS_FUNCTIONS_DYER2017',
 'SPECTRAL_SHAPE_sRGB_MALLETT2019',
 'MSDS_BASIS_FUNCTIONS_sRGB_MALLETT2019',
 'SPECTRAL_SHAPE_OTSU2018',
 '...']


Temperature
['xy_to_CCT_CIE_D',
 'CCT_to_xy_CIE_D',
 'xy_to_CCT_Hernandez1999',
 'CCT_to_xy_Hernandez1999',
 'xy_to_CCT_Kang2002',
 '...']


Utilities
['Lookup',
 'Structure',
 'CanonicalMapping',
 'LazyCanonicalMapping',
 'Node',
 '...']


Volume
['OPTIMAL_COLOUR_STIMULI_ILLUMINANTS',
 'is_within_macadam_limits',
 'is_within_mesh_volume',
 'is_within_pointer_gamut',
 'generate_pulse_waves',
 '...']

The codebase is documented and most docstrings have usage examples:

print(colour.temperature.CCT_to_uv_Ohno2013.__doc__)
Return the *CIE UCS* colourspace *uv* chromaticity coordinates from given
correlated colour temperature :math:`T_{cp}`, :math:`\Delta_{uv}` and
colour matching functions using *Ohno (2013)* method.

Parameters
----------
CCT_D_uv
    Correlated colour temperature :math:`T_{cp}`, :math:`\Delta_{uv}`.
cmfs
    Standard observer colour matching functions, default to the
    *CIE 1931 2 Degree Standard Observer*.

Returns
-------
:class:`numpy.ndarray`
    *CIE UCS* colourspace *uv* chromaticity coordinates.

References
----------
:cite:`Ohno2014a`

Examples
--------
from colour import MSDS_CMFS, SPECTRAL_SHAPE_DEFAULT
cmfs = (
    MSDS_CMFS["CIE 1931 2 Degree Standard Observer"]
    .copy()
    .align(SPECTRAL_SHAPE_DEFAULT)
)
CCT_D_uv = np.array([6507.4342201047066, 0.003223690901513])
CCT_to_uv_Ohno2013(CCT_D_uv, cmfs)  # doctest: +ELLIPSIS
array([ 0.1977999...,  0.3122004...])

At the core of Colour is the colour.colorimetry sub-package, it defines the objects needed for spectral computations and many others:

pprint(colour.colorimetry.__all__)
['SpectralShape',
 'SPECTRAL_SHAPE_DEFAULT',
 'SpectralDistribution',
 'MultiSpectralDistributions',
 'reshape_sd',
 'reshape_msds',
 'sds_and_msds_to_sds',
 'sds_and_msds_to_msds',
 'planck_law',
 'blackbody_spectral_radiance',
 'sd_blackbody',
 'rayleigh_jeans_law',
 'sd_rayleigh_jeans',
 'LMS_ConeFundamentals',
 'RGB_ColourMatchingFunctions',
 'XYZ_ColourMatchingFunctions',
 'CCS_ILLUMINANTS',
 'MSDS_CMFS',
 'MSDS_CMFS_LMS',
 'MSDS_CMFS_RGB',
 'MSDS_CMFS_STANDARD_OBSERVER',
 'SDS_BASIS_FUNCTIONS_CIE_ILLUMINANT_D_SERIES',
 'SDS_ILLUMINANTS',
 'SDS_LEFS',
 'SDS_LEFS_PHOTOPIC',
 'SDS_LEFS_SCOTOPIC',
 'TVS_ILLUMINANTS',
 'TVS_ILLUMINANTS_HUNTERLAB',
 'CCS_LIGHT_SOURCES',
 'SDS_LIGHT_SOURCES',
 'sd_constant',
 'sd_zeros',
 'sd_ones',
 'msds_constant',
 'msds_zeros',
 'msds_ones',
 'SD_GAUSSIAN_METHODS',
 'sd_gaussian',
 'sd_gaussian_normal',
 'sd_gaussian_fwhm',
 'SD_SINGLE_LED_METHODS',
 'sd_single_led',
 'sd_single_led_Ohno2005',
 'SD_MULTI_LEDS_METHODS',
 'sd_multi_leds',
 'sd_multi_leds_Ohno2005',
 'SD_TO_XYZ_METHODS',
 'MSDS_TO_XYZ_METHODS',
 'sd_to_XYZ',
 'msds_to_XYZ',
 'SPECTRAL_SHAPE_ASTME308',
 'handle_spectral_arguments',
 'lagrange_coefficients_ASTME2022',
 'tristimulus_weighting_factors_ASTME2022',
 'adjust_tristimulus_weighting_factors_ASTME308',
 'sd_to_XYZ_integration',
 'sd_to_XYZ_tristimulus_weighting_factors_ASTME308',
 'sd_to_XYZ_ASTME308',
 'msds_to_XYZ_integration',
 'msds_to_XYZ_ASTME308',
 'wavelength_to_XYZ',
 'spectral_uniformity',
 'BANDPASS_CORRECTION_METHODS',
 'bandpass_correction',
 'bandpass_correction_Stearns1988',
 'sd_CIE_standard_illuminant_A',
 'sd_CIE_illuminant_D_series',
 'daylight_locus_function',
 'sd_mesopic_luminous_efficiency_function',
 'mesopic_weighting_function',
 'LIGHTNESS_METHODS',
 'lightness',
 'lightness_Glasser1958',
 'lightness_Wyszecki1963',
 'lightness_CIE1976',
 'lightness_Fairchild2010',
 'lightness_Fairchild2011',
 'lightness_Abebe2017',
 'intermediate_lightness_function_CIE1976',
 'LUMINANCE_METHODS',
 'luminance',
 'luminance_Newhall1943',
 'luminance_ASTMD1535',
 'luminance_CIE1976',
 'luminance_Fairchild2010',
 'luminance_Fairchild2011',
 'luminance_Abebe2017',
 'intermediate_luminance_function_CIE1976',
 'dominant_wavelength',
 'complementary_wavelength',
 'excitation_purity',
 'colorimetric_purity',
 'luminous_flux',
 'luminous_efficiency',
 'luminous_efficacy',
 'RGB_10_degree_cmfs_to_LMS_10_degree_cmfs',
 'RGB_2_degree_cmfs_to_XYZ_2_degree_cmfs',
 'RGB_10_degree_cmfs_to_XYZ_10_degree_cmfs',
 'LMS_2_degree_cmfs_to_XYZ_2_degree_cmfs',
 'LMS_10_degree_cmfs_to_XYZ_10_degree_cmfs',
 'WHITENESS_METHODS',
 'whiteness',
 'whiteness_Berger1959',
 'whiteness_Taube1960',
 'whiteness_Stensby1968',
 'whiteness_ASTME313',
 'whiteness_Ganz1979',
 'whiteness_CIE2004',
 'YELLOWNESS_METHODS',
 'yellowness',
 'yellowness_ASTMD1925',
 'yellowness_ASTME313_alternative',
 'YELLOWNESS_COEFFICIENTS_ASTME313',
 'yellowness_ASTME313']

Colour computations leverage a comprehensive quantity of datasets available in most sub-packages, for example the colour.colorimetry.datasets defines the following components:

pprint(colour.colorimetry.datasets.__all__)
['MSDS_CMFS',
 'MSDS_CMFS_LMS',
 'MSDS_CMFS_RGB',
 'MSDS_CMFS_STANDARD_OBSERVER',
 'CCS_ILLUMINANTS',
 'SDS_BASIS_FUNCTIONS_CIE_ILLUMINANT_D_SERIES',
 'TVS_ILLUMINANTS_HUNTERLAB',
 'SDS_ILLUMINANTS',
 'TVS_ILLUMINANTS',
 'CCS_LIGHT_SOURCES',
 'SDS_LIGHT_SOURCES',
 'SDS_LEFS',
 'SDS_LEFS_PHOTOPIC',
 'SDS_LEFS_SCOTOPIC']

From Spectral Distribution#

Whether it be a sample spectral distribution, colour matching functions or illuminants, spectral data is manipulated using an object built with the colour.SpectralDistribution class or based on it:

# Defining a sample spectral distribution data.
data_sample = {
    380: 0.048,
    385: 0.051,
    390: 0.055,
    395: 0.060,
    400: 0.065,
    405: 0.068,
    410: 0.068,
    415: 0.067,
    420: 0.064,
    425: 0.062,
    430: 0.059,
    435: 0.057,
    440: 0.055,
    445: 0.054,
    450: 0.053,
    455: 0.053,
    460: 0.052,
    465: 0.052,
    470: 0.052,
    475: 0.053,
    480: 0.054,
    485: 0.055,
    490: 0.057,
    495: 0.059,
    500: 0.061,
    505: 0.062,
    510: 0.065,
    515: 0.067,
    520: 0.070,
    525: 0.072,
    530: 0.074,
    535: 0.075,
    540: 0.076,
    545: 0.078,
    550: 0.079,
    555: 0.082,
    560: 0.087,
    565: 0.092,
    570: 0.100,
    575: 0.107,
    580: 0.115,
    585: 0.122,
    590: 0.129,
    595: 0.134,
    600: 0.138,
    605: 0.142,
    610: 0.146,
    615: 0.150,
    620: 0.154,
    625: 0.158,
    630: 0.163,
    635: 0.167,
    640: 0.173,
    645: 0.180,
    650: 0.188,
    655: 0.196,
    660: 0.204,
    665: 0.213,
    670: 0.222,
    675: 0.231,
    680: 0.242,
    685: 0.251,
    690: 0.261,
    695: 0.271,
    700: 0.282,
    705: 0.294,
    710: 0.305,
    715: 0.318,
    720: 0.334,
    725: 0.354,
    730: 0.372,
    735: 0.392,
    740: 0.409,
    745: 0.420,
    750: 0.436,
    755: 0.450,
    760: 0.462,
    765: 0.465,
    770: 0.448,
    775: 0.432,
    780: 0.421,
}

sd = colour.SpectralDistribution(data_sample, name="Sample")
print(repr(sd))
SpectralDistribution([[  3.80000000e+02,   4.80000000e-02],
                      [  3.85000000e+02,   5.10000000e-02],
                      [  3.90000000e+02,   5.50000000e-02],
                      [  3.95000000e+02,   6.00000000e-02],
                      [  4.00000000e+02,   6.50000000e-02],
                      [  4.05000000e+02,   6.80000000e-02],
                      [  4.10000000e+02,   6.80000000e-02],
                      [  4.15000000e+02,   6.70000000e-02],
                      [  4.20000000e+02,   6.40000000e-02],
                      [  4.25000000e+02,   6.20000000e-02],
                      [  4.30000000e+02,   5.90000000e-02],
                      [  4.35000000e+02,   5.70000000e-02],
                      [  4.40000000e+02,   5.50000000e-02],
                      [  4.45000000e+02,   5.40000000e-02],
                      [  4.50000000e+02,   5.30000000e-02],
                      [  4.55000000e+02,   5.30000000e-02],
                      [  4.60000000e+02,   5.20000000e-02],
                      [  4.65000000e+02,   5.20000000e-02],
                      [  4.70000000e+02,   5.20000000e-02],
                      [  4.75000000e+02,   5.30000000e-02],
                      [  4.80000000e+02,   5.40000000e-02],
                      [  4.85000000e+02,   5.50000000e-02],
                      [  4.90000000e+02,   5.70000000e-02],
                      [  4.95000000e+02,   5.90000000e-02],
                      [  5.00000000e+02,   6.10000000e-02],
                      [  5.05000000e+02,   6.20000000e-02],
                      [  5.10000000e+02,   6.50000000e-02],
                      [  5.15000000e+02,   6.70000000e-02],
                      [  5.20000000e+02,   7.00000000e-02],
                      [  5.25000000e+02,   7.20000000e-02],
                      [  5.30000000e+02,   7.40000000e-02],
                      [  5.35000000e+02,   7.50000000e-02],
                      [  5.40000000e+02,   7.60000000e-02],
                      [  5.45000000e+02,   7.80000000e-02],
                      [  5.50000000e+02,   7.90000000e-02],
                      [  5.55000000e+02,   8.20000000e-02],
                      [  5.60000000e+02,   8.70000000e-02],
                      [  5.65000000e+02,   9.20000000e-02],
                      [  5.70000000e+02,   1.00000000e-01],
                      [  5.75000000e+02,   1.07000000e-01],
                      [  5.80000000e+02,   1.15000000e-01],
                      [  5.85000000e+02,   1.22000000e-01],
                      [  5.90000000e+02,   1.29000000e-01],
                      [  5.95000000e+02,   1.34000000e-01],
                      [  6.00000000e+02,   1.38000000e-01],
                      [  6.05000000e+02,   1.42000000e-01],
                      [  6.10000000e+02,   1.46000000e-01],
                      [  6.15000000e+02,   1.50000000e-01],
                      [  6.20000000e+02,   1.54000000e-01],
                      [  6.25000000e+02,   1.58000000e-01],
                      [  6.30000000e+02,   1.63000000e-01],
                      [  6.35000000e+02,   1.67000000e-01],
                      [  6.40000000e+02,   1.73000000e-01],
                      [  6.45000000e+02,   1.80000000e-01],
                      [  6.50000000e+02,   1.88000000e-01],
                      [  6.55000000e+02,   1.96000000e-01],
                      [  6.60000000e+02,   2.04000000e-01],
                      [  6.65000000e+02,   2.13000000e-01],
                      [  6.70000000e+02,   2.22000000e-01],
                      [  6.75000000e+02,   2.31000000e-01],
                      [  6.80000000e+02,   2.42000000e-01],
                      [  6.85000000e+02,   2.51000000e-01],
                      [  6.90000000e+02,   2.61000000e-01],
                      [  6.95000000e+02,   2.71000000e-01],
                      [  7.00000000e+02,   2.82000000e-01],
                      [  7.05000000e+02,   2.94000000e-01],
                      [  7.10000000e+02,   3.05000000e-01],
                      [  7.15000000e+02,   3.18000000e-01],
                      [  7.20000000e+02,   3.34000000e-01],
                      [  7.25000000e+02,   3.54000000e-01],
                      [  7.30000000e+02,   3.72000000e-01],
                      [  7.35000000e+02,   3.92000000e-01],
                      [  7.40000000e+02,   4.09000000e-01],
                      [  7.45000000e+02,   4.20000000e-01],
                      [  7.50000000e+02,   4.36000000e-01],
                      [  7.55000000e+02,   4.50000000e-01],
                      [  7.60000000e+02,   4.62000000e-01],
                      [  7.65000000e+02,   4.65000000e-01],
                      [  7.70000000e+02,   4.48000000e-01],
                      [  7.75000000e+02,   4.32000000e-01],
                      [  7.80000000e+02,   4.21000000e-01]],
                     interpolator=SpragueInterpolator,
                     interpolator_args={},
                     extrapolator=Extrapolator,
                     extrapolator_args={u'right': None, u'method': u'Constant', u'left': None})

The sample spectral distribution can be easily plotted against the visible spectrum:

# Plotting the sample spectral distribution.
plot_single_sd(sd)
_images/Tutorial_Sample_SD.png

With the sample spectral distribution defined, its shape is retrieved as follows:

# Displaying the sample spectral distribution shape.
print(sd.shape)
(380.0, 780.0, 5.0)

The returned shape is an instance of the colour.SpectralShape class:

repr(sd.shape)
'SpectralShape(380.0, 780.0, 5.0)'

The colour.SpectralShape class is used throughout Colour to define spectral dimensions and is instantiated as follows:

# Using *colour.SpectralShape* with iteration.
shape = colour.SpectralShape(start=0, end=10, interval=1)
for wavelength in shape:
    print(wavelength)

# *colour.SpectralShape.wavelengths* property is providing the complete
# range of wavelengths.
shape = colour.SpectralShape(0, 10, 0.5)
shape.wavelengths
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
array([  0. ,   0.5,   1. ,   1.5,   2. ,   2.5,   3. ,   3.5,   4. ,
         4.5,   5. ,   5.5,   6. ,   6.5,   7. ,   7.5,   8. ,   8.5,
         9. ,   9.5,  10. ])

Colour defines three convenient objects to create constant spectral distributions:

  • colour.sd_constant

  • colour.sd_zeros

  • colour.sd_ones

# Defining a constant spectral distribution.
sd_constant = colour.sd_constant(100)
print('"Constant Spectral Distribution"')
print(sd_constant.shape)
print(sd_constant[400])

# Defining a zeros filled spectral distribution.
print('\n"Zeros Filled Spectral Distribution"')
sd_zeros = colour.sd_zeros()
print(sd_zeros.shape)
print(sd_zeros[400])

# Defining a ones filled spectral distribution.
print('\n"Ones Filled Spectral Distribution"')
sd_ones = colour.sd_ones()
print(sd_ones.shape)
print(sd_ones[400])
"Constant Spectral Distribution"
(360.0, 780.0, 1.0)
100.0

"Zeros Filled Spectral Distribution"
(360.0, 780.0, 1.0)
0.0

"Ones Filled Spectral Distribution"
(360.0, 780.0, 1.0)
1.0

By default the shape used by colour.sd_constant, colour.sd_zeros and colour.sd_ones is the one defined by the colour.SPECTRAL_SHAPE_DEFAULT attribute and based on ASTM E308-15 practise shape.

print(repr(colour.SPECTRAL_SHAPE_DEFAULT))
SpectralShape(360, 780, 1)

A custom shape can be passed to construct a constant spectral distribution with user defined dimensions:

colour.sd_ones(colour.SpectralShape(400, 700, 5))[450]
1.0

The colour.SpectralDistribution class supports the following arithmetical operations:

  • addition

  • subtraction

  • multiplication

  • division

  • exponentiation

sd1 = colour.sd_ones()
print('"Ones Filled Spectral Distribution"')
print(sd1[400])

print('\n"x2 Constant Multiplied"')
print((sd1 * 2)[400])

print('\n"+ Spectral Distribution"')
print((sd1 + colour.sd_ones())[400])
"Ones Filled Spectral Distribution"
1.0

"x2 Constant Multiplied"
2.0

"+ Spectral Distribution"
2.0

Often interpolation of the spectral distribution is required, this is achieved with the colour.SpectralDistribution.interpolate method. Depending on the wavelengths uniformity, the default interpolation method will differ. Following CIE 167:2005 recommendation: The method developed by Sprague (1880) should be used for interpolating functions having a uniformly spaced independent variable and a Cubic Spline method for non-uniformly spaced independent variable [CIET13805a].

The uniformity of the sample spectral distribution is assessed as follows:

# Checking the sample spectral distribution uniformity.
print(sd.is_uniform())
True

In this case, since the sample spectral distribution is uniform the interpolation defaults to the colour.SpragueInterpolator interpolator.

Note

Interpolation happens in place and may alter the original data, use the colour.SpectralDistribution.copy method to generate a copy of the spectral distribution before interpolation.

# Copying the sample spectral distribution.
sd_copy = sd.copy()

# Interpolating the copied sample spectral distribution.
sd_copy.interpolate(colour.SpectralShape(400, 770, 1))
sd_copy[401]
0.065809599999999996
# Comparing the interpolated spectral distribution with the original one.
plot_multi_sds([sd, sd_copy], bounding_box=[730, 780, 0.25, 0.5])
_images/Tutorial_SD_Interpolation.png

Extrapolation although dangerous can be used to help aligning two spectral distributions together. CIE publication CIE 15:2004 “Colorimetry” recommends that unmeasured values may be set equal to the nearest measured value of the appropriate quantity in truncation [CIET14804f]:

# Extrapolating the copied sample spectral distribution.
sd_copy.extrapolate(colour.SpectralShape(340, 830, 1))
sd_copy[340], sd_copy[830]
(0.065000000000000002, 0.44800000000000018)

The underlying interpolator can be swapped for any of the Colour interpolators:

pprint(
    [
        export
        for export in colour.algebra.interpolation.__all__
        if "Interpolator" in export
    ]
)
[u'KernelInterpolator',
 u'LinearInterpolator',
 u'SpragueInterpolator',
 u'CubicSplineInterpolator',
 u'PchipInterpolator',
 u'NullInterpolator']
# Changing interpolator while trimming the copied spectral distribution.
sd_copy.interpolate(
    colour.SpectralShape(400, 700, 10),
    interpolator=colour.LinearInterpolator,
)
SpectralDistribution([[  4.00000000e+02,   6.50000000e-02],
                      [  4.10000000e+02,   6.80000000e-02],
                      [  4.20000000e+02,   6.40000000e-02],
                      [  4.30000000e+02,   5.90000000e-02],
                      [  4.40000000e+02,   5.50000000e-02],
                      [  4.50000000e+02,   5.30000000e-02],
                      [  4.60000000e+02,   5.20000000e-02],
                      [  4.70000000e+02,   5.20000000e-02],
                      [  4.80000000e+02,   5.40000000e-02],
                      [  4.90000000e+02,   5.70000000e-02],
                      [  5.00000000e+02,   6.10000000e-02],
                      [  5.10000000e+02,   6.50000000e-02],
                      [  5.20000000e+02,   7.00000000e-02],
                      [  5.30000000e+02,   7.40000000e-02],
                      [  5.40000000e+02,   7.60000000e-02],
                      [  5.50000000e+02,   7.90000000e-02],
                      [  5.60000000e+02,   8.70000000e-02],
                      [  5.70000000e+02,   1.00000000e-01],
                      [  5.80000000e+02,   1.15000000e-01],
                      [  5.90000000e+02,   1.29000000e-01],
                      [  6.00000000e+02,   1.38000000e-01],
                      [  6.10000000e+02,   1.46000000e-01],
                      [  6.20000000e+02,   1.54000000e-01],
                      [  6.30000000e+02,   1.63000000e-01],
                      [  6.40000000e+02,   1.73000000e-01],
                      [  6.50000000e+02,   1.88000000e-01],
                      [  6.60000000e+02,   2.04000000e-01],
                      [  6.70000000e+02,   2.22000000e-01],
                      [  6.80000000e+02,   2.42000000e-01],
                      [  6.90000000e+02,   2.61000000e-01],
                      [  7.00000000e+02,   2.82000000e-01]],
                     interpolator=SpragueInterpolator,
                     interpolator_args={},
                     extrapolator=Extrapolator,
                     extrapolator_args={u'right': None, u'method': u'Constant', u'left': None})

The extrapolation behaviour can be changed for Linear method instead of the Constant default method or even use arbitrary constant left and right values:

# Extrapolating the copied sample spectral distribution with *Linear* method.
sd_copy.extrapolate(
    colour.SpectralShape(340, 830, 1),
    extrapolator_kwargs={"method": "Linear", "right": 0},
)
sd_copy[340], sd_copy[830]
(0.046999999999999348, 0.0)

Aligning a spectral distribution is a convenient way to first interpolates the current data within its original bounds, then, if required, extrapolate any missing values to match the requested shape:

# Aligning the cloned sample spectral distribution.
# The spectral distribution is first trimmed as above.
sd_copy.interpolate(colour.SpectralShape(400, 700, 1))
sd_copy.align(colour.SpectralShape(340, 830, 5))
sd_copy[340], sd_copy[830]
(0.065000000000000002, 0.28199999999999975)

The colour.SpectralDistribution class also supports various arithmetic operations like addition, subtraction, multiplication, division or exponentiation with numeric and array_like variables or other colour.SpectralDistribution class instances:

sd = colour.SpectralDistribution(
    {
        410: 0.25,
        420: 0.50,
        430: 0.75,
        440: 1.0,
        450: 0.75,
        460: 0.50,
        480: 0.25,
    }
)

print((sd.copy() + 1).values)
print((sd.copy() * 2).values)
print((sd * [0.35, 1.55, 0.75, 2.55, 0.95, 0.65, 0.15]).values)
print((sd * colour.sd_constant(2, sd.shape) * colour.sd_constant(3, sd.shape)).values)
[ 1.25  1.5   1.75  2.    1.75  1.5   1.25]
[ 0.5  1.   1.5  2.   1.5  1.   0.5]
[ 0.0875  0.775   0.5625  2.55    0.7125  0.325   0.0375]
[ 1.5  3.   4.5  6.   4.5  3.   1.5]

The spectral distribution can be normalised with an arbitrary factor:

print(sd.normalise().values)
print(sd.normalise(100).values)
[ 0.25  0.5   0.75  1.    0.75  0.5   0.25]
[  25.   50.   75.  100.   75.   50.   25.]

A the heart of the colour.SpectralDistribution class is the colour.continuous.Signal class which implements the colour.continuous.Signal.function method.

Evaluating the function for any independent domain \(x \in \mathbb{R}\) variable returns a corresponding range \(y \in \mathbb{R}\) variable.

It adopts an interpolating function encapsulated inside an extrapolating function. The resulting function independent domain, stored as discrete values in the colour.continuous.Signal.domain attribute corresponds with the function dependent and already known range stored in the colour.continuous.Signal.range attribute.

Describing the colour.continuous.Signal class is beyond the scope of this tutorial but the core capability can be described.

import numpy as np

range_ = np.linspace(10, 100, 10)
signal = colour.continuous.Signal(range_)
print(repr(signal))
Signal([[   0.,   10.],
        [   1.,   20.],
        [   2.,   30.],
        [   3.,   40.],
        [   4.,   50.],
        [   5.,   60.],
        [   6.,   70.],
        [   7.,   80.],
        [   8.,   90.],
        [   9.,  100.]],
       interpolator=KernelInterpolator,
       interpolator_kwargs={},
       extrapolator=Extrapolator,
       extrapolator_kwargs={u'right': nan, u'method': u'Constant', u'left': nan})
# Returning the corresponding range *y* variable for any arbitrary independent domain *x* variable.
signal[np.random.uniform(0, 9, 10)]
array([ 94.74700025,  50.62829102,  72.93120155,  81.86179968,
        70.14736394,  83.11336665,  51.17649751,  71.00638621,
        86.94761009,  78.01845818])

Convert to Tristimulus Values#

From a given spectral distribution, CIE XYZ tristimulus values can be calculated:

sd = colour.SpectralDistribution(data_sample)
cmfs = colour.MSDS_CMFS["CIE 1931 2 Degree Standard Observer"]
illuminant = colour.SDS_ILLUMINANTS["D65"]

# Calculating the sample spectral distribution *CIE XYZ* tristimulus values.
XYZ = colour.sd_to_XYZ(sd, cmfs, illuminant)
print(XYZ)
[ 10.97085572   9.70278591   6.05562778]

From CIE XYZ Colourspace#

CIE XYZ is the central colourspace for Colour Science from which many computations are available, expanding to even more computations:

# Displaying objects interacting directly with the *CIE XYZ* colourspace.
pprint(colour.COLOURSPACE_MODELS)
('CAM02LCD',
 'CAM02SCD',
 'CAM02UCS',
 'CAM16LCD',
 'CAM16SCD',
 'CAM16UCS',
 'CIE XYZ',
 'CIE xyY',
 'CIE Lab',
 'CIE Luv',
 'CIE UCS',
 'CIE UVW',
 'DIN99',
 'Hunter Lab',
 'Hunter Rdab',
 'ICaCb',
 'ICtCp',
 'IPT',
 'IPT Ragoo 2021',
 'IgPgTg',
 'Jzazbz',
 'OSA UCS',
 'Oklab',
 'hdr-CIELAB',
 'hdr-IPT',
 'Yrg')

Convert to Display Colours#

CIE XYZ tristimulus values can be converted into sRGB colourspace RGB values in order to display them on screen:

# The output domain of *colour.sd_to_XYZ* is [0, 100] and the input
# domain of *colour.XYZ_to_sRGB* is [0, 1]. It needs to be accounted for,
# thus the input *CIE XYZ* tristimulus values are scaled.
RGB = colour.XYZ_to_sRGB(XYZ / 100)
print(RGB)
[ 0.45675795  0.30986982  0.24861924]
# Plotting the *sRGB* colourspace colour of the *Sample* spectral distribution.
plot_single_colour_swatch(ColourSwatch(RGB, "Sample"), text_kwargs={"size": "x-large"})
_images/Tutorial_Sample_Swatch.png

Generate Colour Rendition Charts#

Likewise, colour values from a colour rendition chart sample can be computed.

Note

This is useful for render time checks in the VFX industry, where a synthetic colour chart can be inserted into a render to ensure the colour management is acting as expected.

The colour.characterisation sub-package contains the dataset for various colour rendition charts:

# Colour rendition charts chromaticity coordinates.
print(sorted(colour.characterisation.CCS_COLOURCHECKERS.keys()))

# Colour rendition charts spectral distributions.
print(sorted(colour.characterisation.SDS_COLOURCHECKERS.keys()))
['BabelColor Average', 'ColorChecker 1976', 'ColorChecker 2005', 'ColorChecker24 - After November 2014', 'ColorChecker24 - Before November 2014', 'TE226 V2', 'babel_average', 'cc2005', 'cca2014', 'ccb2014']
['BabelColor Average', 'ColorChecker N Ohta', 'ISO 17321-1', 'babel_average', 'cc_ohta']

Note

The above cc2005, babel_average and cc_ohta keys are convenient aliases for respectively ColorChecker 2005, BabelColor Average and ColorChecker N Ohta keys.

# Plotting the *sRGB* colourspace colour of *neutral 5 (.70 D)* patch.
patch_name = "neutral 5 (.70 D)"
patch_sd = colour.SDS_COLOURCHECKERS["ColorChecker N Ohta"][patch_name]
XYZ = colour.sd_to_XYZ(patch_sd, cmfs, illuminant)
RGB = colour.XYZ_to_sRGB(XYZ / 100)

plot_single_colour_swatch(
    ColourSwatch(RGB, patch_name.title()), text_kwargs={"size": "x-large"}
)
_images/Tutorial_Neutral5.png

Colour defines a convenient plotting object to draw synthetic colour rendition charts figures:

plot_single_colour_checker(
    colour_checker="ColorChecker 2005", text_kwargs={"visible": False}
)
_images/Tutorial_Colour_Checker.png

Convert to Chromaticity Coordinates#

Given a spectral distribution, chromaticity coordinates CIE xy can be computed using the colour.XYZ_to_xy definition:

# Computing *CIE xy* chromaticity coordinates for the *neutral 5 (.70 D)* patch.
xy = colour.XYZ_to_xy(XYZ)
print(xy)
[ 0.31259787  0.32870029]

Chromaticity coordinates CIE xy can be plotted into the CIE 1931 Chromaticity Diagram:

import matplotlib.pyplot as plt

# Plotting the *CIE 1931 Chromaticity Diagram*.
# The argument *show=False* is passed so that the plot doesn't get
# displayed and can be used as a basis for other plots.
plot_chromaticity_diagram_CIE1931(show=False)

# Plotting the *CIE xy* chromaticity coordinates.
x, y = xy
plt.plot(x, y, "o-", color="white")

# Annotating the plot.
plt.annotate(
    patch_sd.name.title(),
    xy=xy,
    xytext=(-50, 30),
    textcoords="offset points",
    arrowprops=dict(arrowstyle="->", connectionstyle="arc3, rad=-0.2"),
)

# Displaying the plot.
render(
    show=True,
    limits=(-0.1, 0.9, -0.1, 0.9),
    x_tighten=True,
    y_tighten=True,
)
_images/Tutorial_CIE_1931_Chromaticity_Diagram.png

See More#

  • The Basic Concepts page puts an emphasis on basic but important to understand concepts of Colour.

  • The Advanced Concepts page describes some advanced usage scenarios of Colour.

  • The Google Colab How-To guide for Colour shows various techniques to solve specific problems and highlights some interesting use cases.

How-To#

The Google Colab How-To guide for Colour shows various techniques to solve specific problems and highlights some interesting use cases.

Basic Concepts#

This page puts an emphasis on basic concepts of Colour, those are important to understand.

Object Name Categorisation#

The API tries to bundle the objects by categories by naming them with common prefixes which makes introspection and auto-completion easier.

For example, in IPython or Jupyter Notebook, most of the definitions pertaining to the spectral distribution handling can be found as follows:

In [1]: import colour

In [2]: colour.sd_
 sd_blackbody()                            sd_gaussian()                             sd_rayleigh_scattering()                  sd_zeros
 sd_CIE_illuminant_D_series()              sd_mesopic_luminous_efficiency_function() sd_single_led()
 sd_CIE_standard_illuminant_A()            sd_multi_leds()                           sd_to_aces_relative_exposure_values()
 sd_constant()                             sd_ones()                                 sd_to_XYZ

Likewise, for the spectral distribution handling related attributes:

In [2]: colour.SD
                  SD_GAUSSIAN_METHODS   SD_TO_XYZ_METHODS     SDS_ILLUMINANTS       SDS_LIGHT_SOURCES
                  SD_MULTI_LEDS_METHODS SDS_COLOURCHECKERS    SDS_LEFS
                  SD_SINGLE_LED_METHODS SDS_FILTERS           SDS_LENSES

Similarly, all the RGB colourspaces can be individually accessed from the colour.models namespace:

In [2]: colour.models.RGB_COLOURSPACE
                         RGB_COLOURSPACE_ACES2065_1           RGB_COLOURSPACE_ACESPROXY            RGB_COLOURSPACE_APPLE_RGB            RGB_COLOURSPACE_BT470_525
                         RGB_COLOURSPACE_ACESCC               RGB_COLOURSPACE_ADOBE_RGB1998        RGB_COLOURSPACE_BEST_RGB             RGB_COLOURSPACE_BT470_625
                         RGB_COLOURSPACE_ACESCCT              RGB_COLOURSPACE_ADOBE_WIDE_GAMUT_RGB RGB_COLOURSPACE_BETA_RGB             RGB_COLOURSPACE_BT709                >
                         RGB_COLOURSPACE_ACESCG               RGB_COLOURSPACE_ARRI_WIDE_GAMUT_3    RGB_COLOURSPACE_BT2020               RGB_COLOURSPACE_CIE_RGB

Abbreviations#

The following abbreviations are in use in Colour:

  • CAM : Colour Appearance Model

  • CCS : Chromaticity Coordinates

  • CCTF : Colour Component Transfer Function

  • CCT : Correlated Colour Temperature

  • CMY : Cyan, Magenta, Yellow

  • CMYK : Cyan, Magenta, Yellow, Black

  • CVD : Colour Vision Deficiency

  • CV : Code Value

  • EOTF : Electro-Optical Transfer Function

  • IDT : Input Device Transform

  • MSDS : Multi-Spectral Distributions

  • OETF : Optical-Electrical Transfer Function

  • OOTF : Optical-Optical Transfer Function

  • SD : Spectral Distribution

  • TVS : Tristimulus Values

N-Dimensional Array Support#

Most of Colour definitions are fully vectorised and support n-dimensional array by leveraging Numpy.

While it is recommended to use ndarray as input for the API objects, it is possible to use tuples or lists:

import colour

xyY = (0.4316, 0.3777, 0.1008)
colour.xyY_to_XYZ(xyY)
array([ 0.11518475,  0.1008    ,  0.05089373])
xyY = [0.4316, 0.3777, 0.1008]
colour.xyY_to_XYZ(xyY)
array([ 0.11518475,  0.1008    ,  0.05089373])
xyY = [
    (0.4316, 0.3777, 0.1008),
    (0.4316, 0.3777, 0.1008),
    (0.4316, 0.3777, 0.1008),
]
colour.xyY_to_XYZ(xyY)
array([[ 0.11518475,  0.1008    ,  0.05089373],
       [ 0.11518475,  0.1008    ,  0.05089373],
       [ 0.11518475,  0.1008    ,  0.05089373]])

As shown in the above example, there is widespread support for n-dimensional arrays:

import numpy as np

xyY = np.array([0.4316, 0.3777, 0.1008])
xyY = np.tile(xyY, (6, 1))
colour.xyY_to_XYZ(xyY)
array([[ 0.11518475,  0.1008    ,  0.05089373],
       [ 0.11518475,  0.1008    ,  0.05089373],
       [ 0.11518475,  0.1008    ,  0.05089373],
       [ 0.11518475,  0.1008    ,  0.05089373],
       [ 0.11518475,  0.1008    ,  0.05089373],
       [ 0.11518475,  0.1008    ,  0.05089373]])
colour.xyY_to_XYZ(xyY.reshape([2, 3, 3]))
array([[[ 0.11518475,  0.1008    ,  0.05089373],
        [ 0.11518475,  0.1008    ,  0.05089373],
        [ 0.11518475,  0.1008    ,  0.05089373]],

       [[ 0.11518475,  0.1008    ,  0.05089373],
        [ 0.11518475,  0.1008    ,  0.05089373],
        [ 0.11518475,  0.1008    ,  0.05089373]]])

Which enables image processing:

RGB = colour.read_image("_static/Logo_Small_001.png")
RGB = RGB[..., 0:3]  # Discarding alpha channel.
XYZ = colour.sRGB_to_XYZ(RGB)
colour.plotting.plot_image(XYZ, text_kwargs={"text": "sRGB to XYZ"})
_images/Basics_Logo_Small_001_CIE_XYZ.png

Spectral Representation and Continuous Signal#

Floating Point Wavelengths#

Colour current representation of spectral data is atypical and has been influenced by the failures and shortcomings of the previous implementation that required less than ideal code to support floating point wavelengths. Wavelengths should not have to be defined as integer values and it is effectively common to get data from instruments whose domain is returned as floating point values.

For example, the data from an Ocean Insight (Optics) STS-VIS spectrometer is typically saved with 3 digits decimal precision:

Data from Subt2_14-36-15-210.txt Node

Date: Sat Nov 17 14:36:15 NZDT 2018
User: kelsolaar
Spectrometer: S12286
Trigger mode: 0
Resolution mode: 1024 pixels
Integration Time (sec): 5.000000E0
Scans to average: 3
Nonlinearity correction enabled: true
Boxcar width: 3
Baseline correction enabled: true
XAxis mode: Wavelengths
Number of Pixels in Spectrum: 1024
# >>>>>Begin Spectral Data<<<<<
338.028     279.71
338.482     285.43
338.936     291.33
...
821.513     3112.65
822.008     3133.74
822.503     3107.11

A solution to the problem is to quantize the data at integer values but it is often non-desirable. The spectra representation implementation prior to Colour 0.3.11 was relying on a custom mutable mapping which was allowing to retrieve decimal keys within a given precision:

data_1 = {0.1999999998: "Nemo", 0.2000000000: "John"}
apm_1 = ArbitraryPrecisionMapping(data_1, key_decimals=10)
tuple(apm_1.keys())
(0.1999999998, 0.2)
apm_2 = ArbitraryPrecisionMapping(data_1, key_decimals=7)
tuple(apm_2.keys())
(0.2,)

While functional, the approach was brittle and not elegant which triggered a significant amount of rework.

Continuous Signal#

All the spectral distributions in Colour are instances of the colour.SpectralDistribution class (or its sub-classes), a sub-class of the colour.continuous.Signal class which is itself an implementation of the colour.continuous.AbstractContinuousFunction ABCMeta class:

Inheritance diagram of colour.SpectralDistribution

Likewise, the multi-spectral distributions are instances colour.MultiSpectralDistributions class (or its sub-classes), a sub-class of the colour.continuous.MultiSignals class which is a container for multiple colour.continuous.Signal sub-class instances and also implements the colour.continuous.AbstractContinuousFunction ABCMeta class.

Inheritance diagram of colour.MultiSpectralDistributions

The colour.continuous.Signal class implements the Signal.function() method so that evaluating the function for any independent domain \(x \in\mathbb{R}\) variable returns a corresponding range \(y \in\mathbb{R}\) variable.

It adopts an interpolating function encapsulated inside an extrapolating function. The resulting function independent domain, stored as discrete values in the colour.continuous.Signal.domain attribute corresponds with the function dependent and already known range stored in the colour.continuous.Signal.range attribute.

Consequently, it is possible to get the value of a spectral distribution at any given wavelength:

data = {
    500: 0.0651,
    520: 0.0705,
    540: 0.0772,
    560: 0.0870,
    580: 0.1128,
    600: 0.1360,
}
sd = colour.SpectralDistribution(data)
sd[555.5]
0.083453673782958995
Getting, Setting, Indexing and Slicing#

Attention

Indexing a spectral distribution (or multi-spectral distribution) with a numeric (or a numeric sequence) returns the corresponding value(s). Indexing a spectral distribution (or multi-spectral distribution) with a slice returns the values for the corresponding wavelength indexes.

While it is tempting to think that the colour.SpectralDistribution and colour.MultiSpectralDistributions classes behave like Numpy’s ndarray, they do not entirely and some peculiarities exist that make them different.

An important difference lies in the behaviour with respect to getting and setting the values of the data.

Getting the value(s) for a single (or multiple wavelengths) is done by indexing the colour.SpectralDistribution (or colour.MultiSpectralDistributions) class with the a single numeric or array of numeric wavelengths, e.g. sd[555.5] or sd[555.25, 555.25, 555.75].

However, if getting the values using a slice class instance, e.g. sd[0:3], the underlying discrete values for the indexes represented by the slice class instance are returned instead.

As shown in the previous section, getting the value of a wavelength is done as follows:

data = {
    500: 0.0651,
    520: 0.0705,
    540: 0.0772,
    560: 0.0870,
    580: 0.1128,
    600: 0.1360,
}
sd = colour.SpectralDistribution(data)
sd[555]
0.083135180664062502,

Multiple wavelength values can be retrieved as follows:

sd[(555.0, 556.25, 557.5, 558.75, 560.0)]
array([ 0.08313518,  0.08395997,  0.08488108,  0.085897  ,  0.087     ])

However, slices will return the values for the corresponding wavelength indexes:

sd[0:3]
array([ 0.0651,  0.0705,  0.0772])
sd[:]
array([ 0.0651,  0.0705,  0.0772,  0.087 ,  0.1128,  0.136 ])

Note

Indexing a multi-spectral distribution is achieved similarly, it can however be sliced along multiple axes because the data is2-dimensional, e.g. msds[0:3, 0:2].

A copy of the underlying colour.SpectralDistribution and colour.MultiSpectralDistributions classes discretized data can be accessed via the wavelengths and values properties. However, it cannot be changed directly via the properties or slicing:

Attention

The data returned by the wavelengths and values properties is a copy of the underlying colour.SpectralDistribution and colour.MultiSpectralDistributions classes discretized data: It can only be changed indirectly.

data = {
    500: 0.0651,
    520: 0.0705,
    540: 0.0772,
    560: 0.0870,
    580: 0.1128,
    600: 0.1360,
}
sd = colour.SpectralDistribution(data)
# Note: The wavelength 500nm is at index 0.
sd.values[0] = 0
sd[500]
0.065100000000000019

Instead, the values can be set indirectly:

values = sd.values
values[0] = 0
sd.values = values
sd.values
array([ 0.    ,  0.0705,  0.0772,  0.087 ,  0.1128,  0.136 ])

Domain-Range Scales#

Note

This section contains important information.

Colour adopts 4 main input domains and output ranges:

  • Scalars usually in domain-range [0, 1] (or [0, 10] for Munsell Value).

  • Percentages usually in domain-range [0, 100].

  • Degrees usually in domain-range [0, 360].

  • Integers usually in domain-range [0, 2**n -1] where n is the bit depth.

It is error prone but it is also a direct consequence of the inconsistency of the colour science field itself. We have discussed at length about this and we were leaning toward normalisation of the whole API to domain-range [0, 1], we never committed for reasons highlighted by the following points:

  • Colour Scientist performing computations related to Munsell Renotation System would be very surprised if the output Munsell Value was in range [0, 1] or [0, 100].

  • A Visual Effect Industry artist would be astonished to find out that conversion from CIE XYZ to sRGB was yielding values in range [0, 100].

However benefits of having a consistent and predictable domain-range scale are numerous thus with Colour 0.3.12 we have introduced a mechanism to allow users to work within one of the two available domain-range scales.

Scale - Reference#

‘Reference’ is the default domain-range scale of Colour, objects adopt the implemented reference, i.e. paper, publication, etc.., domain-range scale.

The ‘Reference’ domain-range scale is inconsistent, e.g. colour appearance models, spectral conversions are typically in domain-range [0, 100] while RGB models will operate in domain-range [0, 1]. Some objects, e.g. :func:colour.colorimetry.lightness_Fairchild2011 definition have mismatched domain-range: input domain [0, 1] and output range [0, 100].

Scale - 1#

‘1’ is a domain-range scale converting all the relevant objects from Colour public API to domain-range [0, 1]:

  • Scalars in domain-range [0, 10], e.g Munsell Value are scaled by 10.

  • Percentages in domain-range [0, 100] are scaled by 100.

  • Degrees in domain-range [0, 360] are scaled by 360.

  • Integers in domain-range [0, 2**n -1] where n is the bit depth are scaled by 2**n -1.

  • Dimensionless values are unaffected and are indicated with DN.

  • Unaffected values are unaffected and are indicated with UN.

Warning

The conversion to ‘1’ domain-range scale is a soft normalisation and similarly to the ‘Reference’ domain-range scale it is normal to encounter values exceeding 1, e.g. High Dynamic Range Imagery (HDRI) or negative values, e.g. out-of-gamut RGB colourspace values. Some definitions such as colour.models.eotf_ST2084() which decodes absolute luminance values are not affected by any domain-range scales and are indicated with UN.

Understanding the Domain-Range Scale of an Object#

Using colour.adaptation.chromatic_adaptation_CIE1994() definition docstring as an example, the Notes section features two tables.

The first table is for the domain, and lists the input arguments affected by the two domain-range scales and which normalisation they should adopt depending the domain-range scale in use:

Domain

Scale - Reference

Scale - 1

XYZ_1

[0, 100]

[0, 1]

Y_o

[0, 100]

[0, 1]

The second table is for the range and lists the return value of the definition:

Range

Scale - Reference

Scale - 1

XYZ_2

[0, 100]

[0, 1]

Working with the Domain-Range Scales#

The current domain-range scale is returned with the colour.get_domain_range_scale() definition:

import colour

colour.get_domain_range_scale()
u'reference'

Changing from the ‘Reference’ default domain-range scale to ‘1’ is done with the colour.set_domain_range_scale() definition:

XYZ_1 = [28.00, 21.26, 5.27]
xy_o1 = [0.4476, 0.4074]
xy_o2 = [0.3127, 0.3290]
Y_o = 20
E_o1 = 1000
E_o2 = 1000
colour.adaptation.chromatic_adaptation_CIE1994(XYZ_1, xy_o1, xy_o2, Y_o, E_o1, E_o2)
array([ 24.03379521,  21.15621214,  17.64301199])
colour.set_domain_range_scale("1")

XYZ_1 = [0.2800, 0.2126, 0.0527]
Y_o = 0.2
colour.adaptation.chromatic_adaptation_CIE1994(XYZ_1, xy_o1, xy_o2, Y_o, E_o1, E_o2)
array([ 0.24033795,  0.21156212,  0.17643012])

The output tristimulus values with the ‘1’ domain-range scale are equal to those from ‘Reference’ default domain-range scale divided by 100.

Passing incorrectly scaled values to the colour.adaptation.chromatic_adaptation_CIE1994() definition would result in unexpected values and a warning in that case:

colour.set_domain_range_scale("Reference")

colour.adaptation.chromatic_adaptation_CIE1994(XYZ_1, xy_o1, xy_o2, Y_o, E_o1, E_o2)
File "<ipython-input-...>", line 4, in <module>
  E_o2)
File "/colour-science/colour/colour/adaptation/cie1994.py", line 134, in chromatic_adaptation_CIE1994
  warning(('"Y_o" luminance factor must be in [18, 100] domain, '
/colour-science/colour/colour/utilities/verbose.py:207: ColourWarning: "Y_o" luminance factor must be in [18, 100] domain, unpredictable results may occur!
  warn(*args, **kwargs)
array([ 0.17171825,  0.13731098,  0.09972054])

Setting the ‘1’ domain-range scale has the following effect on the colour.adaptation.chromatic_adaptation_CIE1994() definition:

As it expects values in domain [0, 100], scaling occurs and the relevant input values, i.e. the values listed in the domain table, XYZ_1 and Y_o are converted from domain [0, 1] to domain [0, 100] by colour.utilities.to_domain_100() definition and conversely return value XYZ_2 is converted from range [0, 100] to range [0, 1] by colour.utilities.from_range_100() definition.

A convenient alternative to the colour.set_domain_range_scale() definition is the colour.domain_range_scale context manager and decorator. It temporarily overrides Colour domain-range scale with given scale value:

with colour.domain_range_scale("1"):
    colour.adaptation.chromatic_adaptation_CIE1994(XYZ_1, xy_o1, xy_o2, Y_o, E_o1, E_o2)
[ 0.24033795  0.21156212  0.17643012]
Multiprocessing on Windows with Domain-Range Scales#

Windows does not have a fork system call, a consequence is that child processes do not necessarily inherit from changes made to global variables.

It has crucial consequences as Colour stores the current domain-range scale into a global variable.

The solution is to define an initialisation definition that defines the scale upon child processes spawning.

The colour.utilities.multiprocessing_pool context manager conveniently performs the required initialisation so that the domain-range scale is propagated appropriately to child processes.

Safe Power and Division#

Colour default handling of fractional power and zero-division occurring during practical applications is managed via various definitions and context managers.

Safe Power#

NaNs generation occurs when a negative number \(a\) is raised to the fractional power \(p\). This can be avoided using the colour.algebra.spow() definition that raises to the power as follows: \(sign(a) * |a|^p\).

To the extent possible, the colour.algebra.spow() definition has been used throughout the codebase. The default behaviour is controlled with the following definitions:

Safe Division#

NaNs and +/- infs generation occurs when a number \(a\) is divided 0. This can be avoided using the colour.algebra.sdiv() definition. It has been used wherever deemed relevant in the codebase. The default behaviour is controlled with the following definitions:

The following modes are available:

  • Numpy: The current Numpy zero-division handling occurs.

  • Ignore: Zero-division occurs silently.

  • Warning: Zero-division occurs with a warning.

  • Ignore Zero Conversion: Zero-division occurs silently and NaNs or +/- infs values are converted to zeros. See numpy.nan_to_num() definition for more details.

  • Warning Zero Conversion: Zero-division occurs with a warning and NaNs or +/- infs values are converted to zeros. See numpy.nan_to_num() definition for more details.

  • Ignore Limit Conversion: Zero-division occurs silently and NaNs or +/- infs values are converted to zeros or the largest +/- finite floating point values representable by the division result numpy.dtype. See numpy.nan_to_num() definition for more details.

  • Warning Limit Conversion: Zero-division occurs with a warning and NaNs or +/- infs values are converted to zeros or the largest +/- finite floating point values representable by the division result numpy.dtype.

colour.algebra.get_sdiv_mode()
'Ignore Zero Conversion'
colour.algebra.set_sdiv_mode("Numpy")
colour.UCS_to_uv([0, 0, 0])
/Users/kelsolaar/Documents/Development/colour-science/colour/colour/algebra/common.py:317: RuntimeWarning: invalid value encountered in true_divide
  c = a / b
array([ nan,  nan])
colour.algebra.set_sdiv_mode("Ignore Zero Conversion")
colour.UCS_to_uv([0, 0, 0])
array([ 0.,  0.])

Advanced Concepts#

This page describes some advanced usage scenarios of Colour.

Environment#

Various environment variables can be used to modify Colour behaviour at runtime:

  • COLOUR_SCIENCE__DEFAULT_INT_DTYPE: Set the default integer dtype for most of Colour computations. Possible values are int32 and int64 (default). Changing the integer dtype will almost certainly break Colour! With great power comes great responsibility.

  • COLOUR_SCIENCE__DEFAULT_FLOAT_DTYPE: Set the float dtype for most of Colour computations. Possible values are float16, float32 and float64 (default). Changing the float dtype might result in various Colour functionality breaking entirely. With great power comes great responsibility.

  • COLOUR_SCIENCE__COLOUR__DISABLE_CACHING: Disable the caches that can be disabled, useful for debugging purposes.

  • COLOUR_SCIENCE__COLOUR__IMPORT_VAAB_COLOUR: Import vaab/colour injection into Colour namespace. This solves the clash with vaab/colour by loading a known subset of the objects given by vaab/colour-0.1.5 into our namespace.

  • COLOUR_SCIENCE__COLOUR__SHOW_WARNINGS_WITH_TRACEBACK: Result in the warnings.showwarning() definition to be replaced with the colour.utilities.show_warning() definition and thus providing complete traceback from the point where the warning occurred.

Caching#

Colour uses various internal caches to improve speed and prevent redundant processes, notably for spectral related computations.

The internal caches are managed with the colour.utilities.CACHE_REGISTRY cache registry object:

import colour

print(colour.utilities.CACHE_REGISTRY)
{'colour.colorimetry.spectrum._CACHE_RESHAPED_SDS_AND_MSDS': '0 item(s)',
 'colour.colorimetry.tristimulus_values._CACHE_LAGRANGE_INTERPOLATING_COEFFICIENTS': '0 '
                                                                                     'item(s)',
 'colour.colorimetry.tristimulus_values._CACHE_SD_TO_XYZ': '0 item(s)',
 'colour.colorimetry.tristimulus_values._CACHE_TRISTIMULUS_WEIGHTING_FACTORS': '0 '
                                                                               'item(s)',
 'colour.quality.cfi2017._CACHE_TCS_CIE2017': '0 item(s)',
 'colour.volume.macadam_limits._CACHE_OPTIMAL_COLOUR_STIMULI_XYZ': '0 item(s)',
 'colour.volume.macadam_limits._CACHE_OPTIMAL_COLOUR_STIMULI_XYZ_TRIANGULATIONS': '0 '
                                                                                  'item(s)',
 'colour.volume.spectrum._CACHE_OUTER_SURFACE_XYZ': '0 item(s)',
 'colour.volume.spectrum._CACHE_OUTER_SURFACE_XYZ_POINTS': '0 item(s)'}

See colour.utilities.CacheRegistry class documentation for more information on how to manage the cache registry.

Using Colour without Scipy#

With the release of Colour 0.3.8, SciPy became a requirement.

Scipy is notoriously hard to compile, especially on Windows. Some Digital Content Creation (DCC) applications are shipping Python interpreters compiled with versions of Visual Studio such as 2011 or 2015. Those are incompatible with the Python Wheels commonly built with Visual Studio 2008 (Python 2.7) or Visual Studio 2017 (Python 3.6).

It is however possible to use Colour in a partially broken state and mock Scipy by using the mock_for_colour.py module.

Assuming it is available for import, a typical usage would be as follows:

import sys
from mock_for_colour import MockModule

for module in (
    "scipy",
    "scipy.interpolate",
    "scipy.linalg",
    "scipy.ndimage",
    "scipy.ndimage.filters",
    "scipy.spatial",
    "scipy.spatial.distance",
    "scipy.optimize",
):
    sys.modules[str(module)] = MockModule(str(module))

import colour

xyY = (0.4316, 0.3777, 0.1008)
colour.xyY_to_XYZ(xyY)
array([ 0.11518475,  0.1008    ,  0.05089373])

Or directly using the mock_scipy_for_colour definition:

from mock_for_colour import mock_scipy_for_colour

mock_scipy_for_colour()

import colour

xyY = (0.4316, 0.3777, 0.1008)
colour.xyY_to_XYZ(xyY)
array([ 0.11518475,  0.1008    ,  0.05089373])

Anything relying on the spectral code will be unusable, but a great amount of useful functionality will still be available.

Bibliography#

[APLR17]

Mekides Assefa Abebe, Tania Pouli, Mohamed-Chaker Larabi, and Erik Reinhard. Perceptual Lightness Modeling for High-Dynamic-Range Imaging. ACM Transactions on Applied Perception, 15(1):1–19, July 2017. doi:10.1145/3086577.

[Bar99]

Peter G. Barten. Contrast Sensitivity of the Human Eye and Its Effects on Image Quality. Number 1999. SPIE, December 1999. ISBN 978-0-8194-7849-8. doi:10.1117/3.353254.

[Bar03]

Peter G. J. Barten. Formula for the contrast sensitivity of the human eye. In Yoichi Miyake and D. Rene Rasmussen, editors, Proceedings of SPIE, volume 5294, 231–238. December 2003. doi:10.1117/12.537476.

[BS10]

S. Bianco and R. Schettini. Two new von Kries based chromatic adaptation transforms found by numerical optimization. Color Research & Application, 35(3):184–192, June 2010. doi:10.1002/col.20573.

[BWDS99]

Barry A. Bodhaine, Norman B. Wood, Ellsworth G. Dutton, and James R. Slusser. On Rayleigh Optical Depth Calculations. Journal of Atmospheric and Oceanic Technology, 16(11):1854–1861, November 1999. doi:10.1175/1520-0426(1999)016<1854:ORODC>2.0.CO;2.

[Bor17]

Tim Borer. Private Discussion with Mansencal, T. and Shaw, N. 2017.

[Boua]

Paul Bourke. Intersection point of two line segments in 2 dimensions. http://paulbourke.net/geometry/pointlineplane/.

[Boub]

Paul Bourke. Trilinear Interpolation. http://paulbourke.net/miscellaneous/interpolation/.

[Bre87]

Edwin J. Breneman. Corresponding chromaticities for different states of adaptation to complex visual fields. Journal of the Optical Society of America A, 4(6):1115, June 1987. doi:10.1364/JOSAA.4.001115.

[BS08]

Michael H. Brill and Sabine Susstrunk. Repairing gamut problems in CIECAM02: A progress report. Color Research & Application, 33(5):424–426, October 2008. doi:10.1002/col.20432.

[Bro09]

A. D. Broadbent. Calculation from the Original Experimental Data of the Cie 1931 RGB Standard Observer Spectral Chromaticity Co-Ordinates and Color Matching Functions. http://www.cis.rit.edu/mcsl/research/1931.php, 2009.

[BB09]

Wilhelm Burger and Mark James Burge. Principles of Digital Image Processing. Springer London, London, 2009. ISBN 978-1-84800-194-7. doi:10.1007/978-1-84800-195-4.

[Cab]

Ricardo Cabello. PlaneGeometry.js. https://github.com/mrdoob/three.js/blob/dev/src/geometries/PlaneGeometry.js.

[CTS13]

Renbo Cao, H Joel Trussell, and Renzo Shamey. Comparison of the performance of inverse transformation methods from OSA-UCS to CIEXYZ. Journal of the Optical Society of America A, 30(8):1508, August 2013. doi:10.1364/JOSAA.30.001508.

[CSH+18]

E.C. Carter, J.D. Schanda, R. Hirschler, S. Jost, M.R. Luo, M. Melgosa, Y. Ohno, M.R. Pointer, D.C. Rich, F. Vienot, L. Whitehead, and J.H. Wold. CIE 015:2018 Colorimetry, 4th Edition. Technical Report, International Commission on Illumination, Vienna, October 2018. doi:10.25039/TR.015.2018.

[Cas14]

Saullo Castro. Numpy: Fastest way of computing diagonal for each row of a 2d array. http://stackoverflow.com/questions/26511401/numpy-fastest-way-of-computing-diagonal-for-each-row-of-a-2d-array/26517247#26517247, 2014.

[Cen]

Paul Centore. The Munsell and Kubelka-Munk Toolbox. http://www.munsellcolourscienceforpainters.com/MunsellAndKubelkaMunkToolbox/MunsellAndKubelkaMunkToolbox.html.

[Cen12]

Paul Centore. An open-source inversion algorithm for the Munsell renotation. Color Research & Application, 37(6):455–464, December 2012. doi:10.1002/col.20715.

[Cen14a]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - GeneralRoutines/CIELABtoApproxMunsellSpec.m. 2014.

[Cen14b]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellRenotationRoutines/ChromDiagHueAngleToMunsellHue.m. 2014.

[Cen14c]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellRenotationRoutines/FindHueOnRenotationOvoid.m. 2014.

[Cen14d]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellRenotationRoutines/MaxChromaForExtrapolatedRenotation.m. 2014.

[Cen14e]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellRenotationRoutines/MunsellHueToASTMHue.m. 2014.

[Cen14f]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellRenotationRoutines/MunsellHueToChromDiagHueAngle.m. 2014.

[Cen14g]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellRenotationRoutines/MunsellToxyForIntegerMunsellValue.m. 2014.

[Cen14h]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellRenotationRoutines/MunsellToxyY.m. 2014.

[Cen14i]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellRenotationRoutines/xyYtoMunsell.m. 2014.

[Cen14j]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellSystemRoutines/BoundingRenotationHues.m. 2014.

[Cen14k]

Paul Centore. MunsellAndKubelkaMunkToolboxApr2014 - MunsellSystemRoutines/LinearVsRadialInterpOnRenotationOvoid.m. 2014.

[Cha15]

Peter Chamberlain. LUT documentation (to create from another program). https://forum.blackmagicdesign.com/viewtopic.php?f=21&t=40284#p232952, 2015.

[CWCR04]

Vien Cheung, Stephen Westland, David Connah, and Caterina Ripamonti. A comparative study of the characterisation of colour cameras by means of neural networks and polynomial transforms. Coloration Technology, 120(1):19–25, 2004. doi:10.1111/j.1478-4408.2004.tb00201.x.

[CB22]

Sean Cooper and Harald Brendel. ARRI LogC4 Logarithmic Color Space SPECIFICATION. 2022.

[Cot]

Russell Cottrell. The Russell RGB working color space.

[CKMW04]

Matthew Cowan, Glenn Kennel, Thomas Maier, and Brad Walker. Contrast Sensitivity Experiment to Determine the Bit Depth for Digital Cinema. SMPTE Motion Imaging Journal, 113(9):281–292, September 2004. doi:10.5594/j11549.

[CLR+02]

G. Cui, M. R. Luo, B. Rigg, G. Roesler, and K. Witt. Uniform colour spaces based on the DIN99 colour-difference formula. Color Research & Application, 27(4):282–290, 2002. doi:10.1002/col.10066.

[DFGM15]

Maryam Mohammadzadeh Darrodi, Graham Finlayson, Teresa Goodman, and Michal Mackiewicz. Reference data set for camera spectral sensitivity estimation. Journal of the Optical Society of America A, 32(3):381, March 2015. doi:10.1364/JOSAA.32.000381.

[DFH+15]

Aurelien David, Paul T. Fini, Kevin W. Houser, Yoshi Ohno, Michael P. Royer, Kevin A. G. Smet, Minchen Wei, and Lorne Whitehead. Development of the IES method for evaluating the color rendition of light sources. Optics Express, 23(12):15888, June 2015. doi:10.1364/OE.23.015888.

[DO10]

Wendy Davis and Yoshiro Ohno. Color quality scale. Optical Engineering, 49(3):033602, March 2010. doi:10.1117/1.3360335.

[DFI+17]

Scott Dyer, Alexander Forsythe, Jonathon Irons, Thomas Mansencal, and Miaoqi Zhu. RAW to ACES. 2017.

[EF98]

Fritz Ebner and Mark D. Fairchild. Finding constant hue surfaces in color space. In Giordano B. Beretta and Reiner Eschbach, editors, Proc. SPIE 3300, Color Imaging: Device-Independent Color, Color Hardcopy, and Graphic Arts III, (2 January 1998), 107–117. January 1998. doi:10.1117/12.298269.

[Erda]

U. Murat Erdem. Fast Line Segment Intersection. http://www.mathworks.com/matlabcentral/fileexchange/27205-fast-line-segment-intersection.

[Erdb]

Turan Erdogan. How to Calculate Luminosity, Dominant Wavelength, and Excitation Purity.

[FW98]

M. Fairchild and D. Wyble. Colorimetric Characterization of The Apple Studio Display (flat panel LCD). 1998.

[FC11]

Mark D Fairchild and Ping-hsu Chen. Brightness, lightness, and specifying color in high-dynamic-range scenes and images. In Susan P. Farnand and Frans Gaykema, editors, Proc. SPIE 7867, Image Quality and System Performance VIII, 78670O. January 2011. doi:10.1117/12.872075.

[FH22]

Mark D Fairchild and Luke Hellwig. Private Discussion with Mansencal, T. 2022.

[Fai]

Mark D. Fairchild. Fairchild YSh.

[Fai91]

Mark D. Fairchild. Formulation and testing of an incomplete-chromatic-adaptation model. Color Research & Application, 16(4):243–250, August 1991. doi:10.1002/col.5080160406.

[Fai96]

Mark D. Fairchild. Refinement of the RLAB color space. Color Research & Application, 21(5):338–346, October 1996. doi:10.1002/(SICI)1520-6378(199610)21:5<338::AID-COL3>3.0.CO;2-Z.

[Fai04]

Mark D. Fairchild. CIECAM02. In Color Appearance Models, pages 289–301. Wiley, 2 edition, 2004.

[Fai13a]

Mark D. Fairchild. Chromatic Adaptation Models. In Color Appearance Models, pages 4179–4252. Wiley, 3 edition, 2013.

[Fai13b]

Mark D. Fairchild. The Hunt Model. In Color Appearance Models, pages 5094–5556. Wiley, 3 edition, 2013.

[Fai13c]

Mark D. Fairchild. The Nayatani et al. Model. In Color Appearance Models, pages 4810–5085. Wiley, 3 edition, 2013.

[Fai13d]

Mark D. Fairchild. The RLAB Model. In Color Appearance Models, pages 5563–5824. Wiley, 3 edition, 2013.

[Fai13e]

Mark D. Fairchild. ATD Model. In Color Appearance Models, pages 5852–5991. Wiley, 3 edition, 2013.

[Fai13f]

Mark D. Fairchild. FAIRCHILD'S 1990 MODEL. In Color Appearance Models, pages 4418–4495. Wiley, 3 edition, 2013.

[Fai13g]

Mark D. Fairchild. IPT Colourspace. In Color Appearance Models, pages 6197–6223. Wiley, 3 edition, 2013.

[Fai13h]

Mark D. Fairchild. LLAB Model. In Color Appearance Models, pages 6025–6178. Wiley, 3 edition, 2013.

[Fai20]

Mark D. Fairchild. Von Kries 2020: Evolution of degree of chromatic adaptation. Color and Imaging Conference, 28(1):252–257, November 2020. doi:10.2352/issn.2169-2629.2020.28.40.

[FW10]

Mark D. Fairchild and David R. Wyble. Hdr-CIELAB and hdr-IPT: Simple Models for Describing the Color of High-Dynamic-Range and Wide-Color-Gamut Images. In Proc. of Color and Imaging Conference, 322–326. 2010.

[Fai85]

Hugh S. Fairman. The calculation of weight factors for tristimulus integration. Color Research & Application, 10(4):199–203, 1985. doi:10.1002/col.5080100407.

[FBH97]

Hugh S. Fairman, Michael H. Brill, and Henry Hemmendinger. How the CIE 1931 color-matching functions were derived from Wright-Guild data. Color Research & Application, 22(1):11–23, February 1997. doi:10.1002/(SICI)1520-6378(199702)22:1<11::AID-COL4>3.0.CO;2-7.

[FMH15]

Graham D. Finlayson, Michal MacKiewicz, and Anya Hurlbert. Color Correction Using Root-Polynomial Regression. IEEE Transactions on Image Processing, 24(5):1460–1470, May 2015. doi:10.1109/TIP.2015.2405336.

[For18]

Alex Forsythe. Private Discussion with Mansencal, T. 2018.

[Frohlich17]

Jan Fröhlich. Encoding high dynamic range and wide color gamut imagery. 2017.

[GDY+]

Hugo Gaggioni, Patel Dhanendra, Jin Yamashita, N. Kawada, K. Endo, and Curtis Clark. S-Log: A new LUT for digital production mastering and interchange applications.

[GarciaHMC07]

Pedro A. García, Rafael Huertas, Manuel Melgosa, and Guihua Cui. Measurement of the relationship between perceived and computed color differences. Journal of the Optical Society of America A, 24(7):1823, July 2007. doi:10.1364/JOSAA.24.001823.

[GMRS58]

L. G. Glasser, A. H. McKinney, C. D. Reilly, and P. D. Schnelle. Cube-Root Color Coordinate System. Journal of the Optical Society of America, 48(10):736, October 1958. doi:10.1364/JOSA.48.000736.

[Gut95]

S. Lee Guth. Further applications of the ATD model for color vision. In Eric Walowit, editor, Proc. SPIE 2414, Device-Independent Color Imaging II, volume 2414, 12–26. April 1995. doi:10.1117/12.206546.

[HF98]

Radim Halir and Jan Flusser. Numerically Stable Direct Least Squares Fitting Of Ellipses. 1998. doi:10.1.1.1.7559.

[Han03]

Allan Hanbury. A 3D-Polar Coordinate Colour Representation Well Adapted to Image Analysis. In Josef Bigun and Tomas Gustavsson, editors, Image Analysis, 804–811. Berlin, Heidelberg, 2003. Springer Berlin Heidelberg.

[HF20]

Luke Hellwig and Mark D. Fairchild. Using Gaussian Spectra to Derive a Hue-linear Color Space. Journal of Perceptual Imaging, 2020. doi:10.2352/J.Percept.Imaging.2020.3.2.020401.

[HF22]

Luke Hellwig and Mark D. Fairchild. Brightness, lightness, colorfulness, and chroma in \textsc CIECAM02 and \textsc CAM16. Color Research & Application, pages col.22792, March 2022. doi:10.1002/col.22792.

[HSF22]

Luke Hellwig, Dale Stolitzka, and Mark D. Fairchild. Extending CIECAM02 and CAM16 for the Helmholtz–Kohlrausch effect. Color Research & Application, pages col.22793, June 2022. doi:10.1002/col.22793.

[Hol]

Joseph Holmes. Ekta Space PS 5.

[Hou15]

Jim Houston. Private Discussion with Mansencal, T. 2015.

[HCM+15]

Min Huang, Guihua Cui, Manuel Melgosa, Manuel Sánchez-Marañón, Changjun Li, M. Ronnier Luo, and Haoxue Liu. Power functions improving the performance of color-difference formulas. Optical Society of America, 23(1):597–610, 2015. doi:10.1364/OE.23.000597.

[HB95]

Po-Chieh Hung and Roy S. Berns. Determination of constant Hue Loci for a CRT gamut and their predictions using color appearance spaces. Color Research & Application, 20(5):285–295, October 1995. doi:10.1002/col.5080200506.

[Hun04]

R.W.G. Hunt. The Reproduction of Colour. John Wiley & Sons, Ltd, Chichester, UK, 6 edition, September 2004. ISBN 978-0-470-02427-0. doi:10.1002/0470024275.

[JH19]

Wenzel Jakob and Johannes Hanika. A Low-Dimensional Function Space for Efficient Spectral Upsampling. Computer Graphics Forum, 38(2):147–155, May 2019. doi:10.1111/cgf.13626.

[JLGS13]

Jun Jiang, Dengyu Liu, Jinwei Gu, and Sabine Susstrunk. What is the space of spectral sensitivity functions for digital color cameras? In 2013 IEEE Workshop on Applications of Computer Vision (WACV), 168–179. IEEE, January 2013. doi:10.1109/WACV.2013.6475015.

[KMH+02]

Bongsoon Kang, Ohak Moon, Changhee Hong, Honam Lee, Bonghwan Cho, and Youngsun Kim. Design of advanced color: Temperature control system for HDTV applications. Journal of the Korean Physical Society, 41(6):865–871, 2002.

[KPK11]

Paul Kienzle, Nikunj Patel, and James Krycka. Refl1d.numpyerrors - Refl1D v0.6.19 documentation. http://www.reflectometry.org/danse/docs/refl1d/_modules/refl1d/numpyerrors.html, 2011.

[KWK09]

Mh Kim, T Weyrich, and J Kautz. Modeling Human Color Perception under Extended Luminance Levels. ACM Transactions on Graphics, 28(3):27:1–27:9, 2009. doi:10.1145/1531326.1531333.

[Kir06]

Richard Kirk. Truelight Software Library 2.0. 2006.

[Kir19]

Richard A. Kirk. Chromaticity coordinates for graphic arts based on CIE 2006 LMS with even spacing of Munsell colours. Color and Imaging Conference, 27(1):215–219, October 2019. doi:10.2352/issn.2169-2629.2019.27.38.

[Kon21]

Ivan A. Konovalenko. proLab_param.m. 2021.

[KSNN21]

Ivan A. Konovalenko, Anna A. Smagina, Dmitry P. Nikolaev, and Petr P. Nikolaev. ProLab: perceptually uniform projective colour coordinate system. arXiv:2012.07653 [cs], January 2021. arXiv:2012.07653.

[Kry85]

M Krystek. An algorithm to calculate correlated colour temperature. Color Research & Application, 10(1):38–40, 1985. doi:10.1002/col.5080100109.

[LLW+17]

Changjun Li, Zhiqiang Li, Zhifeng Wang, Yang Xu, Ming Ronnier Luo, Guihua Cui, Manuel Melgosa, Michael H Brill, and Michael Pointer. Comprehensive color solutions: CAM16, CAT16, and CAM16-UCS. Color Research & Application, 42(6):703–718, December 2017. doi:10.1002/col.22131.

[LLRH02]

Changjun Li, Ming Ronnier Luo, Bryan Rigg, and Robert W. G. Hunt. CMC 2000 chromatic adaptation transform: CMCCAT2000. Color Research & Application, 27(1):49–58, February 2002. doi:10.1002/col.10005.

[LPLMartinezverdu07]

Changjun Li, Esther Perales, Ming Ronnier Luo, and Francisco Martinez-verdu. The Problem with CAT02 and Its Correction. 2007.

[Lin03a]

Bruce Lindbloom. Delta E (CIE 1976). http://brucelindbloom.com/Eqn_DeltaE_CIE76.html, 2003.

[Lin03b]

Bruce Lindbloom. XYZ to xyY. http://www.brucelindbloom.com/Eqn_XYZ_to_xyY.html, 2003.

[Lin07]

Bruce Lindbloom. Spectral Power Distribution of a CIE D-Illuminant. http://www.brucelindbloom.com/Eqn_DIlluminant.html, 2007.

[Lin09a]

Bruce Lindbloom. Chromatic Adaptation. http://brucelindbloom.com/Eqn_ChromAdapt.html, 2009.

[Lin09b]

Bruce Lindbloom. Delta E (CMC). http://brucelindbloom.com/Eqn_DeltaE_CMC.html, 2009.

[Lin09c]

Bruce Lindbloom. xyY to XYZ. http://www.brucelindbloom.com/Eqn_xyY_to_XYZ.html, 2009.

[Lin11]

Bruce Lindbloom. Delta E (CIE 1994). http://brucelindbloom.com/Eqn_DeltaE_CIE94.html, 2011.

[Lin14]

Bruce Lindbloom. RGB Working Space Information. http://www.brucelindbloom.com/WorkingSpaceInfo.html, 2014.

[Lin15]

Bruce Lindbloom. About the Lab Gamut. http://www.brucelindbloom.com/LabGamutDisplayHelp.html, 2015.

[LPY+16]

Taoran Lu, Fangjun Pu, Peng Yin, Tao Chen, Walt Husak, Jaclyn Pytlarz, Robin Atkins, Jan Froehlich, and Guan-Ming Su. ITP Colour Space and Its Compression Performance for High Dynamic Range and Wide Colour Gamut Video Distribution. ZTE Communications, 14(1):32–38, 2016.

[LCL06]

M. Ronnier Luo, Guihua Cui, and Changjun Li. Uniform colour spaces based on CIECAM02 colour appearance model. Color Research & Application, 31(4):320–330, August 2006. doi:10.1002/col.20227.

[LR99]

M. Ronnier Luo and Peter A. Rhodes. Corresponding-colour datasets. Color Research & Application, 24(4):295–296, August 1999. doi:10.1002/(SICI)1520-6378(199908)24:4<295::AID-COL10>3.0.CO;2-K.

[LL13]

Ming Ronnier Luo and Changjun Li. CIECAM02 and Its Recent Developments. In Christine Fernandez-Maloigne, editor, Advanced Color Image Processing and Analysis, pages 19–58. Springer New York, New York, NY, 2013. doi:10.1007/978-1-4419-6190-7.

[LLK96]

Ming Ronnier Luo, Mei-Chun Lo, and Wen-Guey Kuo. The LLAB (l:c) colour model. Color Research & Application, 21(6):412–429, December 1996. doi:10.1002/(SICI)1520-6378(199612)21:6<412::AID-COL4>3.0.CO;2-Z.

[LM96]

Ming Ronnier Luo and Ján Morovic. Two Unsolved Issues in Colour Management - Colour Appearance and Gamut Mapping. In Conference: 5th International Conference on High Technology: Imaging Science and Technology – Evolution & Promise, 136–147. 1996.

[Mac35]

David L. MacAdam. Maximum Visual Efficiency of Colored Materials. Journal of the Optical Society of America, 25(11):361–367, November 1935. doi:10.1364/JOSA.25.000361.

[Mac42]

David L. Macadam. Visual Sensitivities to Color Differences in Daylight. Journal of the Optical Society of America, 32(5):28, 1942. doi:10.1364/JOSA.32.000247.

[MOF09]

G.M. Machado, M.M. Oliveira, and L. Fernandes. A Physiologically-based Model for Simulation of Color Vision Deficiency. IEEE Transactions on Visualization and Computer Graphics, 15(6):1291–1298, November 2009. doi:10.1109/TVCG.2009.113.

[Mac10]

Gustavo Mello Machado. A model for simulation of color vision deficiency and a color contrast enhancement technique for dichromats. 2010.

[MY19]

Ian Mallett and Cem Yuksel. Spectral Primary Decomposition for Rendering with sRGB Reflectance. Eurographics Symposium on Rendering - DL-only and Industry Track, pages 7 pages, 2019. doi:10.2312/SR.20191216.

[MS03]

Henrique Malvar and Gary Sullivan. YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range. 2003.

[Mana]

Thomas Mansencal. Lookup.

[Manb]

Thomas Mansencal. Structure.

[Man15]

Thomas Mansencal. RED Colourspaces Derivation. https://www.colour-science.org/posts/red-colourspaces-derivation, 2015.

[Man18]

Thomas Mansencal. How is the visible gamut bounded? https://stackoverflow.com/a/48396021/931625, 2018.

[Man19]

Thomas Mansencal. Colour - Datasets. 2019. doi:10.5281/zenodo.3362520.

[Mel13]

Manuel Melgosa. CIE / ISO new standard: CIEDE2000. 2013.

[MSHD15]

Johannes Meng, Florian Simon, Johannes Hanika, and Carsten Dachsbacher. Physically Meaningful Rendering using Tristimulus Colours. Computer Graphics Forum, 34(4):31–40, July 2015. doi:10.1111/cgf.12676.

[Mil14]

Scott Miller. A Perceptual EOTF for Extended Dynamic Range Imagery. 2014.

[MT11]

Wojciech Mokrzycki and Maciej Tatol. Color difference Delta E - A survey. Machine Graphics and Vision, 20:383–411, April 2011.

[Mor03]

Nathan Moroney. A Radial Sampling of the OSA Uniform Color Scales. Color and Imaging Conference, 2003(1):175–180, 2003.

[MFH+02]

Nathan Moroney, Mark D. Fairchild, Robert W. G. Hunt, Changjun Li, Ming Ronnier Luo, and Todd Newman. The CIECAM02 color appearance model. Color and Imaging Conference, pages 23–27, 2002.

[MorovivcL00]

Ján Morovič and M. Ronnier Luo. Calculating medium and image gamut boundaries for gamut mapping. Color Research and Application, 25(6):394–401, 2000. doi:10.1002/1520-6378(200012)25:63.0.CO;2-Y.

[Nat16]

Graeme Nattress. Private Discussion with Shaw, N. 2016.

[Nay97]

Yoshinobu Nayatani. Simple estimation methods for the Helmholtz—Kohlrausch effect. Color Research & Application, 22(6):385–401, 1997. doi:10.1002/(SICI)1520-6378(199712)22:6<385::AID-COL6>3.0.CO;2-R.

[NSY95]

Yoshinobu Nayatani, Hiroaki Sobagaki, and Kenjiro Hashimoto Tadashi Yano. Lightness dependency of chroma scales of a nonlinear color-appearance model and its latest formulation. Color Research & Application, 20(3):156–167, June 1995. doi:10.1002/col.5080200305.

[NNJ43]

Sidney M. Newhall, Dorothy Nickerson, and Deane B. Judd. Final Report of the OSA Subcommittee on the Spacing of the Munsell Colors. Journal of the Optical Society of America, 33(7):385, July 1943. doi:10.1364/JOSA.33.000385.

[Ohn05]

Yoshi Ohno. Spectral design considerations for white LED color rendering. Optical Engineering, 44(11):111302, 2005. doi:10.1117/1.2130694.

[Ohn14]

Yoshiro Ohno. Practical Use and Calculation of CCT and Duv. LEUKOS, 10(1):47–55, January 2014. doi:10.1080/15502724.2014.839020.

[OD08]

Yoshiro Ohno and Wendy Davis. NIST CQS simulation. 2008.

[OD13]

Yoshiro Ohno and Wendy Davis. NIST CQS simulation. 2013.

[Oht97]

N. Ohta. The basis of color reproduction engineering. 1997.

[OYH18]

H. Otsu, M. Yamamoto, and T. Hachisuka. Reproducing Spectral Reflectances From Tristimulus Colours. Computer Graphics Forum, 37(6):370–381, September 2018. doi:10.1111/cgf.13332.

[Ott20]

Björn Ottosson. A perceptual color space for image processing. https://bottosson.github.io/posts/oklab/, 2020.

[Poi80]

Michael R. Pointer. Pointer's Gamut Data. 1980.

[RF21]

Luvin Munish Ragoo and Ivar Farup. Optimising a Euclidean Colour Space Transform for Colour Order and Perceptual Uniformity. Color and Imaging Conference, 29(1):282–287, November 2021. doi:10.2352/issn.2169-2629.2021.29.282.

[Rak17]

Herilalaina Rakotoarison. Bunch. March 2017.

[SCKL17]

Muhammad Safdar, Guihua Cui, Youn Jin Kim, and Ming Ronnier Luo. Perceptually uniform color space for image signals including high dynamic range and wide gamut. Optics Express, 25(13):15131, June 2017. doi:10.1364/OE.25.015131.

[SHKL18]

Muhammad Safdar, Jon Y. Hardeberg, Youn Jin Kim, and Ming Ronnier Luo. A Colour Appearance Model based on J z a z b z Colour Space. Color and Imaging Conference, 2018(1):96–101, November 2018. doi:10.2352/ISSN.2169-2629.2018.26.96.

[SHRL21]

Muhammad Safdar, Jon Yngve Hardeberg, and Ming Ronnier Luo. ZCAM, a colour appearance model based on a high dynamic range uniform colour space. Optics Express, 29(4):6036, February 2021. doi:10.1364/OE.413659.

[Sar21]

Madenda Sarifuddin. RGB to HCL and HCL to RGB color conversion. 2021.

[SM05a]

Madenda Sarifuddin and Rokia Missaoui. A New Perceptually Uniform Color Space with Associated Color Similarity Measure for ContentBased Image and Video Retrieval. 2005.

[SM05b]

Madenda Sarifuddin and Rokia Missaoui. HCL: a new Color Space for a more Effective Content-based Image Retrieval. 2005.

[SWD05]

Gaurav Sharma, Wencheng Wu, and Edul N. Dalal. The CIEDE2000 color-difference formula: Implementation notes, supplementary test data, and mathematical observations. Color Research & Application, 30(1):21–30, February 2005. doi:10.1002/col.20070.

[SH15]

Peter Shirley and David Hart. The prismatic color space for rgb computations. 2015.

[Sir18]

Daniele Siragusano. Private Discussion with Shaw, Nick. 2018.

[Smi78]

Alvy Ray Smith. Color gamut transform pairs. In Proceedings of the 5th Annual Conference on Computer Graphics and Interactive Techniques - SIGGRAPH '78, 12–19. New York, New York, USA, 1978. ACM Press. doi:10.1145/800248.807361.

[Smi99]

Brian Smits. An RGB-to-Spectrum Conversion for Reflectances. Journal of Graphics Tools, 4(4):11–22, January 1999. doi:10.1080/10867651.1999.10487511.

[SWG00]

K E Spaulding, G J Woolfe, and E J Giorgianni. Reference Input/Output Medium Metric RGB Color Encodings (RIMM/ROMM RGB). 2000.

[Spi15]

Nick Spiker. Private Discussion with Mansencal, T. 2015.

[SS88]

E. I. Stearns and R. E. Stearns. An example of a method for correcting radiance data for Bandpass error. Color Research & Application, 13(4):257–259, August 1988. doi:10.1002/col.5080130410.

[SS00]

Andrew Stockman and Lindsay T. Sharpe. Cone Fundamentals. http://www.cvrl.org/cones.htm, 2000.

[SBS99]

Sabine Susstrunk, Robert Buckley, and Steve Swen. Standard RGB Color Spaces. 1999.

[SHF00]

Sabine E. Susstrunk, Jack M. Holm, and Graham D. Finlayson. Chromatic adaptation performance of different RGB sensors. In Reiner Eschbach and Gabriel G. Marcu, editors, Photonics West 2001 - Electronic Imaging, volume 4300, 172–183. December 2000. doi:10.1117/12.410788.

[Tho12]

Larry Thorpe. CANON-LOG TRANSFER CHARACTERISTIC. 2012.

[Tri15]

Tashi Trieu. Private Discussion with Mansencal, T. 2015.

[War16]

Greg Ward. Private Discussion with Mansencal, T. 2016.

[WEydelbergVileshin02]

Greg Ward and Elena Eydelberg-Vileshin. Picture Perfect RGB Rendering Using Spectral Prefiltering and Sharp Color Primaries. Eurographics workshop on Rendering, pages 117–124, 2002. doi:10.2312/EGWR/EGWR02/117-124.

[WY12]

Andrew B. Watson and John I. Yellott. A unified formula for light-adapted pupil size. Journal of Vision, 12(10):12, September 2012. doi:10.1167/12.10.12.

[WR04]

Stephen Westland and Caterina Ripamonti. Table 8.2. In Computational Colour Science Using MATLAB, pages 137. John Wiley & Sons, Ltd, Chichester, UK, 1 edition, March 2004. doi:10.1002/0470020326.

[WRC12a]

Stephen Westland, Caterina Ripamonti, and Vien Cheung. Correction for Spectral Bandpass. In Computational Colour Science Using MATLAB, pages 38. 2 edition, 2012.

[WRC12b]

Stephen Westland, Caterina Ripamonti, and Vien Cheung. Extrapolation Methods. In Computational Colour Science Using MATLAB, pages 38. 2 edition, 2012.

[WRC12c]

Stephen Westland, Caterina Ripamonti, and Vien Cheung. Interpolation Methods. In Computational Colour Science Using MATLAB, pages 29–37. 2 edition, 2012.

[WRC12d]

Stephen Westland, Caterina Ripamonti, and Vien Cheung. CMCCAT2000. In Computational Colour Science Using MATLAB, pages 83–86. 2 edition, 2012.

[WRC12e]

Stephen Westland, Caterina Ripamonti, and Vien Cheung. CMCCAT97. In Computational Colour Science Using MATLAB, pages 80. 2 edition, 2012.

[Woo14]

Mike Wood. Making the same color twice - A proposed PLASA standard for color communication. 2014.

[Wys63]

Günter Wyszecki. Proposal for a New Color-Difference Formula. Journal of the Optical Society of America, 53(11):1318, November 1963. doi:10.1364/JOSA.53.001318.

[WS00a]

Günther Wyszecki and W S Stiles. Equation I(1.2.1). In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 8. Wiley, 2000.

[WS00b]

Günther Wyszecki and W S Stiles. Table 2(5.4.1) MacAdam Ellipses (Observer PGN) Observed and Calculated on the Basis of a Normal Distribution of Color Matches about a Color Center (Silberstein and MacAdam, 1945). In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 309. Wiley, 2000.

[WS00c]

Günther Wyszecki and W. S. Stiles. Integration Replaced by Summation. In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 158–163. Wiley, 2000.

[WS00d]

Günther Wyszecki and W. S. Stiles. Standard Photometric Observers. In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 256–259,395. Wiley, 2000.

[WS00e]

Günther Wyszecki and W. S. Stiles. Table 1(3.11) Isotemperature Lines. In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 228. Wiley, 2000.

[WS00f]

Günther Wyszecki and W. S. Stiles. Table 1(3.3.3). In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 138–139. Wiley, 2000.

[WS00g]

Günther Wyszecki and W. S. Stiles. Table II(3.7). In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 778–779. Wiley, 2000.

[WS00h]

Günther Wyszecki and W. S. Stiles. Table I(3.7). In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 776–777. Wiley, 2000.

[WS00i]

Günther Wyszecki and W. S. Stiles. Table I(6.5.3) Whiteness Formulae (Whiteness Measure Denoted by W). In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 837–839. Wiley, 2000.

[WS00j]

Günther Wyszecki and W. S. Stiles. The CIE 1964 Standard Observer. In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 141. Wiley, 2000.

[WS00k]

Günther Wyszecki and W. S. Stiles. CIE Method of Calculating D-Illuminants. In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 145–146. Wiley, 2000.

[WS00l]

Günther Wyszecki and W. S. Stiles. CIE 1976 (L*u*v*)-Space and Color-Difference Formula. In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 167. Wiley, 2000.

[WS00m]

Günther Wyszecki and W. S. Stiles. DISTRIBUTION TEMPERATURE, COLOR TEMPERATURE, AND CORRELATED COLOR TEMPERATURE. In Color Science: Concepts and Methods, Quantitative Data and Formulae, pages 224–229. Wiley, 2000.

[Yor14]

Rory Yorke. Python: Change format of np.array or allow tolerance in in1d function. http://stackoverflow.com/a/23521245/931625, 2014.

[ZL18]

Qiyan Zhai and Ming R. Luo. Study of chromatic adaptation via neutral white matches on different viewing media. Optics Express, 26(6):7724, March 2018. doi:10.1364/OE.26.007724.

[AdobeSystems05]

Adobe Systems. Adobe RGB (1998) Color Image Encoding. 2005.

[AdobeSystems13a]

Adobe Systems. Adobe DNG Software Development Kit (SDK) - 1.3.0.0 - dng_sdk_1_3/dng_sdk/source/dng_temperature.cpp::dng_temperature::xy_coord. 2013.

[AdobeSystems13b]

Adobe Systems. Adobe DNG Software Development Kit (SDK) - 1.3.0.0 - dng_sdk_1_3/dng_sdk/source/dng_temperature.cpp::dng_temperature::Set_xy_coord. 2013.

[AdobeSystems13c]

Adobe Systems. Cube LUT Specification. 2013.

[ANSI03]

ANSI. Specification of ROMM RGB. 2003.

[ANSIIESCCommittee18]

ANSI and IES Color Committee. ANSI/IES TM-30-18 - IES Method for Evaluating Light Source Color Rendition. ANSI/IES, 2018. ISBN 978-0-87995-379-9.

[AppleInc19]

Apple Inc. displayP3. https://developer.apple.com/documentation/coregraphics/cgcolorspace/1408916-displayp3, 2019.

[AppleInc23]

Apple Inc. Apple Log Profile White Paper. 2023.

[ARRI12]

ARRI. ALEXA - Log C Curve - Usage in VFX. 2012.

[AssociationoRIaBusinesses15]

Association of Radio Industries and Businesses. Essential Parameter Values for the Extended Image Dynamic Range Television (EIDRTV) System for Programme Production. 2015.

[ASTMInternational89]

ASTM International. ASTM D1535-89 - Standard Practice for Specifying Color by the Munsell System. 1989.

[ASTMInternational07]

ASTM International. ASTM D2244-07 - Standard Practice for Calculation of Color Tolerances and Color Differences from Instrumentally Measured Color Coordinates. 2007. doi:10.1520/D2244-16.

[ASTMInternational08]

ASTM International. ASTM D1535-08e1 - Standard Practice for Specifying Color by the Munsell System. 2008. doi:10.1520/D1535-08E01.

[ASTMInternational11]

ASTM International. ASTM E2022-11 - Standard Practice for Calculation of Weighting Factors for Tristimulus Integration. 2011. doi:10.1520/E2022-11.

[ASTMInternational15a]

ASTM International. ASTM E308-15 - Standard Practice for Computing the Colors of Objects by Using the CIE System. 2015. doi:10.1520/E0308-15.

[ASTMInternational15b]

ASTM International. ASTM E313-15e1 - Standard Practice for Calculating Yellowness and Whiteness Indices from Instrumentally Measured Color Coordinates. 2015. doi:10.1520/E0313-20.

[BabelColor12a]

BabelColor. The ColorChecker (since 1976!). http://www.babelcolor.com/main_level/ColorChecker.htm, 2012.

[BabelColor12b]

BabelColor. ColorChecker RGB and spectra. 2012.

[BlackmagicDesign20a]

Blackmagic Design. Wide Gamut Intermediate DaVinci Resolve. 2020.

[BlackmagicDesign20b]

Blackmagic Design. DaVinci Wide Gamut - DaVinci Resolve Studio 17 Public Beta 1. November 2020.

[BlackmagicDesign21]

Blackmagic Design. Blackmagic Generation 5 Color Science. 2021.

[Canon14]

Canon. EOS C500 Firmware Update. https://www.usa.canon.com/internet/portal/us/home/explore/product-showcases/cameras-and-lenses/cinema-eos-firmware/c500, 2014.

[Canon16]

Canon. Input Transform Version 201612 for EOS C300 Mark II. https://www.usa.canon.com/internet/portal/us/home/support/details/cameras/cinema-eos/eos-c300-mark-ii, 2016.

[Canon20]

Canon. Input Transform Version 202007 for EOS C300 Mark II. https://www.usa.canon.com/internet/portal/us/home/support/details/cameras/cinema-eos/eos-c300-mark-ii, 2020.

[CIED1CIED822]

CIE Division 1 and CIE Division 8. CIE 248:2022 The CIE 2016 Colour Appearance Model for Colour Management Systems: CIECAM16. Commission Internationale de l'Eclairage, 2022. ISBN 978-3-902842-94-7.

[CIET13294]

CIE TC 1-32. CIE 109-1994 A Method of Predicting Corresponding Colours under Different Chromatic and Illuminance Adaptations. Commission Internationale de l'Eclairage, 1994. ISBN 978-3-900734-51-0.

[CIET13606]

CIE TC 1-36. CIE 170-1:2006 Fundamental Chromaticity Diagram with Physiological Axes - Part 1. Commission Internationale de l'Eclairage, 2006. ISBN 978-3-901906-46-6.

[CIET13805a]

CIE TC 1-38. 9. INTERPOLATION. In CIE 167:2005 Recommended Practice for Tabulating Spectral Data for Use in Colour Computations, pages 14–19. 2005.

[CIET13805b]

CIE TC 1-38. 9.2.4 Method of interpolation for uniformly spaced independent variable. In CIE 167:2005 Recommended Practice for Tabulating Spectral Data for Use in Colour Computations, pages 1–27. 2005.

[CIET13805c]

CIE TC 1-38. Table V. Values of the c-coefficients of Equ.s 6 and 7. In CIE 167:2005 Recommended Practice for Tabulating Spectral Data for Use in Colour Computations, pages 19. 2005.

[CIET13805d]

CIE TC 1-38. EXTRAPOLATION. In CIE 167:2005 Recommended Practice for Tabulating Spectral Data for Use in Colour Computations, pages 19–20. 2005.

[CIET14804a]

CIE TC 1-48. 3.1 Recommendations concerning standard physical data of illuminants. In CIE 015:2004 Colorimetry, 3rd Edition, pages 12–13. 2004.

[CIET14804b]

CIE TC 1-48. 9.1 Dominant wavelength and purity. In CIE 015:2004 Colorimetry, 3rd Edition, pages 32–33. 2004.

[CIET14804c]

CIE TC 1-48. Extrapolation. In CIE 015:2004 Colorimetry, 3rd Edition, pages 24. 2004.

[CIET14804d]

CIE TC 1-48. The evaluation of whiteness. In CIE 015:2004 Colorimetry, 3rd Edition, pages 24. 2004.

[CIET14804e]

CIE TC 1-48. APPENDIX E. INFORMATION ON THE USE OF PLANCK'S EQUATION FOR STANDARD AIR. In CIE 015:2004 Colorimetry, 3rd Edition, pages 77–82. 2004.

[CIET14804f]

CIE TC 1-48. CIE 015:2004 Colorimetry, 3rd Edition. Commission Internationale de l'Eclairage, 2004. ISBN 978-3-901906-33-6.

[CIET14804g]

CIE TC 1-48. CIE 1976 uniform chromaticity scale diagram (UCS diagram). In CIE 015:2004 Colorimetry, 3rd Edition, pages 24. 2004.

[CIET14804h]

CIE TC 1-48. CIE 1976 uniform colour spaces. In CIE 015:2004 Colorimetry, 3rd Edition, pages 24. 2004.

[CIET14804i]

CIE TC 1-48. EXPLANATORY COMMENTS - 5. In CIE 015:2004 Colorimetry, 3rd Edition, pages 68–68. 2004.

[CIET19017]

CIE TC 1-90. CIE 2017 colour fidelity index for accurate scientific use. Number 224 in Technical report / CIE. CIE Central Bureau, Vienna, 2017. ISBN 978-3-902842-61-9.

[CIE]

CIE. CIE Spectral Data.

[CIE04]

CIE. CIE 15:2004 Tables Data. 2004.

[Colblindora]

Colblindor. Deuteranopia - Red-Green Color Blindness. http://www.color-blindness.com/deuteranopia-red-green-color-blindness/.

[Colblindorb]

Colblindor. Protanopia - Red-Green Color Blindness. http://www.color-blindness.com/protanopia-red-green-color-blindness/.

[Colblindorc]

Colblindor. Tritanopia - Blue-Yellow Color Blindness. http://www.color-blindness.com/tritanopia-blue-yellow-color-blindness/.

[CVRLa]

CVRL. Luminous efficiency. http://www.cvrl.org/lumindex.htm.

[CVRLb]

CVRL. New CIE XYZ functions transformed from the CIE (2006) LMS functions. http://cvrl.ioo.ucl.ac.uk/ciexyzpr.htm.

[CVRLc]

CVRL. Older CIE Standards. http://cvrl.ioo.ucl.ac.uk/cie.htm.

[CVRLd]

CVRL. Stiles & Burch individual 10-deg colour matching data. http://www.cvrl.org/stilesburch10_ind.htm.

[CVRLe]

CVRL. Stiles & Burch individual 2-deg colour matching data. http://www.cvrl.org/stilesburch2_ind.htm.

[CVRLf]

CVRL. CIE (2012) 10-deg XYZ "physiologically-relevant" colour matching functions. http://www.cvrl.org/database/text/cienewxyz/cie2012xyz10.htm.

[CVRLg]

CVRL. CIE (2012) 2-deg XYZ "physiologically-relevant" colour matching functions. http://www.cvrl.org/database/text/cienewxyz/cie2012xyz2.htm.

[DigitalCInitiatives07]

Digital Cinema Initiatives. Digital Cinema System Specification - Version 1.1. 2007.

[DjangoSFoundation22]

Django Software Foundation. Slugify. 2022.

[Dji17]

Dji. White Paper on D-Log and D-Gamut of DJI Cinema Color System. 2017.

[Dolby16]

Dolby. WHAT IS ICTCP? - INTRODUCTION. 2016.

[EasyRGBa]

EasyRGB. CMYK –$>$ CMY. http://www.easyrgb.com/index.php?X=MATH&H=14#text14.

[EasyRGBb]

EasyRGB. CMY –$>$ CMYK. http://www.easyrgb.com/index.php?X=MATH&H=13#text13.

[EasyRGBc]

EasyRGB. CMY –$>$ RGB. http://www.easyrgb.com/index.php?X=MATH&H=12#text12.

[EasyRGBd]

EasyRGB. HSL –$>$ RGB. http://www.easyrgb.com/index.php?X=MATH&H=19#text19.

[EasyRGBe]

EasyRGB. HSV –$>$ RGB. http://www.easyrgb.com/index.php?X=MATH&H=21#text21.

[EasyRGBf]

EasyRGB. RGB –$>$ CMY. http://www.easyrgb.com/index.php?X=MATH&H=11#text11.

[EasyRGBg]

EasyRGB. RGB –$>$ HSL. http://www.easyrgb.com/index.php?X=MATH&H=18#text18.

[EasyRGBh]

EasyRGB. RGB –$>$ HSV. http://www.easyrgb.com/index.php?X=MATH&H=20#text20.

[EuropeanBUnion75]

European Broadcasting Union. EBU Tech 3213 - EBU Standard for Chromaticity Tolerances for Studio Monitors. August 1975.

[EuropeanCInitiative02]

European Color Initiative. ECI RGB v2. 2002.

[FFmpegDevelopers22a]

FFmpeg Developers. FFmpeg::AVColorPrimaries. August 2022.

[FFmpegDevelopers22b]

FFmpeg Developers. FFmpeg::AVColorSpace. August 2022.

[FFmpegDevelopers22c]

FFmpeg Developers. FFmpeg::AVColorTransferCharacteristic. August 2022.

[FiLMiCInc17]

FiLMiC Inc. FiLMiC Pro - User Manual v6 - Revision 1. 2017.

[Fujifilm22a]

Fujifilm. F-Log Data Sheet Ver.1.1. 2022.

[Fujifilm22b]

Fujifilm. F-Log2 Data Sheet Ver.1.0. 2022.

[GoProDM16]

GoPro, Haarm-Pieter Duiker, and Thomas Mansencal. Gopro.py. https://github.com/hpd/OpenColorIO-Configs/blob/master/aces_1.0.3/python/aces_ocio/colorspaces/gopro.py, 2016.

[HernandezAndresLR99]

Javier Hernández-Andrés, Raymond L. Lee, and Javier Romero. Calculating correlated color temperatures across the entire gamut of daylight and skylight chromaticities. Applied Optics, 38(27):5703, September 1999. doi:10.1364/AO.38.005703.

[HewlettPDCompany09]

Hewlett-Packard Development Company. Understanding the HP DreamColor LP2480zx DCI-P3 Emulation Color Space. 2009.

[HunterLab08a]

HunterLab. Hunter L,a,b Color Scale. 2008.

[HunterLab08b]

HunterLab. Illuminant Factors in Universal Software and EasyMatch Coatings. 2008.

[HunterLab12]

HunterLab. Hunter Rd,a,b Color Scale - History and Application. 2012.

[HutchColora]

HutchColor. BestRGB (4 K).

[HutchColorb]

HutchColor. DonRGB4 (4 K).

[HutchColorc]

HutchColor. MaxRGB (4 K).

[HutchColord]

HutchColor. XtremeRGB (4 K).

[IESCCommitteeTM2714WGroup14]

IES Computer Committee and TM-27-14 Working Group. IES Standard Format for the Electronic Transfer of Spectral Data Electronic Transfer of Spectral Data. Illuminating Engineering Society, 2014. ISBN 978-0-87995-295-2.

[ImageEngineering17]

Image Engineering. TE226 V2 data sheet. 2017.

[InternationalCConsortium10]

International Color Consortium. Specification ICC.1:2010 (Profile version 4.3.0.0). 2010.

[InternationalECommission99]

International Electrotechnical Commission. IEC 61966-2-1:1999 - Multimedia systems and equipment - Colour measurement and management - Part 2-1: Colour management - Default RGB colour space - sRGB. 1999.

[InternationalOfStandardization02]

International Organization for Standardization. INTERNATIONAL STANDARD ISO 7589-2002 - Photography - Illuminants for sensitometry - Specifications for daylight, incandescent tungsten and printer. 2002.

[InternationalOfStandardization12]

International Organization for Standardization. INTERNATIONAL STANDARD ISO 17321-1 - Graphic technology and photography - Colour characterisation of digital still cameras (DSCs) - Part 1: Stimuli, metrology and test procedures. 2012.

[InternationalOfStandardization13]

International Organization for Standardization. INTERNATIONAL STANDARD ISO/IEC 23001-8 - Information technology - MPEG systems technologies - Part 8: Coding-independent code points. 2013.

[InternationalOfStandardization20]

International Organization for Standardization. INTERNATIONAL STANDARD ISO/IEC 14496-10 - Information technology - Coding of audio-visual objects - Part 10: Advanced video coding. 2020.

[InternationalOfStandardization21]

International Organization for Standardization. INTERNATIONAL STANDARD ISO/IEC 23091-2 - Information technology - Coding- independent code points - Part 2: Video. 2021.

[InternationalTUnion98a]

International Telecommunication Union. Recommendation ITU-R BT.1361 - Worldwide unified colorimetry and related characteristics of future television and imaging systems. 1998.

[InternationalTUnion98b]

International Telecommunication Union. Recommendation ITU-R BT.470-6 - CONVENTIONAL TELEVISION SYSTEMS. 1998.

[InternationalTUnion11a]

International Telecommunication Union. Recommendation ITU-R BT.1886 - Reference electro-optical transfer function for flat panel displays used in HDTV studio production BT Series Broadcasting service. 2011.

[InternationalTUnion11b]

International Telecommunication Union. Recommendation ITU-R BT.601-7 - Studio encoding parameters of digital television for standard 4:3 and wide-screen 16:9 aspect ratios. 2011.

[InternationalTUnion11c]

International Telecommunication Union. Recommendation ITU-T T.871 - Information technology - Digital compression and coding of continuous-tone still images: JPEG File Interchange Format (JFIF). 2011.

[InternationalTUnion15a]

International Telecommunication Union. Recommendation ITU-R BT.2020 - Parameter values for ultra-high definition television systems for production and international programme exchange. 2015.

[InternationalTUnion15b]

International Telecommunication Union. Recommendation ITU-R BT.709-6 - Parameter values for the HDTV standards for production and international programme exchange BT Series Broadcasting service. 2015.

[InternationalTUnion15c]

International Telecommunication Union. Report ITU-R BT.2246-4 - The present state of ultra-high definition television BT Series Broadcasting service. 2015.

[InternationalTUnion17]

International Telecommunication Union. Recommendation ITU-R BT.2100-1 - Image parameter values for high dynamic range television for use in production and international programme exchange. 2017.

[InternationalTUnion18]

International Telecommunication Union. Recommendation ITU-R BT.2100-2 - Image parameter values for high dynamic range television for use in production and international programme exchange. 2018.

[InternationalTUnion19]

International Telecommunication Union. Recommendation ITU-R BT.2124-0 - Objective metric for the assessment of the potential visibility of colour differences in television. 2019.

[InternationalTUnion21]

International Telecommunication Union. Recommendation ITU-T H.273 - Coding-independent code points for video signal type identification. 2021.

[Laurent12]

Laurent. Reproducibility of python pseudo-random numbers across systems and versions? http://stackoverflow.com/questions/8786084/reproducibility-of-python-pseudo-random-numbers-across-systems-and-versions, 2012.

[LeicaCAG22]

Leica Camera AG. Leica L-Log Reference Manual. 2022.

[MartinezVerduPC+07]

Francisco Martínez-Verdú, Esther Perales, Elisabet Chorro, Dolores de Fez, Valentín Viqueira, and Eduardo Gilabert. Computation and visualization of the MacAdam limits for any lightness, hue angle, and light source. Journal of the Optical Society of America A, 24(6):1501, June 2007. doi:10.1364/JOSAA.24.001501.

[MunsellCSciencea]

Munsell Color Science. Macbeth Colorchecker.

[MunsellCScienceb]

Munsell Color Science. Munsell Colours Data. http://www.cis.rit.edu/research/mcsl2/online/munsell.php.

[NationalEMAssociation04]

National Electrical Manufacturers Association. Digital Imaging and Communications in Medicine (DICOM) Part 14: Grayscale Standard Display Function. 2004.

[Nikon18]

Nikon. N-Log Specification Document - Version 1.0.0. 2018.

[Panasonic14]

Panasonic. VARICAM V-Log/V-Gamut. 2014.

[PLASANAmerica15]

PLASA North America. ANSI E1.54 - 2015 - PLASA Standard for Color Communication in Entertainment Lighting. 2015.

[REDDCinema17]

RED Digital Cinema. White Paper on REDWideGamutRGB and Log3G10. 2017.

[RenewableRDCenter03]

Renewable Resource Data Center. Reference Solar Spectral Irradiance: ASTM G-173. http://rredc.nrel.gov/solar/spectra/am1.5/ASTMG173/ASTMG173.html, 2003.

[RisingSResearch]

Rising Sun Research. cineSpace LUT Library. https://sourceforge.net/projects/cinespacelutlib/.

[Saeedn]

Saeedn. Extend a line segment a specific distance. http://stackoverflow.com/questions/7740507/extend-a-line-segment-a-specific-distance.

[sastanin]

sastanin. How to make scipy.interpolate give an extrapolated result beyond the input range? http://stackoverflow.com/a/2745496/931625.

[SocietyoMPaTEngineers93]

Society of Motion Picture and Television Engineers. RP 177:1993 - Derivation of Basic Television Color Equations. Volume RP 177:199. The Society of Motion Picture and Television Engineers, January 1993. ISBN 978-1-61482-191-5. doi:10.5594/S9781614821915.

[SocietyoMPaTEngineers99]

Society of Motion Picture and Television Engineers. ANSI/SMPTE 240M-1995 - Signal Parameters - 1125-Line High-Definition Production Systems. 1999.

[SocietyoMPaTEngineers04]

Society of Motion Picture and Television Engineers. RP 145:2004: SMPTE C Color Monitor Colorimetry. Volume RP 145:200. The Society of Motion Picture and Television Engineers, January 2004. ISBN 978-1-61482-164-9. doi:10.5594/S9781614821649.

[SocietyoMPaTEngineers14]

Society of Motion Picture and Television Engineers. SMPTE ST 2084:2014 - Dynamic Range Electro-Optical Transfer Function of Mastering Reference Displays. 2014. doi:10.5594/SMPTE.ST2084.2014.

[SocietyoMPaTEngineers19]

Society of Motion Picture and Television Engineers. ST 428-1:2019 - D-Cinema Distribution Master — Image Characteristic. 2019. doi:10.5594/SMPTE.ST428-1.2019.

[SonyCorporationa]

Sony Corporation. S-Gamut3_S-Gamut3Cine_Matrix.xlsx.

[SonyCorporationb]

Sony Corporation. S-Log Whitepaper.

[SonyCorporationc]

Sony Corporation. Technical Summary for S-Gamut3.Cine/S-Log3 and S-Gamut3/S-Log3.

[SonyCorporation12]

Sony Corporation. S-Log2 Technical Paper. 2012.

[SonyECorporation20a]

Sony Electronics Corporation. IDT.Sony.Venice_SLog3_SGamut3Cine.ctl. 2020.

[SonyECorporation20b]

Sony Electronics Corporation. IDT.Sony.Venice_SLog3_SGamut3.ctl. 2020.

[SonyImageworks12]

Sony Imageworks. Make.py. https://github.com/imageworks/OpenColorIO-Configs/blob/master/nuke-default/make.py, 2012.

[TheAoMPAaSciences20]

The Academy of Motion Picture Arts and Sciences. Academy Spectral Similarity Index (SSI): Overview. 2020.

[TheAoMPAaSciences23]

The Academy of Motion Picture Arts and Sciences. IDT.Apple.AppleLog_BT2020.ctl. 2023.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommitteea]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. Academy Color Encoding System. http://www.oscars.org/science-technology/council/projects/aces.html.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommitteeb]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. ACESutil.Lin_to_Log2_param.ctl. https://github.com/ampas/aces-dev/blob/518c27f577e99cdecfddf2ebcfaa53444b1f9343/transforms/ctl/utilities/ACESutil.Lin_to_Log2_param.ctl.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommitteec]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. ACESutil.Log2_to_Lin_param.ctl. https://github.com/ampas/aces-dev/blob/518c27f577e99cdecfddf2ebcfaa53444b1f9343/transforms/ctl/utilities/ACESutil.Log2_to_Lin_param.ctl.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommittee13]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. Specification S-2013-001 - ACESproxy, an Integer Log Encoding of ACES Image Data. 2013.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommittee14a]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. Specification S-2014-003 - ACEScc, A Logarithmic Encoding of ACES Data for use within Color Grading Systems. 2014.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommittee14b]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. Technical Bulletin TB-2014-004 - Informative Notes on SMPTE ST 2065-1 - Academy Color Encoding Specification (ACES). 2014.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommittee14c]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. Technical Bulletin TB-2014-012 - Academy Color Encoding System Version 1.0 Component Names. 2014.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommittee15]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. Procedure P-2013-001 - Recommended Procedures for the Creation and Use of Digital Camera System Input Device Transforms (IDTs). 2015.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommittee20]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. Specification S-2014-006 - Common LUT Format (CLF) - A Common File Format for Look-Up Tables. 2020.

[TheAoMPAaSciencesScienceaTCouncilAcademyCESACESProject16]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project. Specification S-2016-001 - ACEScct, A Quasi-Logarithmic Encoding of ACES Data for use within Color Grading Systems. http://j.mp/S-2016-001, 2016.

[TheAoMPAaSciencesScienceandTCouncilAcademyCESACESPSubcommittee15]

The Academy of Motion Picture Arts and Sciences, Science and Technology Council, and Academy Color Encoding System (ACES) Project Subcommittee. Specification S-2014-004 - ACEScg - A Working Space for CGI Render and Compositing. 2015.

[VincentJ17]

Vincent J. Is there any numpy group by function? https://stackoverflow.com/a/43094244, 2017.

[W3C22]

W3C. CSS Color Module Level 3. 2022.

[Wikipedia]

Wikipedia. Ellipse. https://en.wikipedia.org/wiki/Ellipse.

[Wikipedia01a]

Wikipedia. Approximation. http://en.wikipedia.org/wiki/Color_temperature#Approximation, 2001.

[Wikipedia01b]

Wikipedia. Color temperature. http://en.wikipedia.org/wiki/Color_temperature, 2001.

[Wikipedia01c]

Wikipedia. Luminance. https://en.wikipedia.org/wiki/Luminance, 2001.

[Wikipedia01d]

Wikipedia. Rayleigh scattering. http://en.wikipedia.org/wiki/Rayleigh_scattering, 2001.

[Wikipedia03a]

Wikipedia. Lagrange polynomial - Definition. https://en.wikipedia.org/wiki/Lagrange_polynomial#Definition, 2003.

[Wikipedia03b]

Wikipedia. Luminosity function. https://en.wikipedia.org/wiki/Luminosity_function#Details, 2003.

[Wikipedia03c]

Wikipedia. Mean squared error. https://en.wikipedia.org/wiki/Mean_squared_error, 2003.

[Wikipedia03d]

Wikipedia. Michaelis-Menten kinetics. https://en.wikipedia.org/wiki/Michaelis%E2%80%93Menten_kinetics, 2003.

[Wikipedia03e]

Wikipedia. Rayleigh–Jeans law. https://en.wikipedia.org/wiki/Rayleigh–Jeans_law, 2003.

[Wikipedia03f]

Wikipedia. Vandermonde matrix. https://en.wikipedia.org/wiki/Vandermonde_matrix, 2003.

[Wikipedia03g]

Wikipedia. HSL and HSV. http://en.wikipedia.org/wiki/HSL_and_HSV, 2003.

[Wikipedia04a]

Wikipedia. Peak signal-to-noise ratio. https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio, 2004.

[Wikipedia04b]

Wikipedia. Surfaces. http://en.wikipedia.org/wiki/Gamut#Surfaces, 2004.

[Wikipedia04c]

Wikipedia. Whiteness. http://en.wikipedia.org/wiki/Whiteness, 2004.

[Wikipedia04d]

Wikipedia. Wide-gamut RGB color space. http://en.wikipedia.org/wiki/Wide-gamut_RGB_color_space, 2004.

[Wikipedia04e]

Wikipedia. YCbCr. https://en.wikipedia.org/wiki/YCbCr, 2004.

[Wikipedia05a]

Wikipedia. Lanczos resampling. https://en.wikipedia.org/wiki/Lanczos_resampling, 2005.

[Wikipedia05b]

Wikipedia. Luminous Efficacy. https://en.wikipedia.org/wiki/Luminous_efficacy, 2005.

[Wikipedia05c]

Wikipedia. Mesopic weighting function. http://en.wikipedia.org/wiki/Mesopic_vision#Mesopic_weighting_function, 2005.

[Wikipedia05d]

Wikipedia. CIE 1931 color space. http://en.wikipedia.org/wiki/CIE_1931_color_space, 2005.

[Wikipedia05e]

Wikipedia. ISO 31-11. https://en.wikipedia.org/wiki/ISO_31-11, 2005.

[Wikipedia06a]

Wikipedia. List of common coordinate transformations. http://en.wikipedia.org/wiki/List_of_common_coordinate_transformations, 2006.

[Wikipedia06b]

Wikipedia. White points of standard illuminants. http://en.wikipedia.org/wiki/Standard_illuminant#White_points_of_standard_illuminants, 2006.

[Wikipedia07a]

Wikipedia. Lightness. http://en.wikipedia.org/wiki/Lightness, 2007.

[Wikipedia07b]

Wikipedia. The reverse transformation. http://en.wikipedia.org/wiki/CIELUV#The_reverse_transformation, 2007.

[Wikipedia07c]

Wikipedia. CAT02. http://en.wikipedia.org/wiki/CIECAM02#CAT02, 2007.

[Wikipedia07d]

Wikipedia. CIECAM02. http://en.wikipedia.org/wiki/CIECAM02, 2007.

[Wikipedia07e]

Wikipedia. CIELUV. http://en.wikipedia.org/wiki/CIELUV, 2007.

[Wikipedia08a]

Wikipedia. Color difference. http://en.wikipedia.org/wiki/Color_difference, 2008.

[Wikipedia08b]

Wikipedia. Relation to CIE XYZ. http://en.wikipedia.org/wiki/CIE_1960_color_space#Relation_to_CIE_XYZ, 2008.

[Wikipedia08c]

Wikipedia. CIE 1960 color space. http://en.wikipedia.org/wiki/CIE_1960_color_space, 2008.

[Wikipedia08d]

Wikipedia. CIE 1964 color space. http://en.wikipedia.org/wiki/CIE_1964_color_space, 2008.

[Wikipedia15]

Wikipedia. HCL color space. https://en.wikipedia.org/wiki/HCL_color_space, 2015.

[XRite16]

X-Rite. New color specifications for ColorChecker SG and Classic Charts. http://xritephoto.com/ph_product_overview.aspx?ID=938&Action=Support&SupportID=5884#, 2016.

[XRitePantone12]

X-Rite and Pantone. Color iQC and Color iMatch Color Calculations Guide. 2012.

Indirect References#

Some extra references used in the codebase but not directly part of the public api:

5 API Reference#

API Reference#

Colour#

Chromatic Adaptation#

Chromatic Adaptation#

colour

chromatic_adaptation(XYZ, XYZ_w, XYZ_wr[, ...])

Adapt given stimulus from test viewing conditions to reference viewing conditions.

CHROMATIC_ADAPTATION_METHODS

Supported chromatic adaptation methods.

VIEWING_CONDITIONS_CMCCAT2000

Reference CMCCAT2000 chromatic adaptation model viewing conditions.

Dataset

colour

CHROMATIC_ADAPTATION_TRANSFORMS

Chromatic adaptation transforms.

Fairchild (1990)#

colour.adaptation

chromatic_adaptation_Fairchild1990(XYZ_1, ...)

Adapt given stimulus CIE XYZ_1 tristimulus values from test viewing conditions to reference viewing conditions using Fairchild (1990) chromatic adaptation model.

CIE 1994#

colour.adaptation

chromatic_adaptation_CIE1994(XYZ_1, xy_o1, ...)

Adapt given stimulus CIE XYZ_1 tristimulus values from test viewing conditions to reference viewing conditions using CIE 1994 chromatic adaptation model.

CMCCAT2000#

colour.adaptation

chromatic_adaptation_CMCCAT2000(XYZ, XYZ_w, ...)

Adapt given stimulus CIE XYZ tristimulus values using given viewing conditions.

VIEWING_CONDITIONS_CMCCAT2000

Reference CMCCAT2000 chromatic adaptation model viewing conditions.

Ancillary Objects

colour.adaptation

chromatic_adaptation_forward_CMCCAT2000(XYZ, ...)

Adapt given stimulus CIE XYZ tristimulus values from test viewing conditions to reference viewing conditions using CMCCAT2000 forward chromatic adaptation model.

chromatic_adaptation_inverse_CMCCAT2000(...)

Adapt given stimulus corresponding colour CIE XYZ tristimulus values from reference viewing conditions to test viewing conditions using CMCCAT2000 inverse chromatic adaptation model.

InductionFactors_CMCCAT2000(F)

CMCCAT2000 chromatic adaptation model induction factors.

Von Kries#

colour.adaptation

chromatic_adaptation_VonKries(XYZ, XYZ_w, XYZ_wr)

Adapt given stimulus from test viewing conditions to reference viewing conditions.

CHROMATIC_ADAPTATION_TRANSFORMS

Chromatic adaptation transforms.

Dataset

colour.adaptation

CAT_BRADFORD

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_BIANCO2010

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_PC_BIANCO2010

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_CAT02_BRILL2008

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_CAT02

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_CAT16

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_CMCCAT2000

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_CMCCAT97

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_FAIRCHILD

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_SHARP

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_VON_KRIES

ndarray(shape, dtype=float, buffer=None, offset=0,

CAT_XYZ_SCALING

ndarray(shape, dtype=float, buffer=None, offset=0,

Ancillary Objects

colour.adaptation

matrix_chromatic_adaptation_VonKries(XYZ_w, ...)

Compute the chromatic adaptation matrix from test viewing conditions to reference viewing conditions.

Zhai and Luo (2018)#

colour.adaptation

chromatic_adaptation_Zhai2018(XYZ_b, XYZ_wb, ...)

Adapt given sample colour \(XYZ_{\beta}\) tristimulus values from input viewing conditions under \(\beta\) illuminant to output viewing conditions under \(\delta\) illuminant using Zhai and Luo (2018) chromatic adaptation model.

Algebra#

Extrapolation#

colour

Extrapolator([interpolator, method, left, ...])

Extrapolate the 1-D function of given interpolator.

Interpolation#

colour

KernelInterpolator(x, y[, window, kernel, ...])

Kernel based interpolation of a 1-D function.

NearestNeighbourInterpolator(*args, **kwargs)

A nearest-neighbour interpolator.

LinearInterpolator(x, y[, dtype])

Interpolate linearly a 1-D function.

NullInterpolator(x, y[, absolute_tolerance, ...])

Perform 1-D function null interpolation, i.e. a call within given tolerances will return existing \(y\) variable values and default if outside tolerances.

PchipInterpolator(x, y, *args, **kwargs)

Interpolate a 1-D function using Piecewise Cubic Hermite Interpolating Polynomial interpolation.

SpragueInterpolator(x, y[, dtype])

Construct a fifth-order polynomial that passes through \(y\) dependent variable.

lagrange_coefficients(r[, n])

Compute the Lagrange Coefficients at given point \(r\) for degree \(n\).

TABLE_INTERPOLATION_METHODS

Supported table interpolation methods.

table_interpolation(V_xyz, table[, method])

Perform interpolation of given \(V_{xyz}\) values using given interpolation table.

Interpolation Kernels

colour

kernel_nearest_neighbour(x)

Return the nearest-neighbour kernel evaluated at given samples.

kernel_linear(x)

Return the linear kernel evaluated at given samples.

kernel_sinc(x[, a])

Return the sinc kernel evaluated at given samples.

kernel_lanczos(x[, a])

Return the lanczos kernel evaluated at given samples.

kernel_cardinal_spline(x[, a, b])

Return the cardinal spline kernel evaluated at given samples.

Ancillary Objects

colour.algebra

table_interpolation_trilinear(V_xyz, table)

Perform the trilinear interpolation of given \(V_{xyz}\) values using given interpolation table.

table_interpolation_tetrahedral(V_xyz, table)

Perform the tetrahedral interpolation of given \(V_{xyz}\) values using given interpolation table.

Coordinates#

colour.algebra

cartesian_to_spherical(a)

Transform given cartesian coordinates array \(xyz\) to spherical coordinates array \(\rho\theta\phi\) (radial distance, inclination or elevation and azimuth).

spherical_to_cartesian(a)

Transform given spherical coordinates array \(\rho\theta\phi\) (radial distance, inclination or elevation and azimuth) to cartesian coordinates array \(xyz\).

cartesian_to_polar(a)

Transform given cartesian coordinates array \(xy\) to polar coordinates array \(\rho\phi\) (radial coordinate, angular coordinate).

polar_to_cartesian(a)

Transform given polar coordinates array \(\rho\phi\) (radial coordinate, angular coordinate) to cartesian coordinates array \(xy\).

cartesian_to_cylindrical(a)

Transform given cartesian coordinates array \(xyz\) to cylindrical coordinates array \(\rho\phi z\) (radial distance, azimuth and height).

cylindrical_to_cartesian(a)

Transform given cylindrical coordinates array \(\rho\phi z\) (radial distance, azimuth and height) to cartesian coordinates array \(xyz\).

Random#

colour.algebra

random_triplet_generator(size[, limits, ...])

Return a generator yielding random triplets.

Regression#

colour.algebra

least_square_mapping_MoorePenrose(y, x)

Compute the least-squares mapping from dependent variable \(y\) to independent variable \(x\) using Moore-Penrose inverse.

Common#

colour.algebra

get_sdiv_mode()

Return Colour safe division mode.

set_sdiv_mode(mode)

Set Colour safe division function mode.

sdiv_mode([mode])

Define a context manager and decorator temporarily setting Colour safe division function mode.

sdiv(a, b)

Divide given array \(b\) with array \(b\) while handling zero-division.

is_spow_enabled()

Return whether Colour safe / symmetrical power function is enabled.

set_spow_enable(enable)

Set Colour safe / symmetrical power function enabled state.

spow_enable(enable)

Define a context manager and decorator temporarily setting Colour safe / symmetrical power function enabled state.

spow(a, p)

Raise given array \(a\) to the power \(p\) as follows: \(sign(a) * |a|^p\).

normalise_vector(a)

Normalise given vector \(a\).

normalise_maximum(a[, axis, factor, clip])

Normalise given array \(a\) values by \(a\) maximum value and optionally clip them between.

vector_dot(m, v)

Perform the dot product of the matrix array \(m\) with the vector array \(v\).

matrix_dot(a, b)

Perform the dot product of the matrix array \(a\) with the matrix array \(b\).

euclidean_distance(a, b)

Return the Euclidean distance between point array \(a\) and point array \(b\).

manhattan_distance(a, b)

Return the Manhattan (or City-Block) distance between point array \(a\) and point array \(b\).

linear_conversion(a, old_range, new_range)

Perform a simple linear conversion of given array \(a\) between the old and new ranges.

linstep_function(x[, a, b, clip])

Perform a simple linear interpolation between given array \(a\) and array \(b\) using \(x\) array.

lerp(x[, a, b, clip])

Perform a simple linear interpolation between given array \(a\) and array \(b\) using \(x\) array.

smoothstep_function(x[, a, b, clip])

Evaluate the smoothstep sigmoid-like function on array \(x\).

smooth(x[, a, b, clip])

Evaluate the smoothstep sigmoid-like function on array \(x\).

is_identity(a)

Return whether \(a\) array is an identity matrix.

eigen_decomposition(a[, eigen_w_v_count, ...])

Return the eigen-values \(w\) and eigen-vectors \(v\) of given array \(a\) in given order.

Colour Appearance Models#

ATD (1995)#

colour

XYZ_to_ATD95(XYZ, XYZ_0, Y_0, k_1, k_2[, sigma])

Compute the ATD (1995) colour vision model correlates.

CAM_Specification_ATD95(h, C, Q, A_1, T_1, ...)

Define the ATD (1995) colour vision model specification.

CIECAM02#

colour

XYZ_to_CIECAM02(XYZ, XYZ_w, L_A, Y_b[, ...])

Compute the CIECAM02 colour appearance model correlates from given CIE XYZ tristimulus values.

CIECAM02_to_XYZ(specification, XYZ_w, L_A, Y_b)

Convert from CIECAM02 specification to CIE XYZ tristimulus values.

CAM_Specification_CIECAM02(J, C, h, s, Q, M, ...)

Define the CIECAM02 colour appearance model specification.

VIEWING_CONDITIONS_CIECAM02

Reference CIECAM02 colour appearance model viewing conditions.

Ancillary Objects

colour.appearance

CAM_KWARGS_CIECAM02_sRGB

Default parameter values for the CIECAM02 colour appearance model usage in the context of sRGB.

InductionFactors_CIECAM02(F, c, N_c)

CIECAM02 colour appearance model induction factors.

CIECAM16#

colour

XYZ_to_CIECAM16(XYZ, XYZ_w, L_A, Y_b[, ...])

Compute the CIECAM16 colour appearance model correlates from given CIE XYZ tristimulus values.

CIECAM16_to_XYZ(specification, XYZ_w, L_A, Y_b)

Convert from CIECAM16 specification to CIE XYZ tristimulus values.

CAM_Specification_CIECAM16(J, C, h, s, Q, M, ...)

Define the CIECAM16 colour appearance model specification.

VIEWING_CONDITIONS_CIECAM16

Reference CIECAM16 colour appearance model viewing conditions.

Ancillary Objects

colour.appearance

InductionFactors_CIECAM16(F, c, N_c)

CIECAM16 colour appearance model induction factors.

CAM16#

colour

XYZ_to_CAM16(XYZ, XYZ_w, L_A, Y_b[, ...])

Compute the CAM16 colour appearance model correlates from given CIE XYZ tristimulus values.

CAM16_to_XYZ(specification, XYZ_w, L_A, Y_b)

Convert from CAM16 specification to CIE XYZ tristimulus values.

CAM_Specification_CAM16(J, C, h, s, Q, M, H, HC)

Define the CAM16 colour appearance model specification.

VIEWING_CONDITIONS_CAM16

Reference CAM16 colour appearance model viewing conditions.

Ancillary Objects

colour.appearance

InductionFactors_CAM16(F, c, N_c)

CAM16 colour appearance model induction factors.

Hellwig and Fairchild (2022) Colour Appearance Model#

colour

XYZ_to_Hellwig2022(XYZ, XYZ_w, L_A, Y_b[, ...])

Compute the Hellwig and Fairchild (2022) colour appearance model correlates from given CIE XYZ tristimulus values.

Hellwig2022_to_XYZ(specification, XYZ_w, ...)

Convert from Hellwig and Fairchild (2022) specification to CIE XYZ tristimulus values.

CAM_Specification_Hellwig2022(J, C, h, s, Q, ...)

Define the Hellwig and Fairchild (2022) colour appearance model specification.

VIEWING_CONDITIONS_HELLWIG2022

Reference Hellwig and Fairchild (2022) colour appearance model viewing conditions.

Ancillary Objects

colour.appearance

InductionFactors_Hellwig2022(F, c, N_c)

Hellwig and Fairchild (2022) colour appearance model induction factors.

Hunt#

colour

XYZ_to_Hunt(XYZ, XYZ_w, XYZ_b, L_A[, ...])

Compute the Hunt colour appearance model correlates.

CAM_Specification_Hunt(J, C, h, s, Q, M, H, HC)

Define the Hunt colour appearance model specification.

VIEWING_CONDITIONS_HUNT

Reference Hunt colour appearance model viewing conditions.

Kim, Weyrich and Kautz (2009)#

colour

XYZ_to_Kim2009(XYZ, XYZ_w, L_A[, media, ...])

Compute the Kim, Weyrich and Kautz (2009) colour appearance model correlates from given CIE XYZ tristimulus values.

Kim2009_to_XYZ(specification, XYZ_w, L_A[, ...])

Convert from Kim, Weyrich and Kautz (2009) specification to CIE XYZ tristimulus values.

CAM_Specification_Kim2009(J, C, h, s, Q, M, ...)

Define the Kim, Weyrich and Kautz (2009) colour appearance model specification.

MEDIA_PARAMETERS_KIM2009

Reference Kim, Weyrich and Kautz (2009) colour appearance model media parameters.

VIEWING_CONDITIONS_KIM2009

Reference Kim, Weyrich and Kautz (2009) colour appearance model viewing conditions.

Ancillary Objects

colour.appearance

InductionFactors_Kim2009(F, c, N_c)

Kim, Weyrich and Kautz (2009) colour appearance model induction factors.

MediaParameters_Kim2009(E)

Kim, Weyrich and Kautz (2009) colour appearance model media parameters.

\(LLAB(l:c)\)#

colour

XYZ_to_LLAB(XYZ, XYZ_0, Y_b, L[, surround])

Compute the :math:`LLAB(l:c)` colour appearance model correlates.

CAM_Specification_LLAB(J, ...)

Define the :math:`LLAB(l:c)` colour appearance model specification.

VIEWING_CONDITIONS_LLAB

Reference \(LLAB(l:c)\) colour appearance model viewing conditions.

Ancillary Objects

colour.appearance

InductionFactors_LLAB(D, F_S, F_L, F_C)

:math:`LLAB(l:c)` colour appearance model induction factors.

Nayatani (1995)#

colour

XYZ_to_Nayatani95(XYZ, XYZ_n, Y_o, E_o, E_or)

Compute the Nayatani (1995) colour appearance model correlates.

CAM_Specification_Nayatani95(L_star_P, C, h, ...)

Define the Nayatani (1995) colour appearance model specification.

RLAB#

colour

XYZ_to_RLAB(XYZ, XYZ_n, Y_n[, sigma, D])

Compute the RLAB model color appearance correlates.

CAM_Specification_RLAB(J, C, h, s, HC, a, b)

Define the RLAB colour appearance model specification.

VIEWING_CONDITIONS_RLAB

Reference RLAB colour appearance model viewing conditions.

Ancillary Objects

colour.appearance

D_FACTOR_RLAB

RLAB colour appearance model Discounting-the-Illuminant factor values.

ZCAM#

colour

XYZ_to_ZCAM(XYZ, XYZ_w, L_A, Y_b[, ...])

Compute the ZCAM colour appearance model correlates from given CIE XYZ tristimulus values.

ZCAM_to_XYZ(specification, XYZ_w, L_A, Y_b)

Convert from ZCAM specification to CIE XYZ tristimulus values.

CAM_Specification_ZCAM(J, C, h, s, Q, M, H, ...)

Define the ZCAM colour appearance model specification.

VIEWING_CONDITIONS_ZCAM

Reference ZCAM colour appearance model viewing conditions.

Ancillary Objects

colour.appearance

InductionFactors_ZCAM(F_s, F, c, N_c)

ZCAM colour appearance model induction factors.

Helmholtz-Kohlrausch Effect Estimation#

colour

HKE_NAYATANI1997_METHODS

Nayatani (1997) HKE computation methods, choice between variable achromatic colour ('VAC') and variable chromatic colour ('VCC')

HelmholtzKohlrausch_effect_object_Nayatani1997(uv, ...)

Return the HKE value for object colours using Nayatani (1997) method.

HelmholtzKohlrausch_effect_luminous_Nayatani1997(uv, ...)

Return the HKE factor for luminous colours using Nayatani (1997) method.

Ancillary Objects

colour.appearance

coefficient_q_Nayatani1997(theta)

Return the \(q(\theta)\) coefficient for Nayatani (1997) HKE computations.

coefficient_K_Br_Nayatani1997(L_a)

Return the \(K_{Br}\) coefficient for Nayatani (1997) HKE computations.

Biochemistry#

Michaelis–Menten Kinetics#

colour.biochemistry

REACTION_RATE_MICHAELISMENTEN_METHODS

Supported Michaelis-Menten kinetics reaction rate equation computation methods.

reaction_rate_MichaelisMenten(S, V_max, K_m)

Describe the rate of enzymatic reactions, by relating reaction rate \(v\) to concentration of a substrate \(S\) according to given method.

SUBSTRATE_CONCENTRATION_MICHAELISMENTEN_METHODS

Supported Michaelis-Menten kinetics substrate concentration equation computation methods.

substrate_concentration_MichaelisMenten(v, ...)

Describe the rate of enzymatic reactions, by relating concentration of a substrate \(S\) to reaction rate \(v\) according to given method.

reaction_rate_MichaelisMenten_Michaelis1913(S, ...)

Describe the rate of enzymatic reactions, by relating reaction rate \(v\) to concentration of a substrate \(S\).

substrate_concentration_MichaelisMenten_Michaelis1913(v, ...)

Describe the rate of enzymatic reactions, by relating concentration of a substrate \(S\) to reaction rate \(v\).

reaction_rate_MichaelisMenten_Abebe2017(S, ...)

Describe the rate of enzymatic reactions, by relating reaction rate \(v\) to concentration of a substrate \(S\) according to the modified Michaelis-Menten kinetics equation as given by Abebe, Pouli, Larabi and Reinhard (2017).

substrate_concentration_MichaelisMenten_Abebe2017(v, ...)

Describe the rate of enzymatic reactions, by relating concentration of a substrate \(S\) to reaction rate \(v\) according to the modified Michaelis-Menten kinetics equation as given by Abebe, Pouli, Larabi and Reinhard (2017).

Colour Vision Deficiency#

Machado, Oliveira and Fernandes (2009)#

colour

msds_cmfs_anomalous_trichromacy_Machado2009(...)

Shift given LMS cone fundamentals colour matching functions with given \(\Delta_{LMS}\) shift amount in nanometers to simulate anomalous trichromacy using Machado et al. (2009) method.

matrix_anomalous_trichromacy_Machado2009(...)

Compute the Machado et al. (2009) CVD matrix for given LMS cone fundamentals colour matching functions and display primaries tri-spectral distributions with given \(\Delta_{LMS}\) shift amount in nanometers to simulate anomalous trichromacy.

matrix_cvd_Machado2009(deficiency, severity)

Compute Machado et al. (2009) CVD matrix for given deficiency and severity using the pre-computed matrices dataset.

Dataset

colour

CVD_MATRICES_MACHADO2010

Machado (2010) Simulation matrices \(\Phi_{CVD}\).

Colour Characterisation#

ACES Spectral Conversion#

colour

sd_to_aces_relative_exposure_values(sd[, ...])

Convert given spectral distribution to ACES2065-1 colourspace relative exposure values.

sd_to_ACES2065_1(sd[, illuminant, ...])

Convert given spectral distribution to ACES2065-1 colourspace relative exposure values.

Ancillary Objects

colour.characterisation

MSDS_ACES_RICD

Implement support for a camera RGB sensitivities.

ACES Input Transform Computation#

colour

matrix_idt(sensitivities, illuminant[, ...])

Compute an Input Device Transform (IDT) matrix for given camera RGB spectral sensitivities, illuminant, training data, standard observer colour matching functions and optimisation settings according to RAW to ACES v1 and P-2013-001 procedures.

camera_RGB_to_ACES2065_1(RGB, B, b[, k, clip])

Convert given camera RGB colourspace array to ACES2065-1 colourspace using the Input Device Transform (IDT) matrix \(B\), the white balance multipliers \(b\) and the exposure factor \(k\) according to P-2013-001 procedure.

Ancillary Objects

colour.characterisation

read_training_data_rawtoaces_v1()

Read the RAW to ACES v1 190 patches.

generate_illuminants_rawtoaces_v1()

Generate a series of illuminants according to RAW to ACES v1:

white_balance_multipliers(sensitivities, ...)

Compute the RGB white balance multipliers for given camera RGB spectral sensitivities and illuminant.

best_illuminant(RGB_w, sensitivities, ...)

Select the best illuminant for given RGB white balance multipliers, and sensitivities in given series of illuminants.

normalise_illuminant(illuminant, sensitivities)

Normalise given illuminant with given camera RGB spectral sensitivities.

training_data_sds_to_RGB(training_data, ...)

Convert given training data to RGB tristimulus values using given illuminant and given camera RGB spectral sensitivities.

training_data_sds_to_XYZ(training_data, ...)

Convert given training data to CIE XYZ tristimulus values using given illuminant and given standard observer colour matching functions.

whitepoint_preserving_matrix(M[, RGB_w])

Normalise given matrix \(M\) to preserve given white point \(RGB_w\).

optimisation_factory_rawtoaces_v1()

Produce the objective function and CIE XYZ colourspace to optimisation colourspace/colour model function according to RAW to ACES v1.

optimisation_factory_Jzazbz()

Produce the objective function and CIE XYZ colourspace to optimisation colourspace/colour model function based on the \(J_za_zb_z\) colourspace.

optimisation_factory_Oklab_15()

Produce the objective function and CIE XYZ colourspace to optimisation colourspace/colour model function based on the Oklab colourspace.

Colour Fitting#

colour

POLYNOMIAL_EXPANSION_METHODS

Supported polynomial expansion methods.

polynomial_expansion(a[, method])

Perform polynomial expansion of given \(a\) array.

MATRIX_COLOUR_CORRECTION_METHODS

Supported colour correction matrix methods.

matrix_colour_correction(M_T, M_R[, method])

Compute a colour correction matrix from given \(M_T\) colour array to \(M_R\) colour array.

APPLY_MATRIX_COLOUR_CORRECTION_METHODS

Supported methods to apply a colour correction matrix.

apply_matrix_colour_correction(RGB, CCM[, ...])

Apply given colour correction matrix \(CCM\) to given RGB colourspace array.

COLOUR_CORRECTION_METHODS

Supported colour correction methods.

colour_correction(RGB, M_T, M_R[, method])

Perform colour correction of given RGB colourspace array using the colour correction matrix from given \(M_T\) colour array to \(M_R\) colour array.

Ancillary Objects

colour.characterisation

matrix_augmented_Cheung2004(RGB[, terms])

Perform polynomial expansion of given RGB colourspace array using Cheung et al. (2004) method.

polynomial_expansion_Finlayson2015(RGB[, ...])

Perform polynomial expansion of given RGB colourspace array using Finlayson et al. (2015) method.

polynomial_expansion_Vandermonde(a[, degree])

Perform polynomial expansion of given \(a\) array using Vandermonde method.

matrix_colour_correction_Cheung2004(M_T, M_R)

Compute a colour correction matrix from given \(M_T\) colour array to \(M_R\) colour array using Cheung et al. (2004) method.

matrix_colour_correction_Finlayson2015(M_T, M_R)

Compute a colour correction matrix from given \(M_T\) colour array to \(M_R\) colour array using Finlayson et al. (2015) method.

matrix_colour_correction_Vandermonde(M_T, M_R)

Compute a colour correction matrix from given \(M_T\) colour array to \(M_R\) colour array using Vandermonde method.

apply_matrix_colour_correction_Cheung2004(...)

Apply given colour correction matrix \(CCM\) computed using Cheung et al. (2004) method to given RGB colourspace array.

apply_matrix_colour_correction_Finlayson2015(...)

Apply given colour correction matrix \(CCM\) computed using Finlayson et al. (2015) method to given RGB colourspace array.

apply_matrix_colour_correction_Vandermonde(...)

Apply given colour correction matrix \(CCM\) computed using Vandermonde method to given RGB colourspace array.

colour_correction_Cheung2004(RGB, M_T, M_R)

Perform colour correction of given RGB colourspace array using the colour correction matrix from given \(M_T\) colour array to \(M_R\) colour array using Cheung et al. (2004) method.

colour_correction_Finlayson2015(RGB, M_T, M_R)

Perform colour correction of given RGB colourspace array using the colour correction matrix from given \(M_T\) colour array to \(M_R\) colour array using Finlayson et al. (2015) method.

colour_correction_Vandermonde(RGB, M_T, M_R)

Perform colour correction of given RGB colourspace array using the colour correction matrix from given \(M_T\) colour array to \(M_R\) colour array using Vandermonde method.

Colour Rendition Charts#

Dataset

colour

CCS_COLOURCHECKERS

Chromaticity coordinates of the colour checkers.

SDS_COLOURCHECKERS

Spectral distributions of the colour checkers.

Ancillary Objects

colour.characterisation

ColourChecker(name, data, illuminant, rows, ...)

Colour Checker data.

Cameras#

colour.characterisation

RGB_CameraSensitivities([data, domain, labels])

Implement support for a camera RGB sensitivities.

Dataset

colour

MSDS_CAMERA_SENSITIVITIES

Multi-spectral distributions of camera sensitivities.

Displays#

colour.characterisation

RGB_DisplayPrimaries([data, domain, labels])

Implement support for a RGB display (such as a CRT or LCD) primaries multi-spectral distributions.

Dataset

colour

MSDS_DISPLAY_PRIMARIES

Primaries multi-spectral distributions of displays.

Filters#

Dataset

colour

SDS_FILTERS

Spectral distributions of filters.

Lenses#

Dataset

colour

SDS_LENSES

Spectral distributions of lenses.

Colorimetry#

Spectral Data Structure#

colour

SpectralShape(start, end, interval)

Define the base object for spectral distribution shape.

SpectralDistribution([data, domain])

Define the spectral distribution: the base object for spectral computations.

MultiSpectralDistributions([data, domain, ...])

Define the multi-spectral distributions: the base object for multi spectral computations.

SPECTRAL_SHAPE_ASTME308

(360, 780, 1).

SPECTRAL_SHAPE_DEFAULT

(360, 780, 1).

Ancillary Objects

colour.colorimetry

reshape_sd(sd[, shape, method, copy])

Reshape given spectral distribution with given spectral shape.

reshape_msds(msds[, shape, method, copy])

Reshape given multi-spectral distributions with given spectral shape.

sds_and_msds_to_sds(sds)

Convert given spectral and multi-spectral distributions to a list of spectral distributions.

sds_and_msds_to_msds(sds)

Convert given spectral and multi-spectral distributions to multi-spectral distributions.

Spectral Data Generation#

colour

sd_CIE_standard_illuminant_A([shape])

CIE Standard Illuminant A is intended to represent typical, domestic, tungsten-filament lighting.

sd_CIE_illuminant_D_series(xy[, ...])

Return the spectral distribution of given CIE Illuminant D Series using given CIE xy chromaticity coordinates.

sd_blackbody(temperature[, shape, c1, c2, n])

Return the spectral distribution of the planckian radiator for given temperature \(T[K]\) with values in watts per steradian per square metre per nanometer (\(W/sr/m^2/nm\)).

sd_rayleigh_jeans(temperature[, shape])

Return the spectral distribution of the planckian radiator for given temperature \(T[K]\) with values in watts per steradian per square metre per nanometer (\(W/sr/m^2/nm\)) according to Rayleigh-Jeans law.

sd_constant(k[, shape])

Return a spectral distribution of given spectral shape filled with constant \(k\) values.

sd_ones([shape])

Return a spectral distribution of given spectral shape filled with ones.

sd_zeros([shape])

Return a spectral distribution of given spectral shape filled with zeros.

msds_constant(k, labels[, shape])

Return the multi-spectral distributions with given labels and given spectral shape filled with constant \(k\) values.

msds_ones(labels[, shape])

Return the multi-spectral distributionss with given labels and given spectral shape filled with ones.

msds_zeros(labels[, shape])

Return the multi-spectral distributionss with given labels and given spectral shape filled with zeros.

SD_GAUSSIAN_METHODS

Supported gaussian spectral distribution computation methods.

sd_gaussian(mu_peak_wavelength, sigma_fwhm)

Return a gaussian spectral distribution of given spectral shape using given method.

SD_SINGLE_LED_METHODS

Supported single LED spectral distribution computation methods.

sd_single_led(peak_wavelength[, shape, method])

Return a single LED spectral distribution of given spectral shape at given peak wavelength according to given method.

SD_MULTI_LEDS_METHODS

Supported multi LED spectral distribution computation methods.

sd_multi_leds(peak_wavelengths[, shape, method])

Return a multi LED spectral distribution of given spectral shape at given peak wavelengths.

colour.colorimetry

blackbody_spectral_radiance(wavelength, ...)

Return the spectral radiance of a blackbody as a function of wavelength at thermodynamic temperature \(T[K]\) in a medium having index of refraction \(n\).

planck_law(wavelength, temperature[, c1, c2, n])

Return the spectral radiance of a blackbody as a function of wavelength at thermodynamic temperature \(T[K]\) in a medium having index of refraction \(n\).

rayleigh_jeans_law(wavelength, temperature)

Return the approximation of the spectral radiance of a blackbody as a function of wavelength at thermodynamic temperature \(T[K]\) according to Rayleigh-Jeans law.

daylight_locus_function(x_D)

Return the daylight locus as CIE xy chromaticity coordinates.

sd_gaussian_normal(mu, sigma[, shape])

Return a gaussian spectral distribution of given spectral shape at given mean wavelength \(\mu\) and standard deviation \(sigma\).

sd_gaussian_fwhm(peak_wavelength, fwhm[, shape])

Return a gaussian spectral distribution of given spectral shape at given peak wavelength and full width at half maximum.

sd_single_led_Ohno2005(peak_wavelength, ...)

Return a single LED spectral distribution of given spectral shape at given peak wavelength and half spectral width \(\Delta\lambda_{0.5}\) according to Ohno (2005) method.

sd_multi_leds_Ohno2005(peak_wavelengths, ...)

Return a multi LED spectral distribution of given spectral shape at given peak wavelengths, half spectral widths \(\Delta\lambda_{0.5}\) and peak power ratios according to Ohno (2005) method.

Aliases

colour.colorimetry

planck_law(wavelength, temperature[, c1, c2, n])

Return the spectral radiance of a blackbody as a function of wavelength at thermodynamic temperature \(T[K]\) in a medium having index of refraction \(n\).

Conversion to Tristimulus Values#

colour

sd_to_XYZ(sd[, cmfs, illuminant, k, method])

Convert given spectral distribution to CIE XYZ tristimulus values using given colour matching functions, illuminant and method.

SD_TO_XYZ_METHODS

Supported spectral distribution to CIE XYZ tristimulus values conversion methods.

msds_to_XYZ(msds[, cmfs, illuminant, k, method])

Convert given multi-spectral distributions to CIE XYZ tristimulus values using given colour matching functions and illuminant.

MSDS_TO_XYZ_METHODS

Supported multi-spectral array to CIE XYZ tristimulus values conversion methods.

wavelength_to_XYZ(wavelength[, cmfs])

Convert given wavelength \(\lambda\) to CIE XYZ tristimulus values using given colour matching functions.

Ancillary Objects

colour.colorimetry

handle_spectral_arguments([cmfs, ...])

Handle the spectral arguments of various Colour definitions performing spectral computations.

ASTM E308-15#

colour.colorimetry

sd_to_XYZ_ASTME308(sd[, cmfs, illuminant, ...])

Convert given spectral distribution to CIE XYZ tristimulus values using given colour matching functions and illuminant according to practise ASTM E308-15 method.

msds_to_XYZ_ASTME308(msds[, cmfs, ...])

Convert given multi-spectral distributions to CIE XYZ tristimulus values using given colour matching functions and illuminant according to practise ASTM E308-15 method.

Ancillary Objects

colour.colorimetry

sd_to_XYZ_tristimulus_weighting_factors_ASTME308(sd)

Convert given spectral distribution to CIE XYZ tristimulus values using given colour matching functions and illuminant using a table of tristimulus weighting factors according to practise ASTM E308-15 method.

adjust_tristimulus_weighting_factors_ASTME308(W, ...)

Adjust given table of tristimulus weighting factors to account for a shorter wavelengths range of the test spectral shape compared to the reference spectral shape using practise ASTM E308-15 method: Weights at the wavelengths for which data are not available are added to the weights at the shortest and longest wavelength for which spectral data are available.

lagrange_coefficients_ASTME2022([interval, ...])

Compute the Lagrange Coefficients for given interval size using practise ASTM E2022-11 method.

tristimulus_weighting_factors_ASTME2022(...)

Return a table of tristimulus weighting factors for given colour matching functions and illuminant using practise ASTM E2022-11 method.

Integration#

colour.colorimetry

sd_to_XYZ_integration(sd[, cmfs, ...])

Convert given spectral distribution to CIE XYZ tristimulus values using given colour matching functions and illuminant according to classical integration method.

msds_to_XYZ_integration(msds[, cmfs, ...])

Convert given multi-spectral distributions to CIE XYZ tristimulus values using given colour matching functions and illuminant.

Spectral Bandpass Dependence Correction#

colour

bandpass_correction(sd[, method])

Implement spectral bandpass dependence correction on given spectral distribution using given method.

BANDPASS_CORRECTION_METHODS

Supported spectral bandpass dependence correction methods.

Stearns and Stearns (1988)#

colour.colorimetry

bandpass_correction_Stearns1988(sd)

Implement spectral bandpass dependence correction on given spectral distribution using Stearns and Stearns (1988) method.

Colour Matching Functions#

colour.colorimetry

LMS_ConeFundamentals([data, domain, labels])

Implement support for the Stockman and Sharpe LMS cone fundamentals colour matching functions.

RGB_ColourMatchingFunctions([data, domain, ...])

Implement support for the CIE RGB colour matching functions.

XYZ_ColourMatchingFunctions([data, domain, ...])

Implement support for the CIE Standard Observers XYZ colour matching functions.

Dataset

colour

MSDS_CMFS

Multi-spectral distributions of the colour matching functions.

Ancillary Objects

colour.colorimetry

MSDS_CMFS_LMS

Multi-spectral distributions of the LMS colour matching functions.

MSDS_CMFS_RGB

Multi-spectral distributions of the RGB colour matching functions.

MSDS_CMFS_STANDARD_OBSERVER

Multi-spectral distributions of the CIE Standard Observer colour matching functions.

Colour Matching Functions Transformations#

Ancillary Objects

colour.colorimetry

RGB_2_degree_cmfs_to_XYZ_2_degree_cmfs(...)

Convert Wright & Guild 1931 2 Degree RGB CMFs colour matching functions into the CIE 1931 2 Degree Standard Observer colour matching functions.

RGB_10_degree_cmfs_to_XYZ_10_degree_cmfs(...)

Convert Stiles & Burch 1959 10 Degree RGB CMFs colour matching functions into the CIE 1964 10 Degree Standard Observer colour matching functions.

RGB_10_degree_cmfs_to_LMS_10_degree_cmfs(...)

Convert Stiles & Burch 1959 10 Degree RGB CMFs colour matching functions into the Stockman & Sharpe 10 Degree Cone Fundamentals spectral sensitivity functions.

LMS_2_degree_cmfs_to_XYZ_2_degree_cmfs(...)

Convert Stockman & Sharpe 2 Degree Cone Fundamentals colour matching functions into the CIE 2015 2 Degree Standard Observer colour matching functions.

LMS_10_degree_cmfs_to_XYZ_10_degree_cmfs(...)

Convert Stockman & Sharpe 10 Degree Cone Fundamentals colour matching functions into the CIE 2015 10 Degree Standard Observer colour matching functions.

Illuminants and Light Sources#

Dataset

colour

CCS_ILLUMINANTS

Chromaticity coordinates of the illuminants.

SDS_ILLUMINANTS

Spectral distributions of the illuminants.

CCS_LIGHT_SOURCES

Chromaticity coordinates of the light sources.

SDS_LIGHT_SOURCES

Spectral distributions of the light sources.

TVS_ILLUMINANTS

CIE XYZ tristimulus values of the illuminants.

TVS_ILLUMINANTS_HUNTERLAB

CIE XYZ tristimulus values of the HunterLab illuminants.

Ancillary Objects

colour.colorimetry

SDS_BASIS_FUNCTIONS_CIE_ILLUMINANT_D_SERIES

CIE Illuminant D Series \(S_n(\lambda)\) spectral distributions.

Dominant Wavelength and Purity#

colour

dominant_wavelength(xy, xy_n[, cmfs, inverse])

Return the dominant wavelength \(\lambda_d\) for given colour stimulus \(xy\) and the related \(xy_wl\) first and \(xy_{cw}\) second intersection coordinates with the spectral locus.

complementary_wavelength(xy, xy_n[, cmfs])

Return the complementary wavelength \(\lambda_c\) for given colour stimulus \(xy\) and the related \(xy_wl\) first and \(xy_{cw}\) second intersection coordinates with the spectral locus.

excitation_purity(xy, xy_n[, cmfs])

Return the excitation purity \(P_e\) for given colour stimulus \(xy\).

colorimetric_purity(xy, xy_n[, cmfs])

Return the colorimetric purity \(P_c\) for given colour stimulus \(xy\).

Luminous Efficiency Functions#

colour

luminous_efficacy(sd[, lef])

Return the luminous efficacy in \(lm\cdot W^{-1}\) of given spectral distribution using given luminous efficiency function.

luminous_efficiency(sd[, lef])

Return the luminous efficiency of given spectral distribution using given luminous efficiency function.

luminous_flux(sd[, lef, K_m])

Return the luminous flux for given spectral distribution using given luminous efficiency function.

sd_mesopic_luminous_efficiency_function(L_p)

Return the mesopic luminous efficiency function \(V_m(\lambda)\) for given photopic luminance \(L_p\).

Dataset

colour

SDS_LEFS

Spectral distributions of the luminous efficiency functions.

Ancillary Objects

colour.colorimetry

SDS_LEFS_PHOTOPIC

Spectral distributions of the photopic luminous efficiency functions.

SDS_LEFS_SCOTOPIC

Spectral distributions of the scotopic luminous efficiency functions.

Spectral Uniformity#

colour

spectral_uniformity(sds[, ...])

Compute the spectral uniformity (or spectral flatness) of given spectral distributions.

Lightness Computation#

colour

lightness(Y[, method])

Return the Lightness \(L\) of given luminance \(Y\) using given method.

LIGHTNESS_METHODS

Supported Lightness computation methods.

Glasser, Mckinney, Reilly and Schnelle (1958)#

colour.colorimetry

lightness_Glasser1958(Y)

Return the Lightness \(L\) of given luminance \(Y\) using Glasser et al. (1958) method.

Wyszecki (1963)#

colour.colorimetry

lightness_Wyszecki1963(Y)

Return the Lightness \(W\) of given luminance \(Y\) using Wyszecki (1963) method.

CIE 1976#

colour.colorimetry

lightness_CIE1976(Y[, Y_n])

Return the Lightness \(L^*\) of given luminance \(Y\) using given reference white luminance \(Y_n\) as per CIE 1976 recommendation.

intermediate_lightness_function_CIE1976(Y[, Y_n])

Return the intermediate value \(f(Y/Yn)\) in the Lightness \(L^*\) computation for given luminance \(Y\) using given reference white luminance \(Y_n\) as per CIE 1976 recommendation.

Fairchild and Wyble (2010)#

colour.colorimetry

lightness_Fairchild2010(Y[, epsilon])

Compute Lightness \(L_{hdr}\) of given luminance \(Y\) using Fairchild and Wyble (2010) method according to Michaelis-Menten kinetics.

Fairchild and Chen (2011)#

colour.colorimetry

lightness_Fairchild2011(Y[, epsilon, method])

Compute Lightness \(L_{hdr}\) of given luminance \(Y\) using Fairchild and Chen (2011) method according to Michaelis-Menten kinetics.

Abebe, Pouli, Larabi and Reinhard (2017)#

colour.colorimetry

lightness_Abebe2017(Y[, Y_n, method])

Compute Lightness \(L\) of given luminance \(Y\) using Abebe, Pouli, Larabi and Reinhard (2017) method according to Michaelis-Menten kinetics or Stevens's Power Law.

Luminance Computation#

colour

luminance(LV[, method])

Return the luminance \(Y\) of given Lightness \(L^*\) or given Munsell value \(V\).

LUMINANCE_METHODS

Supported luminance computation methods.

Newhall, Nickerson and Judd (1943)#

colour.colorimetry

luminance_Newhall1943(V)

Return the luminance \(R_Y\) of given Munsell value \(V\) using Newhall et al. (1943) method.

CIE 1976#

colour.colorimetry

luminance_CIE1976(L_star[, Y_n])

Return the luminance \(Y\) of given Lightness \(L^*\) with given reference white luminance \(Y_n\).

intermediate_luminance_function_CIE1976(f_Y_Y_n)

Return the luminance \(Y\) in the luminance \(Y\) computation for given intermediate value \(f(Y/Yn)\) using given reference white luminance \(Y_n\) as per CIE 1976 recommendation.

ASTM D1535-08e1#

colour.colorimetry

luminance_ASTMD1535(V)

Return the luminance \(Y\) of given Munsell value \(V\) using ASTM D1535-08e1 method.

Fairchild and Wyble (2010)#

colour.colorimetry

luminance_Fairchild2010(L_hdr[, epsilon])

Compute luminance \(Y\) of given Lightness \(L_{hdr}\) using Fairchild and Wyble (2010) method according to Michaelis-Menten kinetics.

Fairchild and Chen (2011)#

colour.colorimetry

luminance_Fairchild2011(L_hdr[, epsilon, method])

Compute luminance \(Y\) of given Lightness \(L_{hdr}\) using Fairchild and Chen (2011) method according to Michaelis-Menten kinetics.

Whiteness Computation#

colour

whiteness(XYZ, XYZ_0[, method])

Return the whiteness \(W\) using given method.

WHITENESS_METHODS

Supported whiteness computation methods.

Berger (1959)#

colour.colorimetry

whiteness_Berger1959(XYZ, XYZ_0)

Return the whiteness index \(WI\) of given sample CIE XYZ tristimulus values using Berger (1959) method.

Taube (1960)#

colour.colorimetry

whiteness_Taube1960(XYZ, XYZ_0)

Return the whiteness index \(WI\) of given sample CIE XYZ tristimulus values using Taube (1960) method.

Stensby (1968)#

colour.colorimetry

whiteness_Stensby1968(Lab)

Return the whiteness index \(WI\) of given sample CIE L*a*b* colourspace array using Stensby (1968) method.

ASTM E313#

colour.colorimetry

whiteness_ASTME313(XYZ)

Return the whiteness index \(WI\) of given sample CIE XYZ tristimulus values using ASTM E313 method.

Ganz and Griesser (1979)#

colour.colorimetry

whiteness_Ganz1979(xy, Y)

Return the whiteness index \(W\) and tint \(T\) of given sample CIE xy chromaticity coordinates using Ganz and Griesser (1979) method.

CIE 2004#

colour.colorimetry

whiteness_CIE2004(xy, Y, xy_n[, observer])

Return the whiteness \(W\) or \(W_{10}\) and tint \(T\) or \(T_{10}\) of given sample CIE xy chromaticity coordinates using CIE 2004 method.

Yellowness Computation#

colour

yellowness(XYZ[, method])

Return the yellowness \(W\) using given method.

YELLOWNESS_METHODS

Supported yellowness computation methods.

ASTM D1925#

colour.colorimetry

yellowness_ASTMD1925(XYZ)

Return the yellowness index \(YI\) of given sample CIE XYZ tristimulus values using ASTM D1925 method.

ASTM E313#

colour.colorimetry

yellowness_ASTME313_alternative(XYZ)

Return the yellowness index \(YI\) of given sample CIE XYZ tristimulus values using the alternative ASTM E313 method.

YELLOWNESS_COEFFICIENTS_ASTME313

Coefficients \(C_X\) and \(C_Z\) for the ASTM E313 yellowness index \(YI\) computation method.

yellowness_ASTME313(XYZ[, C_XZ])

Return the yellowness index \(YI\) of given sample CIE XYZ tristimulus values using ASTM E313 method.

Constants#

CIE#

colour.constants

CONSTANT_K_M

Rounded maximum photopic luminous efficiency \(K_m\) value in \(lm\cdot W^{-1}\).

CONSTANT_KP_M

Rounded maximum scotopic luminous efficiency \(K^{\prime}_m\) value in \(lm\cdot W^{-1}\).

CODATA#

colour.constants

CONSTANT_AVOGADRO

Avogadro constant.

CONSTANT_BOLTZMANN

Boltzmann constant.

CONSTANT_LIGHT_SPEED

Speed of light in vacuum.

CONSTANT_PLANCK

Planck constant.

Common#

colour.constants

FLOATING_POINT_NUMBER_PATTERN

str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

INTEGER_THRESHOLD

int threshold value when checking if a float point number is almost an int.

EPSILON

Double-precision floating-point number type, compatible with Python float and C double.

DTYPE_INT_DEFAULT

alias of int64

DTYPE_FLOAT_DEFAULT

alias of float64

TOLERANCE_ABSOLUTE_DEFAULT

Convert a string or number to a floating point number, if possible.

TOLERANCE_RELATIVE_DEFAULT

Convert a string or number to a floating point number, if possible.

TOLERANCE_ABSOLUTE_TESTS

Convert a string or number to a floating point number, if possible.

TOLERANCE_RELATIVE_TESTS

Convert a string or number to a floating point number, if possible.

Contrast Sensitivity#

Contrast Sensitivity#

colour

contrast_sensitivity_function([method])

Return the contrast sensitivity \(S\) of the human eye according to the contrast sensitivity function (CSF) described by given method.

CONTRAST_SENSITIVITY_METHODS

Supported contrast sensitivity methods.

Barten (1999) Contrast Sensitivity Function#

colour.contrast

contrast_sensitivity_function_Barten1999(u)

Return the contrast sensitivity \(S\) of the human eye according to the contrast sensitivity function (CSF) described by Barten (1999).

Ancillary Objects

colour.contrast

optical_MTF_Barten1999(u[, sigma])

Return the optical modulation transfer function (MTF) \(M_{opt}\) of the eye using Barten (1999) method.

pupil_diameter_Barten1999(L[, X_0, Y_0])

Return the pupil diameter for given luminance and object or stimulus angular size using Barten (1999) method.

sigma_Barten1999([sigma_0, C_ab, d])

Return the standard deviation \(\sigma\) of the line-spread function resulting from the convolution of the different elements of the convolution process using Barten (1999) method.

retinal_illuminance_Barten1999(L[, d, ...])

Return the retinal illuminance \(E\) in Trolands for given average luminance \(L\) and pupil diameter \(d\) using Barten (1999) method.

maximum_angular_size_Barten1999(u[, X_0, ...])

Return the maximum angular size \(X\) of the object considered using Barten (1999) method.

Continuous Signal#

Continuous Signal#

colour.continuous

AbstractContinuousFunction([name])

Define the base class for abstract continuous function.

Signal([data, domain])

Define the base class for continuous signal.

MultiSignals([data, domain, labels])

Define the base class for multi-continuous signals, a container for multiple colour.continuous.Signal sub-class instances.

Corresponding Chromaticities#

Prediction#

colour

corresponding_chromaticities_prediction([...])

Return the corresponding chromaticities prediction for given chromatic adaptation model.

CORRESPONDING_CHROMATICITIES_PREDICTION_MODELS

Aggregated corresponding chromaticities prediction models.

CorrespondingColourDataset(name, XYZ_r, ...)

Define a corresponding colour dataset.

CorrespondingChromaticitiesPrediction(name, ...)

Define a chromatic adaptation model prediction.

Dataset

colour

BRENEMAN_EXPERIMENTS

Breneman (1987) experiments.

BRENEMAN_EXPERIMENT_PRIMARIES_CHROMATICITIES

Breneman (1987) experiments primaries chromaticities.

Fairchild (1990)#

colour.corresponding

corresponding_chromaticities_prediction_Fairchild1990([...])

Return the corresponding chromaticities prediction for Fairchild (1990) chromatic adaptation model.

CIE 1994#

colour.corresponding

corresponding_chromaticities_prediction_CIE1994([...])

Return the corresponding chromaticities prediction for CIE 1994 chromatic adaptation model.

CMCCAT2000#

colour.corresponding

corresponding_chromaticities_prediction_CMCCAT2000([...])

Return the corresponding chromaticities prediction for CMCCAT2000 chromatic adaptation model.

Von Kries#

colour.corresponding

corresponding_chromaticities_prediction_VonKries([...])

Return the corresponding chromaticities prediction for Von Kries chromatic adaptation model using given transform.

Colour Difference#

Delta E#

colour

delta_E(a, b[, method])

Return the difference \(\Delta E_{ab}\) between two given CIE L*a*b*, \(IC_TC_P\), or \(J'a'b'\) colourspace arrays using given method.

DELTA_E_METHODS

Supported \(\Delta E_{ab}\) computation methods.

CIE 1976#

colour.difference

JND_CIE1976

Just Noticeable Difference (JND) according to CIE 1976 colour difference formula, i.e. Euclidean distance in CIE L*a*b* colourspace.

delta_E_CIE1976(Lab_1, Lab_2)

Return the difference \(\Delta E_{76}\) between two given CIE L*a*b* colourspace arrays using CIE 1976 recommendation.

CIE 1994#

colour.difference

delta_E_CIE1994(Lab_1, Lab_2[, textiles])

Return the difference \(\Delta E_{94}\) between two given CIE L*a*b* colourspace arrays using CIE 1994 recommendation.

CIE 2000#

colour.difference

delta_E_CIE2000(Lab_1, Lab_2[, textiles])

Return the difference \(\Delta E_{00}\) between two given CIE L*a*b* colourspace arrays using CIE 2000 recommendation.

CMC#

colour.difference

delta_E_CMC(Lab_1, Lab_2[, l, c])

Return the difference \(\Delta E_{CMC}\) between two given CIE L*a*b* colourspace arrays using Colour Measurement Committee recommendation.

ITP#

colour.difference

delta_E_ITP(ICtCp_1, ICtCp_2)

Return the difference \(\Delta E_{ITP}\) between two given \(IC_TC_P\) colour encoding arrays using Recommendation ITU-R BT.2124.

Luo, Cui and Li (2006)#

colour.difference

delta_E_CAM02LCD(Jpapbp_1, Jpapbp_2)

Return the difference \(\Delta E'\) between two given Luo et al. (2006) CAM02-LCD colourspaces \(J'a'b'\) arrays.

delta_E_CAM02SCD(Jpapbp_1, Jpapbp_2)

Return the difference \(\Delta E'\) between two given Luo et al. (2006) CAM02-SCD colourspaces \(J'a'b'\) arrays.

delta_E_CAM02UCS(Jpapbp_1, Jpapbp_2)

Return the difference \(\Delta E'\) between two given Luo et al. (2006) CAM02-UCS colourspaces \(J'a'b'\) arrays.

Li, Li, Wang, Zu, Luo, Cui, Melgosa, Brill and Pointer (2017)#

colour.difference

delta_E_CAM16LCD(Jpapbp_1, Jpapbp_2)

Return the difference \(\Delta E'\) between two given Li et al. (2017) CAM16-LCD colourspaces \(J'a'b'\) arrays.

delta_E_CAM16SCD(Jpapbp_1, Jpapbp_2)

Return the difference \(\Delta E'\) between two given Li et al. (2017) CAM16-SCD colourspaces \(J'a'b'\) arrays.

delta_E_CAM16UCS(Jpapbp_1, Jpapbp_2)

Return the difference \(\Delta E'\) between two given Li et al. (2017) CAM16-UCS colourspaces \(J'a'b'\) arrays.

DIN99#

colour.difference

delta_E_DIN99(Lab_1, Lab_2[, textiles])

Return the difference \(\Delta E_{DIN99}\) between two given CIE L*a*b* colourspace arrays using DIN99 formula.

Standardized Residual Sum of Squares (STRESS) Index#

colour

index_stress(d_E, d_V[, method])

Compute the Kruskal's Standardized Residual Sum of Squares (:math:`STRESS`) index according to given method.

INDEX_STRESS_METHODS

Supported \(STRESS\) index computation methods.

colour.difference

index_stress_Garcia2007(d_E, d_V)

Compute the Kruskal's Standardized Residual Sum of Squares (:math:`STRESS`) index according to García, Huertas, Melgosa and Cui (2007) method.

Huang et al. (2015) Power-Functions#

colour.difference

power_function_Huang2015(d_E[, coefficients])

Improve the performance of the \(\Delta E\) value for given coefficients using Huang, Cui, Melgosa, Sanchez-Maranon, Li, Luo and Liu (2015) power-function: \(d_E^{\prime}=a*d_{E^b}\).

Geometry Computations#

Ellipse#

colour.geometry

ellipse_coefficients_general_form(coefficients)

Return the general form ellipse coefficients from given canonical form ellipse coefficients.

ellipse_coefficients_canonical_form(coefficients)

Return the canonical form ellipse coefficients from given general form ellipse coefficients.

point_at_angle_on_ellipse(phi, coefficients)

Return the coordinates of the point at angle \(\phi\) in degrees on the ellipse with given canonical form coefficients.

ELLIPSE_FITTING_METHODS

Supported ellipse fitting methods.

ellipse_fitting(a[, method])

Return the coefficients of the implicit second-order polynomial/quadratic curve that fits given point array \(a\) using given method.

Ancillary Objects

colour.geometry

ellipse_fitting_Halir1998(a)

Return the coefficients of the implicit second-order polynomial/quadratic curve that fits given point array \(a\) using Halir and Flusser (1998) method.

Intersection#

colour.geometry

extend_line_segment(a, b[, distance])

Extend the line segment defined by point arrays \(a\) and \(b\) by given distance and return the new end point.

intersect_line_segments(l_1, l_2)

Compute \(l_1\) line segments intersections with \(l_2\) line segments.

Ancillary Objects

colour.geometry

LineSegmentsIntersections_Specification(xy, ...)

Define the specification for intersection of line segments \(l_1\) and \(l_2\) returned by colour.algebra.intersect_line_segments() definition.

Primitives#

colour

PRIMITIVE_METHODS

Supported geometry primitive generation methods.

primitive([method])

Return a geometry primitive using given method.

Ancillary Objects

colour.geometry

MAPPING_PLANE_TO_AXIS

Plane to axis mapping.

primitive_grid([width, height, ...])

Generate vertices and indexes for a filled and outlined grid primitive.

primitive_cube([width, height, depth, ...])

Generate vertices and indexes for a filled and outlined cube primitive.

Primitive Vertices#

colour

PRIMITIVE_VERTICES_METHODS

Supported geometry primitive vertices generation methods.

primitive_vertices([method])

Return the vertices of a geometry primitive using given method.

colour.geometry

primitive_vertices_quad_mpl([width, height, ...])

Return the vertices of a quad primitive for use with Matplotlib mpl_toolkits.mplot3d.art3d.Poly3DCollection class.

primitive_vertices_grid_mpl([width, height, ...])

Return the vertices of a grid primitive made of quad primitives for use with Matplotlib mpl_toolkits.mplot3d.art3d.Poly3DCollection class.

primitive_vertices_cube_mpl([width, height, ...])

Return the vertices of a cube primitive made of grid primitives for use with Matplotlib mpl_toolkits.mplot3d.art3d.Poly3DCollection class.

primitive_vertices_sphere([radius, ...])

Return the vertices of a latitude-longitude sphere primitive.

Hull Section#

colour.geometry

hull_section(hull[, axis, origin, normalise])

Compute the hull section for given axis at given origin.

Automatic Colour Conversion Graph#

Conversion#

colour

convert(a, source, target, **kwargs)

Convert given object \(a\) from source colour representation to target colour representation using the automatic colour conversion graph.

describe_conversion_path(source, target[, ...])

Describe the conversion path from source colour representation to target colour representation using the automatic colour conversion graph.

Annotation Type Hints#

colour.hints

ArrayLike

alias of Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]

NDArray

ndarray(shape, dtype=float, buffer=None, offset=0,

ModuleType

alias of module

Any(*args, **kwargs)

Special type indicating an unconstrained type.

Callable

Deprecated alias to collections.abc.Callable.

ClassVar

Special type construct to mark class variables.

Dict

A generic version of dict.

Generator()

Iterable()

Iterator()

List

A generic version of list.

Literal

Special typing form to define literal types (a.k.a.

Mapping()

A Mapping is a generic container for associating key/value pairs.

NewType(name, tp)

NewType creates simple unique types with almost zero runtime overhead.

Optional

Optional[X] is equivalent to Union[X, None].

Protocol()

Base class for protocol classes.

Sequence()

All the operations on a read-only sequence.

SupportsIndex(*args, **kwargs)

An ABC with one abstract method __index__.

TYPE_CHECKING

bool(x) -> bool

TextIO()

Typed version of the return of open() in text mode.

Tuple

Deprecated alias to builtins.tuple.

Type

Deprecated alias to builtins.type.

TypeVar(name, *constraints[, bound, ...])

Type variable.

TypedDict(typename[, fields, total])

A simple typed namespace.

Union

Union type; Union[X, Y] means either X or Y.

cast(typ, val)

Cast a value to a type.

overload(func)

Decorator for overloaded functions/methods.

runtime_checkable(cls)

Mark a protocol class as a runtime protocol.

Self

Used to spell the type of "self" in classes.

RegexFlag

NewType creates simple unique types with almost zero runtime overhead.

DTypeInt

alias of Union[int8, int16, int32, int64, uint8, uint16, uint32, uint64]

DTypeFloat

alias of Union[float16, float32, float64]

DTypeReal

alias of Union[int8, int16, int32, int64, uint8, uint16, uint32, uint64, float16, float32, float64]

DTypeComplex

alias of Union[complex64, complex128]

DTypeBoolean

alias of bool_

DType

alias of Union[bool_, int8, int16, int32, int64, uint8, uint16, uint32, uint64, float16, float32, float64, complex64, complex128]

Real

alias of Union[int, float]

Dataclass

alias of Any

NDArrayInt

ndarray(shape, dtype=float, buffer=None, offset=0,

NDArrayFloat

ndarray(shape, dtype=float, buffer=None, offset=0,

NDArrayReal

ndarray(shape, dtype=float, buffer=None, offset=0,

NDArrayComplex

ndarray(shape, dtype=float, buffer=None, offset=0,

NDArrayBoolean

ndarray(shape, dtype=float, buffer=None, offset=0,

NDArrayStr

ndarray(shape, dtype=float, buffer=None, offset=0,

ProtocolInterpolator(*args, **kwargs)

ProtocolExtrapolator(*args, **kwargs)

ProtocolLUTSequenceItem(*args, **kwargs)

LiteralWarning

alias of Literal['default', 'error', 'ignore', 'always', 'module', 'once']

LiteralChromaticAdaptationTransform

alias of Literal['Bianco 2010', 'Bianco PC 2010', 'Bradford', 'CAT02', 'CAT02 Brill 2008', 'CAT16', 'CMCCAT2000', 'CMCCAT97', 'Fairchild', 'Sharp', 'Von Kries', 'XYZ Scaling']

LiteralColourspaceModel

alias of Literal['CAM02LCD', 'CAM02SCD', 'CAM02UCS', 'CAM16LCD', 'CAM16SCD', 'CAM16UCS', 'CIE Lab', 'CIE Luv', 'CIE UCS', 'CIE UVW', 'CIE XYZ', 'CIE xyY', 'DIN99', 'HCL', 'HSL', 'HSV', 'Hunter Lab', 'Hunter Rdab', 'ICaCb', 'ICtCp', 'IHLS', 'IPT', 'IPT Ragoo 2021', 'IgPgTg', 'Jzazbz', 'OSA UCS', 'Oklab', 'RGB', 'YCbCr', 'YCoCg', 'Yrg', 'hdr-CIELAB', 'hdr-IPT']

LiteralRGBColourspace

alias of Literal['ACES2065-1', 'ACEScc', 'ACEScct', 'ACEScg', 'ACESproxy', 'ALEXA Wide Gamut', 'ARRI Wide Gamut 3', 'ARRI Wide Gamut 4', 'Adobe RGB (1998)', 'Adobe Wide Gamut RGB', 'Apple RGB', 'Best RGB', 'Beta RGB', 'Blackmagic Wide Gamut', 'CIE RGB', 'Cinema Gamut', 'ColorMatch RGB', 'DCDM XYZ', 'DCI-P3', 'DCI-P3-P', 'DJI D-Gamut', 'DRAGONcolor', 'DRAGONcolor2', 'DaVinci Wide Gamut', 'Display P3', 'Don RGB 4', 'EBU Tech.

LiteralLogEncoding

alias of Literal['ACEScc', 'ACEScct', 'ACESproxy', 'ARRI LogC3', 'ARRI LogC4', 'Apple Log Profile', 'Canon Log', 'Canon Log 2', 'Canon Log 3', 'Cineon', 'D-Log', 'ERIMM RGB', 'F-Log', 'F-Log2', 'Filmic Pro 6', 'L-Log', 'Log2', 'Log3G10', 'Log3G12', 'N-Log', 'PLog', 'Panalog', 'Protune', 'REDLog', 'REDLogFilm', 'S-Log', 'S-Log2', 'S-Log3', 'T-Log', 'V-Log', 'ViperLog']

LiteralLogDecoding

alias of Literal['ACEScc', 'ACEScct', 'ACESproxy', 'ARRI LogC3', 'ARRI LogC4', 'Apple Log Profile', 'Canon Log', 'Canon Log 2', 'Canon Log 3', 'Cineon', 'D-Log', 'ERIMM RGB', 'F-Log', 'F-Log2', 'Filmic Pro 6', 'L-Log', 'Log2', 'Log3G10', 'Log3G12', 'N-Log', 'PLog', 'Panalog', 'Protune', 'REDLog', 'REDLogFilm', 'S-Log', 'S-Log2', 'S-Log3', 'T-Log', 'V-Log', 'ViperLog']

LiteralOETF

alias of Literal['ARIB STD-B67', 'Blackmagic Film Generation 5', 'DaVinci Intermediate', 'ITU-R BT.2020', 'ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ', 'ITU-R BT.601', 'ITU-R BT.709', 'ITU-T H.273 IEC 61966-2', 'ITU-T H.273 Log', 'ITU-T H.273 Log Sqrt', 'SMPTE 240M']

LiteralOETFInverse

alias of Literal['ARIB STD-B67', 'Blackmagic Film Generation 5', 'DaVinci Intermediate', 'ITU-R BT.2020', 'ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ', 'ITU-R BT.601', 'ITU-R BT.709', 'ITU-T H.273 IEC 61966-2', 'ITU-T H.273 Log', 'ITU-T H.273 Log Sqrt']

LiteralEOTF

alias of Literal['DCDM', 'DICOM GSDF', 'ITU-R BT.1886', 'ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ', 'ITU-T H.273 ST.428-1', 'SMPTE 240M', 'ST 2084', 'sRGB']

LiteralEOTFInverse

alias of Literal['DCDM', 'DICOM GSDF', 'ITU-R BT.1886', 'ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ', 'ITU-T H.273 ST.428-1', 'ST 2084', 'sRGB']

LiteralCCTFEncoding

alias of Literal['ACEScc', 'ACEScct', 'ACESproxy', 'ARIB STD-B67', 'ARRI LogC3', 'ARRI LogC4', 'Apple Log Profile', 'Blackmagic Film Generation 5', 'Canon Log', 'Canon Log 2', 'Canon Log 3', 'Cineon', 'D-Log', 'DCDM', 'DICOM GSDF', 'DaVinci Intermediate', 'ERIMM RGB', 'F-Log', 'F-Log2', 'Filmic Pro 6', 'Gamma 2.2', 'Gamma 2.4', 'Gamma 2.6', 'ITU-R BT.1886', 'ITU-R BT.2020', 'ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ', 'ITU-R BT.601', 'ITU-R BT.709', 'ITU-T H.273 IEC 61966-2', 'ITU-T H.273 Log', 'ITU-T H.273 Log Sqrt', 'ITU-T H.273 ST.428-1', 'L-Log', 'Log2', 'Log3G10', 'Log3G12', 'N-Log', 'PLog', 'Panalog', 'ProPhoto RGB', 'Protune', 'REDLog', 'REDLogFilm', 'RIMM RGB', 'ROMM RGB', 'S-Log', 'S-Log2', 'S-Log3', 'SMPTE 240M', 'ST 2084', 'T-Log', 'V-Log', 'ViperLog', 'sRGB']

LiteralCCTFDecoding

alias of Literal['ACEScc', 'ACEScct', 'ACESproxy', 'ARIB STD-B67', 'ARRI LogC3', 'ARRI LogC4', 'Apple Log Profile', 'Blackmagic Film Generation 5', 'Canon Log', 'Canon Log 2', 'Canon Log 3', 'Cineon', 'D-Log', 'DCDM', 'DICOM GSDF', 'DaVinci Intermediate', 'ERIMM RGB', 'F-Log', 'F-Log2', 'Filmic Pro 6', 'Gamma 2.2', 'Gamma 2.4', 'Gamma 2.6', 'ITU-R BT.1886', 'ITU-R BT.2020', 'ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ', 'ITU-R BT.601', 'ITU-R BT.709', 'ITU-T H.273 IEC 61966-2', 'ITU-T H.273 Log', 'ITU-T H.273 Log Sqrt', 'ITU-T H.273 ST.428-1', 'L-Log', 'Log2', 'Log3G10', 'Log3G12', 'N-Log', 'PLog', 'Panalog', 'ProPhoto RGB', 'Protune', 'REDLog', 'REDLogFilm', 'RIMM RGB', 'ROMM RGB', 'S-Log', 'S-Log2', 'S-Log3', 'SMPTE 240M', 'ST 2084', 'T-Log', 'V-Log', 'ViperLog', 'sRGB']

LiteralOOTF

alias of Literal['ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ']

LiteralOOTFInverse

alias of Literal['ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ']

LiteralLUTReadMethod

alias of Literal['Cinespace', 'Iridas Cube', 'Resolve Cube', 'Sony SPI1D', 'Sony SPI3D', 'Sony SPImtx']

LiteralLUTWriteMethod

alias of Literal['Cinespace', 'Iridas Cube', 'Resolve Cube', 'Sony SPI1D', 'Sony SPI3D', 'Sony SPImtx']

LiteralFontScaling

alias of Literal['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'larger', 'smaller', 'xx-small-colour-science', 'x-small-colour-science', 'small-colour-science', 'medium-colour-science', 'large-colour-science', 'x-large-colour-science', 'xx-large-colour-science']

Input and Output#

Image Data#

colour

READ_IMAGE_METHODS

Supported image read methods.

read_image(path[, bit_depth, method])

Read the image data at given path using given method.

WRITE_IMAGE_METHODS

Supported image write methods.

write_image(image, path[, bit_depth, method])

Write given image data at given path using given method.

Ancillary Objects

colour.io

ImageAttribute_Specification(name, value, type_)

Define an image specification attribute.

convert_bit_depth(a[, bit_depth])

Convert given array to given bit-depth, the current bit-depth of the array is used to determine the appropriate conversion path.

read_image_OpenImageIO(path[, bit_depth, ...])

Read the image data at given path using OpenImageIO.

write_image_OpenImageIO(image, path[, ...])

Write given image data at given path using OpenImageIO.

read_image_Imageio(path[, bit_depth])

Read the image data at given path using Imageio.

write_image_Imageio(image, path[, bit_depth])

Write given image data at given path using Imageio.

as_3_channels_image(a)

Convert given array \(a\) to a 3-channels image-like representation.

OpenColorIO Processing#

colour.io

process_image_OpenColorIO(a, *args, **kwargs)

Process given image data with OpenColorIO.

Look Up Table (LUT) Data#

colour

LUT1D([table, name, domain, size, comments])

Define the base class for a 1D LUT.

LUT3x1D([table, name, domain, size, comments])

Define the base class for a 3x1D LUT.

LUT3D([table, name, domain, size, comments])

Define the base class for a 3D LUT.

LUTOperatorMatrix([matrix, offset])

Define the LUT operator supporting a 3x3 or 4x4 matrix and an offset vector.

LUTSequence(*args)

Define the base class for a LUT sequence, i.e. a series of LUTs, LUT operators or objects implementing the colour.hints.ProtocolLUTSequenceItem protocol.

read_LUT(path[, method])

Read given LUT file using given method.

write_LUT(LUT, path[, decimals, method])

Write given LUT to given file using given method.

Ancillary Objects

colour.io

AbstractLUTSequenceOperator([name, comments])

Define the base class for LUT sequence operators.

LUT_to_LUT(LUT, cls[, force_conversion])

Convert given LUT to given cls class instance.

read_LUT_Cinespace(path)

Read given Cinespace .csp LUT file.

write_LUT_Cinespace(LUT, path[, decimals])

Write given LUT to given Cinespace .csp LUT file.

read_LUT_IridasCube(path)

Read given Iridas .cube LUT file.

write_LUT_IridasCube(LUT, path[, decimals])

Write given LUT to given Iridas .cube LUT file.

read_LUT_SonySPI1D(path)

Read given Sony .spi1d LUT file.

write_LUT_SonySPI1D(LUT, path[, decimals])

Write given LUT to given Sony .spi1d LUT file.

read_LUT_SonySPI3D(path)

Read given Sony .spi3d LUT file.

write_LUT_SonySPI3D(LUT, path[, decimals])

Write given LUT to given Sony .spi3d LUT file.

CSV Tabular Data#

colour

read_sds_from_csv_file(path, **kwargs)

Read the spectral data from given CSV file and returns its content as a dict of colour.SpectralDistribution class instances.

read_spectral_data_from_csv_file(path, **kwargs)

Read the spectral data from given CSV file in the following form.

write_sds_to_csv_file(sds, path)

Write the given spectral distributions to given CSV file.

IES TM-27-14 Data#

colour

SpectralDistribution_IESTM2714([path, ...])

Define a IES TM-27-14 spectral distribution.

UPRTek and Sekonic Spectral Data#

colour

SpectralDistribution_UPRTek(path, **kwargs)

Implement support to read and write IES TM-27-14 spectral data XML file from a UPRTek Pseudo-XLS file.

SpectralDistribution_Sekonic(path, **kwargs)

Implement support to read and write IES TM-27-14 spectral data XML file from a Sekonic CSV file.

X-Rite Data#

colour

read_sds_from_xrite_file(path)

Read the spectral data from given X-Rite file and returns it as a dict of colour.SpectralDistribution class instances.

Colour Models#

Tristimulus Values, CIE xyY Colourspace and Chromaticity Coordinates#

colour

XYZ_to_xyY(XYZ)

Convert from CIE XYZ tristimulus values to CIE xyY colourspace.

xyY_to_XYZ(xyY)

Convert from CIE xyY colourspace to CIE XYZ tristimulus values.

XYZ_to_xy(XYZ)

Return the CIE xy chromaticity coordinates from given CIE XYZ tristimulus values.

xy_to_XYZ(xy)

Return the CIE XYZ tristimulus values from given CIE xy chromaticity coordinates.

xyY_to_xy(xyY)

Convert from CIE xyY colourspace to CIE xy chromaticity coordinates.

xy_to_xyY(xy[, Y])

Convert from CIE xy chromaticity coordinates to CIE xyY colourspace by extending the array last dimension with given \(Y\) luminance.

Common Models#

colour

COLOURSPACE_MODELS

Colourspace models supporting a direct conversion to CIE XYZ tristimulus values.

colour.models

Jab_to_JCh(Jab)

Convert from Jab colour representation to JCh colour representation.

JCh_to_Jab(JCh)

Convert from JCh colour representation to Jab colour representation.

XYZ_to_Iab(XYZ, LMS_to_LMS_p_callable, ...)

Convert from CIE XYZ tristimulus values to IPT-like \(Iab\) colour representation.

Iab_to_XYZ(Iab, LMS_p_to_LMS_callable, ...)

Convert from IPT-like \(Iab\) colour representation to CIE XYZ tristimulus values.

CIE L*a*b* Colourspace#

colour

XYZ_to_Lab(XYZ[, illuminant])

Convert from CIE XYZ tristimulus values to CIE L*a*b* colourspace.

Lab_to_XYZ(Lab[, illuminant])

Convert from CIE L*a*b* colourspace to CIE XYZ tristimulus values.

Lab_to_LCHab(Lab)

Convert from CIE L*a*b* colourspace to CIE L*C*Hab colourspace.

LCHab_to_Lab(LCHab)

Convert from CIE L*C*Hab colourspace to CIE L*a*b* colourspace.

CIE L*u*v* Colourspace#

colour

XYZ_to_Luv(XYZ[, illuminant])

Convert from CIE XYZ tristimulus values to CIE L*u*v* colourspace.

Luv_to_XYZ(Luv[, illuminant])

Convert from CIE L*u*v* colourspace to CIE XYZ tristimulus values.

Luv_to_LCHuv(Luv)

Convert from CIE L*u*v* colourspace to CIE L*C*Huv colourspace.

LCHuv_to_Luv(LCHuv)

Convert from CIE L*C*Huv colourspace to CIE L*u*v* colourspace.

Luv_to_uv(Luv[, illuminant])

Return the \(uv^p\) chromaticity coordinates from given CIE L*u*v* colourspace array.

uv_to_Luv(uv[, illuminant, Y])

Return the CIE L*u*v* colourspace array from given \(uv^p\) chromaticity coordinates by extending the array last dimension with given \(L\) Lightness.

Luv_uv_to_xy(uv)

Return the CIE xy chromaticity coordinates from given CIE L*u*v* colourspace \(uv^p\) chromaticity coordinates.

xy_to_Luv_uv(xy)

Return the CIE L*u*v* colourspace \(uv^p\) chromaticity coordinates from given CIE xy chromaticity coordinates.

CIE 1960 UCS Colourspace#

colour

XYZ_to_UCS(XYZ)

Convert from CIE XYZ tristimulus values to CIE 1960 UCS colourspace.

UCS_to_XYZ(UVW)

Convert from CIE 1960 UCS colourspace to CIE XYZ tristimulus values.

UCS_to_uv(UVW)

Return the uv chromaticity coordinates from given CIE 1960 UCS colourspace array.

uv_to_UCS(uv[, V])

Return the CIE 1960 UCS colourspace array from given uv chromaticity coordinates.

UCS_uv_to_xy(uv)

Return the CIE xy chromaticity coordinates from given CIE 1960 UCS colourspace uv chromaticity coordinates.

xy_to_UCS_uv(xy)

Return the CIE 1960 UCS colourspace uv chromaticity coordinates from given CIE xy chromaticity coordinates.

CIE 1964 U*V*W* Colourspace#

colour

XYZ_to_UVW(XYZ[, illuminant])

Convert from CIE XYZ tristimulus values to CIE 1964 U*V*W* colourspace.

UVW_to_XYZ(UVW[, illuminant])

Convert CIE 1964 U*V*W* colourspace to CIE XYZ tristimulus values.

Hunter L,a,b Colour Scale#

colour

XYZ_to_Hunter_Lab(XYZ[, XYZ_n, K_ab])

Convert from CIE XYZ tristimulus values to Hunter L,a,b colour scale.

Hunter_Lab_to_XYZ(Lab[, XYZ_n, K_ab])

Convert from Hunter L,a,b colour scale to CIE XYZ tristimulus values.

XYZ_to_K_ab_HunterLab1966(XYZ)

Convert from whitepoint CIE XYZ tristimulus values to Hunter L,a,b \(K_{a}\) and \(K_{b}\) chromaticity coefficients.

Hunter Rd,a,b Colour Scale#

colour

XYZ_to_Hunter_Rdab(XYZ[, XYZ_n, K_ab])

Convert from CIE XYZ tristimulus values to Hunter Rd,a,b colour scale.

Hunter_Rdab_to_XYZ(R_d_ab[, XYZ_n, K_ab])

Convert from Hunter Rd,a,b colour scale to CIE XYZ tristimulus values.

DIN99 Colourspace and DIN99b, DIN99c, DIN99d Refined Formulas#

colour

Lab_to_DIN99(Lab[, k_E, k_CH, method])

Convert from CIE L*a*b* colourspace to DIN99 colourspace or one of the DIN99b, DIN99c, DIN99d refined formulas according to Cui et al. (2002).

DIN99_to_Lab(Lab_99[, k_E, k_CH, method])

Convert from DIN99 colourspace or one of the DIN99b, DIN99c, DIN99d refined formulas according to Cui et al. (2002) to CIE L*a*b* colourspace.

XYZ_to_DIN99(XYZ[, illuminant, k_E, k_CH, ...])

Convert from CIE XYZ tristimulus values to DIN99 colourspace or one of the DIN99b, DIN99c, DIN99d refined formulas according to Cui et al. (2002).

DIN99_to_XYZ(Lab_99[, illuminant, k_E, ...])

Convert from DIN99 colourspace or one of the DIN99b, DIN99c, DIN99d refined formulas according to Cui et al. (2002) to CIE XYZ tristimulus values.

CAM02-LCD, CAM02-SCD, and CAM02-UCS Colourspaces - Luo, Cui and Li (2006)#

colour

JMh_CIECAM02_to_CAM02LCD(JMh)

Convert from CIECAM02 \(JMh\) correlates array to Luo et al. (2006) CAM02-LCD colourspace \(J'a'b'\) array.

CAM02LCD_to_JMh_CIECAM02(Jpapbp)

Convert from Luo et al. (2006) CAM02-LCD colourspace \(J'a'b'\) array to CIECAM02 \(JMh\) correlates array.

JMh_CIECAM02_to_CAM02SCD(JMh)

Convert from CIECAM02 \(JMh\) correlates array to Luo et al. (2006) CAM02-SCD colourspace \(J'a'b'\) array.

CAM02SCD_to_JMh_CIECAM02(Jpapbp)

Convert from Luo et al. (2006) CAM02-SCD colourspace \(J'a'b'\) array to CIECAM02 \(JMh\) correlates array.

JMh_CIECAM02_to_CAM02UCS(JMh)

Convert from CIECAM02 \(JMh\) correlates array to Luo et al. (2006) CAM02-UCS colourspace \(J'a'b'\) array.

CAM02UCS_to_JMh_CIECAM02(Jpapbp)

Convert from Luo et al. (2006) CAM02-UCS colourspace \(J'a'b'\) array to CIECAM02 \(JMh\) correlates array.

XYZ_to_CAM02LCD(XYZ, **kwargs)

Convert from CIE XYZ tristimulus values to Luo et al. (2006) CAM02-LCD colourspace \(J'a'b'\) array.

CAM02LCD_to_XYZ(Jpapbp, **kwargs)

Convert from Luo et al. (2006) CAM02-LCD colourspace \(J'a'b'\) array to CIE XYZ tristimulus values.

XYZ_to_CAM02SCD(XYZ, **kwargs)

Convert from CIE XYZ tristimulus values to Luo et al. (2006) CAM02-SCD colourspace \(J'a'b'\) array.

CAM02SCD_to_XYZ(Jpapbp, **kwargs)

Convert from Luo et al. (2006) CAM02-SCD colourspace \(J'a'b'\) array to CIE XYZ tristimulus values.

XYZ_to_CAM02UCS(XYZ, **kwargs)

Convert from CIE XYZ tristimulus values to Luo et al. (2006) CAM02-UCS colourspace \(J'a'b'\) array.

CAM02UCS_to_XYZ(Jpapbp, **kwargs)

Convert from Luo et al. (2006) CAM02-UCS colourspace \(J'a'b'\) array to CIE XYZ tristimulus values.

CAM16-LCD, CAM16-SCD, and CAM16-UCS Colourspaces - Li et al. (2017)#

colour

JMh_CAM16_to_CAM16LCD(JMh, *[, coefficients])

Convert from CAM16 \(JMh\) correlates array to Li et al. (2017) CAM16-LCD colourspace \(J'a'b'\) array.

CAM16LCD_to_JMh_CAM16(Jpapbp, *[, coefficients])

Convert from Li et al. (2017) CAM16-LCD colourspace \(J'a'b'\) array to CAM16 \(JMh\) correlates array.

JMh_CAM16_to_CAM16SCD(JMh, *[, coefficients])

Convert from CAM16 \(JMh\) correlates array to Li et al. (2017) CAM16-SCD colourspace \(J'a'b'\) array.

CAM16SCD_to_JMh_CAM16(Jpapbp, *[, coefficients])

Convert from Li et al. (2017) CAM16-SCD colourspace \(J'a'b'\) array to CAM16 \(JMh\) correlates array.

JMh_CAM16_to_CAM16UCS(JMh, *[, coefficients])

Convert from CAM16 \(JMh\) correlates array to Li et al. (2017) CAM16-UCS colourspace \(J'a'b'\) array.

CAM16UCS_to_JMh_CAM16(Jpapbp, *[, coefficients])

Convert from Li et al. (2017) CAM16-UCS colourspace \(J'a'b'\) array to CAM16 \(JMh\) correlates array.

XYZ_to_CAM16LCD(XYZ, *[, coefficients])

Convert from CIE XYZ tristimulus values to Li et al. (2017) CAM16-LCD colourspace \(J'a'b'\) array.

CAM16LCD_to_XYZ(Jpapbp, *[, coefficients])

Convert from Li et al. (2017) CAM16-LCD colourspace \(J'a'b'\) array to CIE XYZ tristimulus values.

XYZ_to_CAM16SCD(XYZ, *[, coefficients])

Convert from CIE XYZ tristimulus values to Li et al. (2017) CAM16-SCD colourspace \(J'a'b'\) array.

CAM16SCD_to_XYZ(Jpapbp, *[, coefficients])

Convert from Li et al. (2017) CAM16-SCD colourspace \(J'a'b'\) array to CIE XYZ tristimulus values.

XYZ_to_CAM16UCS(XYZ, *[, coefficients])

Convert from CIE XYZ tristimulus values to Li et al. (2017) CAM16-UCS colourspace \(J'a'b'\) array.

CAM16UCS_to_XYZ(Jpapbp, *[, coefficients])

Convert from Li et al. (2017) CAM16-UCS colourspace \(J'a'b'\) array to CIE XYZ tristimulus values.

\(IC_AC_B\) Colourspace#

colour

XYZ_to_ICaCb(XYZ)

Convert from CIE XYZ tristimulus values to \(IC_AC_B\) colourspace.

ICaCb_to_XYZ(ICaCb)

Convert from \(IC_AC_B\) tristimulus values to CIE XYZ colourspace.

\(I_GP_GT_G\) Colourspace#

colour

XYZ_to_IgPgTg(XYZ)

Convert from CIE XYZ tristimulus values to \(I_GP_GT_G\) colourspace.

IgPgTg_to_XYZ(IgPgTg)

Convert from \(I_GP_GT_G\) colourspace to CIE XYZ tristimulus values.

IPT Colourspace#

colour

XYZ_to_IPT(XYZ)

Convert from CIE XYZ tristimulus values to IPT colourspace.

IPT_to_XYZ(IPT)

Convert from IPT colourspace to CIE XYZ tristimulus values.

IPT_hue_angle(IPT)

Compute the hue angle in degrees from IPT colourspace.

Ragoo and Farup (2021) Optimised IPT Colourspace#

colour

XYZ_to_IPT_Ragoo2021(XYZ)

Convert from CIE XYZ tristimulus values to Ragoo and Farup (2021) Optimised IPT colourspace.

IPT_Ragoo2021_to_XYZ(IPT)

Convert from Ragoo and Farup (2021) Optimised IPT colourspace to CIE XYZ tristimulus values.

hdr-CIELAB Colourspace#

colour

XYZ_to_hdr_CIELab(XYZ[, illuminant, Y_s, ...])

Convert from CIE XYZ tristimulus values to hdr-CIELAB colourspace.

hdr_CIELab_to_XYZ(Lab_hdr[, illuminant, ...])

Convert from hdr-CIELAB colourspace to CIE XYZ tristimulus values.

HDR_CIELAB_METHODS

Supported hdr-CIELAB colourspace computation methods.

hdr-IPT Colourspace#

colour

XYZ_to_hdr_IPT(XYZ[, Y_s, Y_abs, method])

Convert from CIE XYZ tristimulus values to hdr-IPT colourspace.

hdr_IPT_to_XYZ(IPT_hdr[, Y_s, Y_abs, method])

Convert from hdr-IPT colourspace to CIE XYZ tristimulus values.

HDR_IPT_METHODS

Supported hdr-IPT colourspace computation methods.

Oklab Colourspace#

colour

XYZ_to_Oklab(XYZ)

Convert from CIE XYZ tristimulus values to Oklab colourspace.

Oklab_to_XYZ(Lab)

Convert from Oklab colourspace to CIE XYZ tristimulus values.

OSA UCS Colourspace#

colour

XYZ_to_OSA_UCS(XYZ)

Convert from CIE XYZ tristimulus values under the CIE 1964 10 Degree Standard Observer to OSA UCS colourspace.

OSA_UCS_to_XYZ(Ljg[, optimisation_kwargs])

Convert from OSA UCS colourspace to CIE XYZ tristimulus values under the CIE 1964 10 Degree Standard Observer.

ProLab Colourspace#

colour

XYZ_to_ProLab(XYZ[, illuminant])

Convert from CIE XYZ tristimulus values to ProLab colourspace.

ProLab_to_XYZ(ProLab[, illuminant])

Convert from ProLab colourspace to CIE XYZ tristimulus values.

Yrg Colourspace - Kirk (2019)#

colour

XYZ_to_Yrg(XYZ)

Convert from CIE XYZ tristimulus values to Kirk (2019) Yrg colourspace.

Yrg_to_XYZ(Yrg)

Convert from Kirk (2019) Yrg colourspace to CIE XYZ tristimulus values.

colour.models

LMS_to_Yrg(LMS)

Convert from LMS colourspace to Kirk (2019) Yrg colourspace.

Yrg_to_LMS(Yrg)

Convert from Kirk (2019) Yrg colourspace to LMS colourspace.

\(Jzazbz\) Colourspace#

colour

XYZ_to_Jzazbz(XYZ_D65[, constants])

Convert from CIE XYZ tristimulus values to \(J_za_zb_z\) colourspace.

Jzazbz_to_XYZ(Jzazbz[, constants])

Convert from \(J_za_zb_z\) colourspace to CIE XYZ tristimulus values.

Ancillary Objects

colour.models

IZAZBZ_METHODS

Supported \(I_za_zb_z\) computation methods.

XYZ_to_Izazbz(XYZ_D65[, constants, method])

Convert from CIE XYZ tristimulus values to \(I_za_zb_z\) colourspace.

Izazbz_to_XYZ(Izazbz[, constants, method])

Convert from \(I_za_zb_z\) colourspace to CIE XYZ tristimulus values.

RGB Colourspace and Transformations#

colour

XYZ_to_RGB(XYZ, colourspace[, illuminant, ...])

Convert from CIE XYZ tristimulus values to RGB colourspace array.

RGB_to_XYZ(RGB, colourspace[, illuminant, ...])

Convert given RGB colourspace array to CIE XYZ tristimulus values.

RGB_to_RGB(RGB, input_colourspace, ...[, ...])

Convert given RGB colourspace array from given input RGB colourspace to output RGB colourspace using given chromatic adaptation method.

matrix_RGB_to_RGB(input_colourspace, ...[, ...])

Compute the matrix \(M\) converting from given input RGB colourspace to output RGB colourspace using given chromatic adaptation method.

Ancillary Objects

colour

XYZ_to_sRGB(XYZ[, illuminant, ...])

Convert from CIE XYZ tristimulus values to sRGB colourspace.

sRGB_to_XYZ(RGB[, illuminant, ...])

Convert from sRGB colourspace to CIE XYZ tristimulus values.

RGB Colourspace Derivation#

colour

normalised_primary_matrix(primaries, whitepoint)

Compute the Normalised Primary Matrix (NPM) converting a RGB colourspace array to CIE XYZ tristimulus values using given primaries and whitepoint \(xy\) chromaticity coordinates.

chromatically_adapted_primaries(primaries, ...)

Chromatically adapt given primaries \(xy\) chromaticity coordinates from test whitepoint_t to reference whitepoint_r.

primaries_whitepoint(npm)

Compute the primaries and whitepoint \(xy\) chromaticity coordinates using given Normalised Primary Matrix (NPM).

RGB_luminance(RGB, primaries, whitepoint)

Return the luminance \(Y\) of given RGB components from given primaries and whitepoint.

RGB_luminance_equation(primaries, whitepoint)

Return the luminance equation from given primaries and whitepoint.

RGB Colourspaces#

colour

RGB_Colourspace(name, primaries, whitepoint)

Implement support for the RGB colourspaces datasets from colour.models.datasets.aces_rgb, etc....

RGB_COLOURSPACES

Aggregated RGB colourspaces.

colour.models

RGB_COLOURSPACE_ACES2065_1

ACES2065-1 colourspace, base encoding, used for exchange of full fidelity images and archiving.

RGB_COLOURSPACE_ACESCC

ACEScc colourspace, a working space for color correctors, target for ASC-CDL values created on-set.

RGB_COLOURSPACE_ACESCCT

ACEScct colourspace, an alternative working space for colour correctors, intended to be transient and internal to software or hardware systems, and is specifically not intended for interchange or archiving.

RGB_COLOURSPACE_ACESPROXY

ACESproxy colourspace, a lightweight encoding for transmission over HD-SDI (or other production transmission schemes), onset look management.

RGB_COLOURSPACE_ACESCG

ACEScg colourspace, a working space for paint/compositor applications that don't support ACES2065-1 or ACEScc.

RGB_COLOURSPACE_ADOBE_RGB1998

Adobe RGB (1998) colourspace.

RGB_COLOURSPACE_ADOBE_WIDE_GAMUT_RGB

Adobe Wide Gamut RGB colourspace.

RGB_COLOURSPACE_ARRI_WIDE_GAMUT_3

ARRI Wide Gamut 3 colourspace.

RGB_COLOURSPACE_ARRI_WIDE_GAMUT_4

ARRI Wide Gamut 4 colourspace.

RGB_COLOURSPACE_APPLE_RGB

Apple RGB colourspace.

RGB_COLOURSPACE_BEST_RGB

Best RGB colourspace.

RGB_COLOURSPACE_BETA_RGB

Beta RGB colourspace.

RGB_COLOURSPACE_BLACKMAGIC_WIDE_GAMUT

Blackmagic Wide Gamut colourspace.

RGB_COLOURSPACE_BT470_525

Recommendation ITU-R BT.470 - 525 colourspace.

RGB_COLOURSPACE_BT470_625

Recommendation ITU-R BT.470 - 625 colourspace.

RGB_COLOURSPACE_BT709

Recommendation ITU-R BT.709 colourspace.

RGB_COLOURSPACE_BT2020

RecommendationITU-R BT.2020 colourspace.

RGB_COLOURSPACE_CIE_RGB

CIE RGB colourspace.

RGB_COLOURSPACE_CINEMA_GAMUT

Canon Cinema Gamut colourspace.

RGB_COLOURSPACE_COLOR_MATCH_RGB

ColorMatch RGB colourspace.

RGB_COLOURSPACE_DAVINCI_WIDE_GAMUT

DaVinci Wide Gamut colourspace.

RGB_COLOURSPACE_DCDM_XYZ

DCDM XYZ colourspace.

RGB_COLOURSPACE_DCI_P3

DCI-P3 colourspace.

RGB_COLOURSPACE_DCI_P3_P

DCI-P3+ colourspace.

RGB_COLOURSPACE_DISPLAY_P3

Display P3 colourspace.

RGB_COLOURSPACE_DJI_D_GAMUT

DJI_D-Gamut colourspace.

RGB_COLOURSPACE_DON_RGB_4

Don RGB 4 colourspace.

RGB_COLOURSPACE_EBU_3213_E

*EBU Tech.

RGB_COLOURSPACE_ECI_RGB_V2

ECI RGB v2 colourspace.

RGB_COLOURSPACE_EKTA_SPACE_PS_5

Ekta Space PS 5 colourspace.

RGB_COLOURSPACE_F_GAMUT

Fujifilm F-Gamut colourspace.

RGB_COLOURSPACE_FILMLIGHT_E_GAMUT

FilmLight E-Gamut colourspace.

RGB_COLOURSPACE_H273_GENERIC_FILM

Recommendation ITU-T H.273 Generic Film (colour filters using Illuminant C) colourspace.

RGB_COLOURSPACE_H273_22_UNSPECIFIED

Recommendation ITU-T H.273 row 22 colourspace as given in Table 2 - Interpretation of colour primaries (ColourPrimaries) value.

RGB_COLOURSPACE_PROTUNE_NATIVE

Protune Native colourspace.

RGB_COLOURSPACE_MAX_RGB

Max RGB colourspace.

RGB_COLOURSPACE_N_GAMUT

Nikon N-Gamut colourspace.

RGB_COLOURSPACE_NTSC1953

NTSC (1953) colourspace.

RGB_COLOURSPACE_NTSC1987

NTSC (1987) colourspace.

RGB_COLOURSPACE_P3_D65

P3-D65 colourspace.

RGB_COLOURSPACE_PAL_SECAM

Pal/Secam colourspace.

RGB_COLOURSPACE_RED_COLOR

REDcolor colourspace.

RGB_COLOURSPACE_RED_COLOR_2

REDcolor2 colourspace.

RGB_COLOURSPACE_RED_COLOR_3

REDcolor3 colourspace.

RGB_COLOURSPACE_RED_COLOR_4

REDcolor4 colourspace.

RGB_COLOURSPACE_RED_WIDE_GAMUT_RGB

REDWideGamutRGB colourspace.

RGB_COLOURSPACE_DRAGON_COLOR

DRAGONcolor colourspace.

RGB_COLOURSPACE_DRAGON_COLOR_2

DRAGONcolor2 colourspace.

RGB_COLOURSPACE_ROMM_RGB

ROMM RGB colourspace.

RGB_COLOURSPACE_RIMM_RGB

RIMM RGB colourspace.

RGB_COLOURSPACE_ERIMM_RGB

ERIMM RGB colourspace.

RGB_COLOURSPACE_PROPHOTO_RGB

ProPhoto RGB colourspace, an alias colourspace for ROMM RGB.

RGB_COLOURSPACE_PLASA_ANSI_E154

PLASA ANSI E1.54 colourspace.

RGB_COLOURSPACE_RUSSELL_RGB

Russell RGB colourspace.

RGB_COLOURSPACE_SHARP_RGB

Sharp RGB colourspace.

RGB_COLOURSPACE_SMPTE_240M

SMPTE 240M colourspace.

RGB_COLOURSPACE_SMPTE_C

SMPTE C colourspace.

RGB_COLOURSPACE_S_GAMUT

S-Gamut colourspace.

RGB_COLOURSPACE_S_GAMUT3

S-Gamut3 colourspace.

RGB_COLOURSPACE_S_GAMUT3_CINE

S-Gamut3.Cine colourspace.

RGB_COLOURSPACE_VENICE_S_GAMUT3

Venice S-Gamut3 colourspace.

RGB_COLOURSPACE_VENICE_S_GAMUT3_CINE

Venice S-Gamut3.Cine colourspace.

RGB_COLOURSPACE_sRGB

Smits (1999) colourspace.

RGB_COLOURSPACE_V_GAMUT

Panasonic V-Gamut colourspace.

RGB_COLOURSPACE_XTREME_RGB

Xtreme RGB colourspace.

Colour Component Transfer Functions#

colour

cctf_encoding(value[, function])

Encode linear \(RGB\) values to non-linear \(R'G'B'\) values using given encoding colour component transfer function (Encoding CCTF).

CCTF_ENCODINGS

Supported encoding colour component transfer functions (Encoding CCTFs), a collection of the functions defined by colour.LOG_ENCODINGS, colour.OETFS, colour.EOTF_INVERSES attributes, the colour.models.cctf_encoding_ProPhotoRGB(), colour.models.cctf_encoding_RIMMRGB(), colour.models.cctf_encoding_ROMMRGB() definitions and 3 gamma encoding functions (1 / 2.2, 1 / 2.4, 1 / 2.6).

cctf_decoding(value[, function])

Decode non-linear \(R'G'B'\) values to linear \(RGB\) values using given decoding colour component transfer function (Decoding CCTF).

CCTF_DECODINGS

Supported decoding colour component transfer functions (Decoding CCTFs), a collection of the functions defined by colour.LOG_DECODINGS, colour.EOTFS, colour.OETF_INVERSES attributes, the colour.models.cctf_decoding_ProPhotoRGB(), colour.models.cctf_decoding_RIMMRGB(), colour.models.cctf_decoding_ROMMRGB() definitions and 3 gamma decoding functions (2.2, 2.4, 2.6).

gamma_function(a[, exponent, ...])

Define a typical gamma encoding / decoding function.

linear_function(a)

Define a typical linear encoding / decoding function, essentially a pass-through function.

colour.models

cctf_encoding_ROMMRGB(X[, bit_depth, out_int])

Define the ROMM RGB encoding colour component transfer function (Encoding CCTF).

cctf_decoding_ROMMRGB(X_p[, bit_depth, in_int])

Define the ROMM RGB decoding colour component transfer function (Encoding CCTF).

cctf_encoding_RIMMRGB(X[, bit_depth, ...])

Define the RIMM RGB encoding colour component transfer function (Encoding CCTF).

cctf_decoding_RIMMRGB(X_p[, bit_depth, ...])

Define the RIMM RGB decoding colour component transfer function (Encoding CCTF).

Aliases

colour.models

cctf_encoding_ProPhotoRGB(X[, bit_depth, ...])

Define the ProPhoto RGB encoding colour component transfer function (Encoding CCTF).

cctf_decoding_ProPhotoRGB(X_p[, bit_depth, ...])

Define the ProPhoto RGB decoding colour component transfer function (Encoding CCTF).

Ancillary Objects

colour.models

exponent_function_basic(x[, exponent, style])

Define the basic exponent transfer function.

exponent_function_monitor_curve(x[, ...])

Define the Monitor Curve exponent transfer function.

logarithmic_function_basic(x[, style, base])

Define the basic logarithmic function.

logarithmic_function_quasilog(x[, style, ...])

Define the quasilog logarithmic function.

logarithmic_function_camera(x[, style, ...])

Define the camera logarithmic function.

Opto-Electronic Transfer Functions#

colour

oetf(value[, function])

Encode estimated tristimulus values in a scene to \(R'G'B'\) video component signal value using given opto-electronic transfer function (OETF).

OETFS

Supported opto-electrical transfer functions (OETFs / OECFs).

oetf_inverse(value[, function])

Decode \(R'G'B'\) video component signal value to tristimulus values at the display using given inverse opto-electronic transfer function (OETF).

OETF_INVERSES

Supported inverse opto-electrical transfer functions (OETFs / OECFs).

colour.models

oetf_ARIBSTDB67(E[, r, constants])

Define ARIB STD-B67 (Hybrid Log-Gamma) opto-electrical transfer function (OETF).

oetf_inverse_ARIBSTDB67(E_p[, r, constants])

Define ARIB STD-B67 (Hybrid Log-Gamma) inverse opto-electrical transfer function (OETF).

oetf_BlackmagicFilmGeneration5(x[, constants])

Define the Blackmagic Film Generation 5 opto-electronic transfer function (OETF).

oetf_inverse_BlackmagicFilmGeneration5(y[, ...])

Define the Blackmagic Film Generation 5 inverse opto-electronic transfer function (OETF).

oetf_DaVinciIntermediate(L[, constants])

Define the DaVinci Intermediate opto-electronic transfer function.

oetf_inverse_DaVinciIntermediate(V[, constants])

Define the DaVinci Intermediate inverse opto-electronic transfer function (OETF).

oetf_BT2020(E[, is_12_bits_system, constants])

Define Recommendation ITU-R BT.2020 opto-electronic transfer function (OETF).

oetf_inverse_BT2020(E_p[, ...])

Define Recommendation ITU-R BT.2020 inverse opto-electronic transfer function (OETF).

oetf_BT2100_HLG(E[, constants])

Define Recommendation ITU-R BT.2100 Reference HLG opto-electrical transfer function (OETF).

oetf_inverse_BT2100_HLG(E_p[, constants])

Define Recommendation ITU-R BT.2100 Reference HLG inverse opto-electrical transfer function (OETF).

oetf_BT2100_PQ(E)

Define Recommendation ITU-R BT.2100 Reference PQ opto-electrical transfer function (OETF).

oetf_inverse_BT2100_PQ(E_p)

Define Recommendation ITU-R BT.2100 Reference PQ inverse opto-electrical transfer function (OETF).

oetf_BT601(L)

Define Recommendation ITU-R BT.601-7 opto-electronic transfer function (OETF).

oetf_inverse_BT601(E)

Define Recommendation ITU-R BT.601-7 inverse opto-electronic transfer function (OETF).

oetf_BT709(L)

Define Recommendation ITU-R BT.709-6 opto-electronic transfer function (OETF).

oetf_inverse_BT709(V)

Define Recommendation ITU-R BT.709-6 inverse opto-electronic transfer function (OETF).

oetf_H273_Log(L_c)

Define Recommendation ITU-T H.273 opto-electronic transfer function (OETF) for logarithmic encoding (100:1 range).

oetf_inverse_H273_Log(V)

Define Recommendation ITU-T H.273 inverse-opto-electronic transfer function (OETF) for logarithmic encoding (100:1 range).

oetf_H273_LogSqrt(L_c)

Define Recommendation ITU-T H.273 opto-electronic transfer function (OETF) for logarithmic encoding (100*Sqrt(10):1 range).

oetf_inverse_H273_LogSqrt(V)

Define Recommendation ITU-T H.273 inverse-opto-electronic transfer function (OETF) for logarithmic encoding (100*Sqrt(10):1 range).

oetf_H273_IEC61966_2(L_c)

Define Recommendation ITU-T H.273 opto-electronic transfer function (OETF) for IEC 61966-2 family of transfer functions (2-1 sRGB, 2-1 sYCC, 2-4 xvYCC).

oetf_inverse_H273_IEC61966_2(V)

Define Recommendation ITU-T H.273 inverse opto-electronic transfer function (OETF) for IEC 61966-2 family of transfer functions (2-1 sRGB, 2-1 sYCC, 2-4 xvYCC).

oetf_SMPTE240M(L_c)

Define SMPTE 240M opto-electrical transfer function (OETF).

Electro-Optical Transfer Functions#

colour

eotf(value[, function])

Decode \(R'G'B'\) video component signal value to tristimulus values at the display using given electro-optical transfer function (EOTF).

EOTFS

Supported electro-optical transfer functions (EOTFs / EOCFs).

eotf_inverse(value[, function])

Encode estimated tristimulus values in a scene to \(R'G'B'\) video component signal value using given inverse electro-optical transfer function (EOTF).

EOTF_INVERSES

Supported inverse electro-optical transfer functions (EOTFs / EOCFs).

colour.models

eotf_DCDM(XYZ_p[, in_int])

Define the DCDM electro-optical transfer function (EOTF).

eotf_inverse_DCDM(XYZ[, out_int])

Define the DCDM inverse electro-optical transfer function (EOTF).

eotf_DICOMGSDF(J[, in_int, constants])

Define the DICOM - Grayscale Standard Display Function electro-optical transfer function (EOTF).

eotf_inverse_DICOMGSDF(L[, out_int, constants])

Define the DICOM - Grayscale Standard Display Function inverse electro-optical transfer function (EOTF).

eotf_BT1886(V[, L_B, L_W])

Define Recommendation ITU-R BT.1886 electro-optical transfer function (EOTF).

eotf_inverse_BT1886(L[, L_B, L_W])

Define Recommendation ITU-R BT.1886 inverse electro-optical transfer function (EOTF).

BT2100_HLG_EOTF_METHODS

Supported Recommendation ITU-R BT.2100 Reference HLG electro-optical transfer function (EOTF).

eotf_BT2100_HLG(E_p[, L_B, L_W, gamma, ...])

Define Recommendation ITU-R BT.2100 Reference HLG electro-optical transfer function (EOTF).

BT2100_HLG_EOTF_INVERSE_METHODS

Supported Recommendation ITU-R BT.2100 Reference HLG inverse electro-optical transfer function (EOTF).

eotf_inverse_BT2100_HLG(F_D[, L_B, L_W, ...])

Define Recommendation ITU-R BT.2100 Reference HLG inverse electro-optical transfer function (EOTF).

eotf_BT2100_PQ(E_p)

Define Recommendation ITU-R BT.2100 Reference PQ electro-optical transfer function (EOTF).

eotf_inverse_BT2100_PQ(F_D)

Define Recommendation ITU-R BT.2100 Reference PQ inverse electro-optical transfer function (EOTF).

eotf_H273_ST428_1(V)

Define the SMPTE ST 428-1 (2019) electro-optical transfer function (EOTF).

eotf_inverse_H273_ST428_1(L_o)

Define Recommendation ITU-T H.273 inverse electro-optical transfer function (EOTF) for SMPTE ST 428-1 (2019).

eotf_SMPTE240M(V_r)

Define SMPTE 240M electro-optical transfer function (EOTF).

eotf_ST2084(N[, L_p, constants])

Define SMPTE ST 2084:2014 optimised perceptual electro-optical transfer function (EOTF).

eotf_inverse_ST2084(C[, L_p, constants])

Define SMPTE ST 2084:2014 optimised perceptual inverse electro-optical transfer function (EOTF).

eotf_sRGB(V)

Define the IEC 61966-2-1:1999 sRGB electro-optical transfer function (EOTF).

eotf_inverse_sRGB(L)

Define the IEC 61966-2-1:1999 sRGB inverse electro-optical transfer function (EOTF).

Opto-Optical Transfer Functions#

colour

ootf(value[, function])

Map relative scene linear light to display linear light using given opto-optical transfer function (OOTF / OOCF).

OOTFS

Supported opto-optical transfer functions (OOTFs / OOCFs).

ootf_inverse(value[, function])

Map relative display linear light to scene linear light using given inverse opto-optical transfer function (OOTF / OOCF).

OOTF_INVERSES

Supported inverse opto-optical transfer functions (OOTFs / OOCFs).

colour.models

BT2100_HLG_OOTF_METHODS

Supported Recommendation ITU-R BT.2100 Reference HLG opto-optical transfer function (OOTF / OOCF).

ootf_BT2100_HLG(E[, L_B, L_W, gamma, method])

Define Recommendation ITU-R BT.2100 Reference HLG opto-optical transfer function (OOTF / OOCF).

BT2100_HLG_OOTF_INVERSE_METHODS

Supported Recommendation ITU-R BT.2100 Reference HLG inverse opto-optical transfer function (OOTF / OOCF).

ootf_inverse_BT2100_HLG(F_D[, L_B, L_W, ...])

Define Recommendation ITU-R BT.2100 Reference HLG inverse opto-optical transfer function (OOTF / OOCF).

ootf_BT2100_PQ(E)

Define Recommendation ITU-R BT.2100 Reference PQ opto-optical transfer function (OOTF / OOCF).

ootf_inverse_BT2100_PQ(F_D)

Define Recommendation ITU-R BT.2100 Reference PQ inverse opto-optical transfer function (OOTF / OOCF).

Log Encoding and Decoding#

colour

log_encoding(value[, function])

Encode scene-referred exposure values to \(R'G'B'\) video component signal value using given log encoding function.

LOG_ENCODINGS

Supported log encoding functions.

log_decoding(value[, function])

Decode \(R'G'B'\) video component signal value to scene-referred exposure values using given log decoding function.

LOG_DECODINGS

Supported log decoding functions.

colour.models

log_encoding_ACEScc(lin_AP1)

Define the ACEScc colourspace log encoding / opto-electronic transfer function.

log_decoding_ACEScc(ACEScc)

Define the ACEScc colourspace log decoding / electro-optical transfer function.

log_encoding_ACEScct(lin_AP1[, constants])

Define the ACEScct colourspace log encoding / opto-electronic transfer function.

log_decoding_ACEScct(ACEScct[, constants])

Define the ACEScct colourspace log decoding / electro-optical transfer function.

log_encoding_ACESproxy(lin_AP1[, bit_depth, ...])

Define the ACESproxy colourspace log encoding curve / opto-electronic transfer function.

log_decoding_ACESproxy(ACESproxy[, ...])

Define the ACESproxy colourspace log decoding curve / electro-optical transfer function.

log_encoding_AppleLogProfile(R[, constants])

Define the Apple Log Profile log encoding curve.

log_decoding_AppleLogProfile(P[, constants])

Define the Apple Log Profile log decoding curve.

log_encoding_ARRILogC3(x[, firmware, method, EI])

Define the ARRI LogC3 log encoding curve / opto-electronic transfer function.

log_decoding_ARRILogC3(t[, firmware, method, EI])

Define the ARRI LogC3 log decoding curve / electro-optical transfer function.

log_encoding_CanonLog2(x[, bit_depth, ...])

Define the Canon Log 2 log encoding curve / opto-electronic transfer function.

log_decoding_CanonLog2(clog2[, bit_depth, ...])

Define the Canon Log 2 log decoding curve / electro-optical transfer function.

log_encoding_CanonLog3(x[, bit_depth, ...])

Define the Canon Log 3 log encoding curve / opto-electronic transfer function.

log_decoding_CanonLog3(clog3[, bit_depth, ...])

Define the Canon Log 3 log decoding curve / electro-optical transfer function.

log_encoding_CanonLog(x[, bit_depth, ...])

Define the Canon Log log encoding curve / opto-electronic transfer function.

log_decoding_CanonLog(clog[, bit_depth, ...])

Define the Canon Log log decoding curve / electro-optical transfer function.

log_encoding_Cineon(x[, black_offset])

Define the Cineon log encoding curve / opto-electronic transfer function.

log_decoding_Cineon(y[, black_offset])

Define the Cineon log decoding curve / electro-optical transfer function.

log_encoding_ERIMMRGB(X[, bit_depth, ...])

Define the ERIMM RGB log encoding curve / opto-electronic transfer function (OETF).

log_decoding_ERIMMRGB(X_p[, bit_depth, ...])

Define the ERIMM RGB log decoding curve / electro-optical transfer function (EOTF).

log_encoding_FLog(in_r[, bit_depth, ...])

Define the Fujifilm F-Log log encoding curve / opto-electronic transfer function.

log_decoding_FLog(out_r[, bit_depth, ...])

Define the Fujifilm F-Log log decoding curve / electro-optical transfer function.

log_encoding_FLog2(in_r[, bit_depth, ...])

Define the Fujifilm F-Log2 log encoding curve / opto-electronic transfer function.

log_decoding_FLog2(out_r[, bit_depth, ...])

Define the Fujifilm F-Log2 log decoding curve / electro-optical transfer function.

log_encoding_LLog(LSR[, bit_depth, ...])

Define the Leica L-Log log encoding curve / opto-electronic transfer function.

log_decoding_LLog(LLog[, bit_depth, ...])

Define the Leica L-Log log decoding curve / electro-optical transfer function.

log_encoding_Log2(lin[, middle_grey, ...])

Define the common Log2 encoding function.

log_decoding_Log2(log_norm[, middle_grey, ...])

Define the common Log2 decoding function.

LOG3G10_ENCODING_METHODS

Supported Log3G10 log encoding curve / opto-electronic transfer function methods.

log_encoding_Log3G10(x[, method])

Define the Log3G10 log encoding curve / opto-electronic transfer function.

LOG3G10_DECODING_METHODS

Supported Log3G10 log decoding curve / electro-optical transfer function methods.

log_decoding_Log3G10(y[, method])

Define the Log3G10 log decoding curve / electro-optical transfer function.

log_encoding_Log3G12(x)

Define the Log3G12 log encoding curve / opto-electronic transfer function.

log_decoding_Log3G12(y)

Define the Log3G12 log decoding curve / electro-optical transfer function.

log_encoding_NLog(y[, bit_depth, ...])

Define the Nikon N-Log log encoding curve / opto-electronic transfer function.

log_decoding_NLog(x[, bit_depth, ...])

Define the Nikon N-Log log decoding curve / electro-optical transfer function.

log_encoding_Panalog(x[, black_offset])

Define the Panalog log encoding curve / opto-electronic transfer function.

log_decoding_Panalog(y[, black_offset])

Define the Panalog log decoding curve / electro-optical transfer function.

log_encoding_PivotedLog(x[, log_reference, ...])

Define the Josh Pines style Pivoted Log log encoding curve / opto-electronic transfer function.

log_decoding_PivotedLog(y[, log_reference, ...])

Define the Josh Pines style Pivoted Log log decoding curve / electro-optical transfer function.

log_encoding_Protune(x)

Define the Protune log encoding curve / opto-electronic transfer function.

log_decoding_Protune(y)

Define the Protune log decoding curve / electro-optical transfer function.

log_encoding_REDLog(x[, black_offset])

Define the REDLog log encoding curve / opto-electronic transfer function.

log_decoding_REDLog(y[, black_offset])

Define the REDLog log decoding curve / electro-optical transfer function.

log_encoding_REDLogFilm(x[, black_offset])

Define the REDLogFilm log encoding curve / opto-electronic transfer function.

log_decoding_REDLogFilm(y[, black_offset])

Define the REDLogFilm log decoding curve / electro-optical transfer function.

log_encoding_SLog(x[, bit_depth, ...])

Define the Sony S-Log log encoding curve / opto-electronic transfer function.

log_decoding_SLog(y[, bit_depth, ...])

Define the Sony S-Log log decoding curve / electro-optical transfer function.

log_encoding_SLog2(x[, bit_depth, ...])

Define the Sony S-Log2 log encoding curve / opto-electronic transfer function.

log_decoding_SLog2(y[, bit_depth, ...])

Define the Sony S-Log2 log decoding curve / electro-optical transfer function.

log_encoding_SLog3(x[, bit_depth, ...])

Define the Sony S-Log3 log encoding curve / opto-electronic transfer function.

log_decoding_SLog3(y[, bit_depth, ...])

Define the Sony S-Log3 log decoding curve / electro-optical transfer function.

log_encoding_VLog(L_in[, bit_depth, ...])

Define the Panasonic V-Log log encoding curve / opto-electronic transfer function.

log_decoding_VLog(V_out[, bit_depth, ...])

Define the Panasonic V-Log log decoding curve / electro-optical transfer function.

log_encoding_ViperLog(x)

Define the Viper Log log encoding curve / opto-electronic transfer function.

log_decoding_ViperLog(y)

Define the Viper Log log decoding curve / electro-optical transfer function.

Colour Encodings#
Y’CbCr Colour Encoding#

colour

WEIGHTS_YCBCR

Implement a delimiter and case-insensitive dict-like object with support for slugs, i.e. SEO friendly and human-readable version of the keys but also canonical keys, i.e. slugified keys without delimiters.

matrix_YCbCr([K, bits, is_legal, is_int])

Compute the Y'CbCr to R'G'B' matrix for given weights, bit-depth, range legality and representation.

offset_YCbCr([bits, is_legal, is_int])

Compute the R'G'B' to Y'CbCr offsets for given bit-depth, range legality and representation.

RGB_to_YCbCr(RGB[, K, in_bits, in_legal, ...])

Convert an array of R'G'B' values to the corresponding Y'CbCr colour encoding values array.

YCbCr_to_RGB(YCbCr[, K, in_bits, in_legal, ...])

Convert an array of Y'CbCr colour encoding values to the corresponding R'G'B' values array.

RGB_to_YcCbcCrc(RGB[, out_bits, out_legal, ...])

Convert an array of RGB linear values to the corresponding Yc'Cbc'Crc' colour encoding values array.

YcCbcCrc_to_RGB(YcCbcCrc[, in_bits, ...])

Convert an array of Yc'Cbc'Crc' colour encoding values to the corresponding RGB array of linear values.

Ancillary Objects

colour

full_to_legal(CV[, bit_depth, in_int, out_int])

Convert given code value \(CV\) or float equivalent of a code value at a given bit-depth from full range (full swing) to legal range (studio swing).

legal_to_full(CV[, bit_depth, in_int, out_int])

Convert given code value \(CV\) or float equivalent of a code value at a given bit-depth from legal range (studio swing) to full range (full swing).

CV_range([bit_depth, is_legal, is_int])

Return the code value \(CV\) range for given bit-depth, range legality and representation.

YCoCg Colour Encoding#

colour

RGB_to_YCoCg(RGB)

Convert an array of R'G'B' values to the corresponding YCoCg colour encoding values array.

YCoCg_to_RGB(YCoCg)

Convert an array of YCoCg colour encoding values to the corresponding R'G'B' values array.

\(IC_TC_P\) Colour Encoding#

colour

RGB_to_ICtCp(RGB[, method, L_p])

Convert from ITU-R BT.2020 colourspace to \(IC_TC_P\) colour encoding.

ICtCp_to_RGB(ICtCp[, method, L_p])

Convert from \(IC_TC_P\) colour encoding to ITU-R BT.2020 colourspace.

XYZ_to_ICtCp(XYZ[, illuminant, ...])

Convert from CIE XYZ tristimulus values to \(IC_TC_P\) colour encoding.

ICtCp_to_XYZ(ICtCp[, illuminant, ...])

Convert from \(IC_TC_P\) colour encoding to CIE XYZ tristimulus values.

RGB Representations#
Prismatic Colourspace#

colour

RGB_to_Prismatic(RGB)

Convert from RGB colourspace to Prismatic \(L\rho\gamma\beta\) colourspace array.

Prismatic_to_RGB(Lrgb)

Convert from Prismatic \(L\rho\gamma\beta\) colourspace array to RGB colourspace.

HSV Colourspace#

colour

RGB_to_HSV(RGB)

Convert from RGB colourspace to HSV colourspace.

HSV_to_RGB(HSV)

Convert from HSV colourspace to RGB colourspace.

HSL Colourspace#

colour

RGB_to_HSL(RGB)

Convert from RGB colourspace to HSL colourspace.

HSL_to_RGB(HSL)

Convert from HSL colourspace to RGB colourspace.

HCL Colourspace#

colour

RGB_to_HCL(RGB[, gamma, Y_0])

Convert from RGB colourspace to HCL colourspace according to Sarifuddin and Missaoui (2005) method.

HCL_to_RGB(HCL[, gamma, Y_0])

Convert from HCL colourspace to RGB colourspace according to Sarifuddin and Missaoui (2005) method.

CMY Colourspace#

colour

RGB_to_CMY(RGB)

Convert from RGB colourspace to CMY colourspace.

CMY_to_RGB(CMY)

Convert from CMY colourspace to CMY colourspace.

CMY_to_CMYK(CMY)

Convert from CMY colourspace to CMYK colourspace.

CMYK_to_CMY(CMYK)

Convert from CMYK colourspace to CMY colourspace.

IHLS - Hanbury (2003)#

colour

RGB_to_IHLS(RGB)

Convert from RGB colourspace to IHLS (Improved HLS) colourspace.

IHLS_to_RGB(HYS)

Convert from IHLS (Improved HLS) colourspace to RGB colourspace.

Recommendation ITU-T H.273 Code points for Video Signal Type Identification#

colour

COLOUR_PRIMARIES_ITUTH273

ColourPrimaries indicates the chromaticity coordinates of the source colour primaries as specified in Table 3 of [InternationalOfStandardization21] and [InternationalTUnion21] in terms of the CIE 1931 definition of x and y, which shall be interpreted as specified by ISO/ CIE 11664-1.

TRANSFER_CHARACTERISTICS_ITUTH273

TransferCharacteristics, as specified in Table 3 of [InternationalOfStandardization21] and [InternationalTUnion21], either indicates the reference opto-electronic transfer characteristic function of the source picture as a function of a source input linear optical intensity input Lc with a nominal real-valued range of 0 to 1 or indicates the inverse of the reference electro-optical transfer characteristic function as a function of an output linear optical intensity Lo with a nominal real-valued range of 0 to 1.

MATRIX_COEFFICIENTS_ITUTH273

MatrixCoefficients describes the matrix coefficients used in deriving luma and chroma signals from the green, blue and red or X, Y and Z primaries, as specified in Table 4 and equations 11 to 77 of [InternationalOfStandardization21] and [InternationalTUnion21].

Ancillary Objects

colour.models

describe_video_signal_colour_primaries(...)

Describe given video signal colour primaries code point.

describe_video_signal_transfer_characteristics(...)

Describe given video signal transfer characteristics code point.

describe_video_signal_matrix_coefficients(...)

Describe given video signal matrix coefficients code point.

Pointer’s Gamut#

colour

CCS_ILLUMINANT_POINTER_GAMUT

ndarray(shape, dtype=float, buffer=None, offset=0,

DATA_POINTER_GAMUT_VOLUME

ndarray(shape, dtype=float, buffer=None, offset=0,

CCS_POINTER_GAMUT_BOUNDARY

ndarray(shape, dtype=float, buffer=None, offset=0,

Colour Notation Systems#

Munsell Renotation System#

colour

munsell_colour_to_xyY(munsell_colour)

Convert given Munsell colour to CIE xyY colourspace.

xyY_to_munsell_colour(xyY[, hue_decimals, ...])

Convert from CIE xyY colourspace to Munsell colour.

Dataset

colour

MUNSELL_COLOURS

Define the Munsell Renotation System datasets.

Munsell Value#

colour

munsell_value(Y[, method])

Return the Munsell value \(V\) of given luminance \(Y\) using given method.

MUNSELL_VALUE_METHODS

Supported Munsell value computation methods.

Priest, Gibson and MacNicholas (1920)#

colour.notation

munsell_value_Priest1920(Y)

Return the Munsell value \(V\) of given luminance \(Y\) using Priest et al. (1920) method.

Munsell, Sloan and Godlove (1933)#

colour.notation

munsell_value_Munsell1933(Y)

Return the Munsell value \(V\) of given luminance \(Y\) using Munsell et al. (1933) method.

Moon and Spencer (1943)#

colour.notation

munsell_value_Moon1943(Y)

Return the Munsell value \(V\) of given luminance \(Y\) using Moon and Spencer (1943) method.

Saunderson and Milner (1944)#

colour.notation

munsell_value_Saunderson1944(Y)

Return the Munsell value \(V\) of given luminance \(Y\) using Saunderson and Milner (1944) method.

Ladd and Pinney (1955)#

colour.notation

munsell_value_Ladd1955(Y)

Return the Munsell value \(V\) of given luminance \(Y\) using Ladd and Pinney (1955) method.

McCamy (1987)#

colour.notation

munsell_value_McCamy1987(Y)

Return the Munsell value \(V\) of given luminance \(Y\) using McCamy (1987) method.

ASTM D1535-08e1#

colour.notation

munsell_value_ASTMD1535(Y)

Return the Munsell value \(V\) of given luminance \(Y\) using an inverse lookup table from ASTM D1535-08e1 method.

Hexadecimal Representation#

colour.notation

RGB_to_HEX(RGB)

Convert from RGB colourspace to hexadecimal representation.

HEX_to_RGB(HEX)

Convert from hexadecimal representation to RGB colourspace.

Web Colours#

colour.notation

CSS_COLOR_3_BASIC

The list of basic colour keywords.

CSS_COLOR_3_EXTENDED

The list of the X11 colors supported by popular browsers with the addition of gray/grey variants from SVG 1.0.

CSS_COLOR_3

List of colour keywords as given by as given by CSS Color Module Level 3 W3C Recommendation.

keyword_to_RGB_CSSColor3(keyword)

Convert given colour keyword to RGB colourspace according to CSS Color Module Level 3 W3C Recommendation.

Optical Phenomena#

Rayleigh Scattering#

colour

rayleigh_scattering(wavelength[, ...])

Return the Rayleigh optical depth \(T_r(\lambda)\) as function of wavelength \(\lambda\) in centimeters (cm).

sd_rayleigh_scattering([shape, ...])

Return the Rayleigh spectral distribution for given spectral shape.

scattering_cross_section(wavelength[, ...])

Return the scattering cross-section per molecule \(\sigma\) of dry air as function of wavelength \(\lambda\) in centimeters (cm) using given \(CO_2\) concentration in parts per million (ppm) and temperature \(T[K]\) in kelvin degrees following Van de Hulst (1957) method.

colour.phenomena

rayleigh_optical_depth(wavelength[, ...])

Return the Rayleigh optical depth \(T_r(\lambda)\) as function of wavelength \(\lambda\) in centimeters (cm).

Plotting#

Common#

colour.plotting

ColourSwatch(RGB, name)

Define a data structure for a colour swatch.

colour_style([use_style])

Return Colour plotting style.

override_style(**kwargs)

Decorate a function to override Matplotlib style.

colour_cycle(**kwargs)

Return a colour cycle iterator using given colour map.

artist(**kwargs)

Return the current figure and its axes or creates a new one.

camera(**kwargs)

Set the camera settings.

render(**kwargs)

Render the current figure while adjusting various settings such as the bounding box, the title or background transparency.

label_rectangles(labels, rectangles[, ...])

Add labels above given rectangles.

uniform_axes3d(**kwargs)

Set equal aspect ratio to given 3d axes.

plot_single_colour_swatch(colour_swatch, ...)

Plot given colour swatch.

plot_multi_colour_swatches(colour_swatches)

Plot given colours swatches.

plot_single_function(function[, samples, ...])

Plot given function.

plot_multi_functions(functions[, samples, ...])

Plot given functions.

plot_image(image[, imshow_kwargs, text_kwargs])

Plot given image.

Ancillary Objects

colour.plotting.common

KwargsArtist

Define the keyword argument types for the colour.plotting.artist() definition.

KwargsCamera

Define the keyword argument types for the colour.plotting.camera() definition.

KwargsRender

Define the keyword argument types for the colour.plotting.render() definition.

font_scaling(scaling, value)

Define a context manager setting temporarily a Matplotlib font scaling.

filter_passthrough(mapping, filterers[, ...])

Return mapping objects matching given filterers while passing through class instances whose type is one of the mapping element types.

filter_RGB_colourspaces(filterers[, ...])

Return the RGB colourspaces matching given filterers.

filter_cmfs(filterers[, allow_non_siblings])

Return the colour matching functions matching given filterers.

filter_illuminants(filterers[, ...])

Return the illuminants matching given filterers.

filter_colour_checkers(filterers[, ...])

Return the colour checkers matching given filterers.

Colorimetry#

colour.plotting

plot_single_sd(sd[, cmfs, ...])

Plot given spectral distribution.

plot_multi_sds(sds[, plot_kwargs])

Plot given spectral distributions.

plot_single_cmfs([cmfs])

Plot given colour matching functions.

plot_multi_cmfs(cmfs, **kwargs)

Plot given colour matching functions.

plot_single_illuminant_sd(illuminant[, cmfs])

Plot given single illuminant spectral distribution.

plot_multi_illuminant_sds(illuminants, **kwargs)

Plot given illuminants spectral distributions.

plot_visible_spectrum([cmfs, ...])

Plot the visible colours spectrum using given standard observer CIE XYZ colour matching functions.

plot_single_lightness_function(function, ...)

Plot given Lightness function.

plot_multi_lightness_functions(functions, ...)

Plot given Lightness functions.

plot_single_luminance_function(function, ...)

Plot given Luminance function.

plot_multi_luminance_functions(functions, ...)

Plot given Luminance functions.

plot_blackbody_spectral_radiance([...])

Plot given blackbody spectral radiance.

plot_blackbody_colours([shape, cmfs])

Plot blackbody colours.

Colour Vision Deficiency#

colour.plotting

plot_cvd_simulation_Machado2009(RGB[, ...])

Perform colour vision deficiency simulation on given RGB colourspace array using Machado et al. (2009) model.

Colour Characterisation#

colour.plotting

plot_single_colour_checker([colour_checker])

Plot given colour checker.

plot_multi_colour_checkers(colour_checkers, ...)

Plot and compares given colour checkers.

Corresponding Chromaticities#

colour.plotting

plot_corresponding_chromaticities_prediction([...])

Plot given chromatic adaptation model corresponding chromaticities prediction.

CIE Chromaticity Diagrams#

colour.plotting

METHODS_CHROMATICITY_DIAGRAM

Implement a delimiter and case-insensitive dict-like object with support for slugs, i.e. SEO friendly and human-readable version of the keys but also canonical keys, i.e. slugified keys without delimiters.

LABELS_CHROMATICITY_DIAGRAM_DEFAULT

Implement a delimiter and case-insensitive dict-like object with support for slugs, i.e. SEO friendly and human-readable version of the keys but also canonical keys, i.e. slugified keys without delimiters.

lines_spectral_locus([cmfs, labels, method])

Return the Spectral Locus line vertices, i.e. positions, normals and colours, according to given method.

plot_chromaticity_diagram_CIE1931([cmfs, ...])

Plot the CIE 1931 Chromaticity Diagram.

plot_chromaticity_diagram_CIE1960UCS([cmfs, ...])

Plot the CIE 1960 UCS Chromaticity Diagram.

plot_chromaticity_diagram_CIE1976UCS([cmfs, ...])

Plot the CIE 1976 UCS Chromaticity Diagram.

plot_sds_in_chromaticity_diagram_CIE1931(sds)

Plot given spectral distribution chromaticity coordinates into the CIE 1931 Chromaticity Diagram.

plot_sds_in_chromaticity_diagram_CIE1960UCS(sds)

Plot given spectral distribution chromaticity coordinates into the CIE 1960 UCS Chromaticity Diagram.

plot_sds_in_chromaticity_diagram_CIE1976UCS(sds)

Plot given spectral distribution chromaticity coordinates into the CIE 1976 UCS Chromaticity Diagram.

Ancillary Objects

colour.plotting.diagrams

plot_spectral_locus([cmfs, ...])

Plot the Spectral Locus according to given method.

plot_chromaticity_diagram_colours([samples, ...])

Plot the Chromaticity Diagram colours according to given method.

plot_chromaticity_diagram([cmfs, ...])

Plot the Chromaticity Diagram according to given method.

plot_sds_in_chromaticity_diagram(sds[, ...])

Plot given spectral distribution chromaticity coordinates into the Chromaticity Diagram using given method.

Colour Models#

colour.plotting

plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931(...)

Plot given RGB colourspaces in the CIE 1931 Chromaticity Diagram.

plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS(...)

Plot given RGB colourspaces in the CIE 1960 UCS Chromaticity Diagram.

plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS(...)

Plot given RGB colourspaces in the CIE 1976 UCS Chromaticity Diagram.

plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(RGB)

Plot given RGB colourspace array in the CIE 1931 Chromaticity Diagram.

plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS(RGB)

Plot given RGB colourspace array in the CIE 1960 UCS Chromaticity Diagram.

plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS(RGB)

Plot given RGB colourspace array in the CIE 1976 UCS Chromaticity Diagram.

plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931([...])

Plot MacAdam (1942) Ellipses (Observer PGN) in the CIE 1931 Chromaticity Diagram.

plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS([...])

Plot MacAdam (1942) Ellipses (Observer PGN) in the CIE 1960 UCS Chromaticity Diagram.

plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS([...])

Plot MacAdam (1942) Ellipses (Observer PGN) in the CIE 1976 UCS Chromaticity Diagram.

plot_single_cctf(cctf[, cctf_decoding])

Plot given colourspace colour component transfer function.

plot_multi_cctfs(cctfs[, cctf_decoding])

Plot given colour component transfer functions.

plot_constant_hue_loci(data[, model, ...])

Plot given constant hue loci colour matches data such as that from [HB95] or [EF98] that are easily loaded with Colour - Datasets.

Ancillary Objects

colour.plotting.models

colourspace_model_axis_reorder(a, model[, ...])

Reorder the axes of given colourspace model \(a\) array according to the most common volume plotting axes order.

lines_pointer_gamut([method])

Return the Pointer's Gamut line vertices, i.e. positions, normals and colours, according to given method.

plot_pointer_gamut([pointer_gamut_colours, ...])

Plot Pointer's Gamut according to given method.

plot_RGB_colourspaces_in_chromaticity_diagram(...)

Plot given RGB colourspaces in the Chromaticity Diagram according to given method.

plot_RGB_chromaticities_in_chromaticity_diagram(RGB)

Plot given RGB colourspace array in the Chromaticity Diagram according to given method.

plot_ellipses_MacAdam1942_in_chromaticity_diagram([...])

Plot MacAdam (1942) Ellipses (Observer PGN) in the Chromaticity Diagram according to given method.

Colour Notation Systems#

colour.plotting

plot_single_munsell_value_function(function, ...)

Plot given Lightness function.

plot_multi_munsell_value_functions(...)

Plot given Munsell value functions.

Optical Phenomena#

colour.plotting

plot_single_sd_rayleigh_scattering([...])

Plot a single Rayleigh scattering spectral distribution.

plot_the_blue_sky([cmfs])

Plot the blue sky.

Colour Quality#

colour.plotting

plot_single_sd_colour_rendering_index_bars(sd, ...)

Plot the Colour Rendering Index (CRI) of given illuminant or light source spectral distribution.

plot_multi_sds_colour_rendering_indexes_bars(...)

Plot the Colour Rendering Index (CRI) of given illuminants or light sources spectral distributions.

plot_single_sd_colour_quality_scale_bars(sd)

Plot the Colour Quality Scale (CQS) of given illuminant or light source spectral distribution.

plot_multi_sds_colour_quality_scales_bars(sds)

Plot the Colour Quality Scale (CQS) of given illuminants or light sources spectral distributions.

Ancillary Objects

colour.plotting.quality

plot_colour_quality_bars(specifications[, ...])

Plot the colour quality data of given illuminants or light sources colour quality specifications.

Gamut Section Plotting#

colour.plotting

plot_visible_spectrum_section([cmfs, ...])

Plot the visible spectrum volume, i.e. Rösch-MacAdam colour solid, section colours along given axis and origin.

plot_RGB_colourspace_section(colourspace[, ...])

Plot given RGB colourspace section colours along given axis and origin.

Ancillary Objects

colour.plotting.section

plot_hull_section_colours(hull[, model, ...])

Plot the section colours of given trimesh hull along given axis and origin.

plot_hull_section_contour(hull[, model, ...])

Plot the section contour of given trimesh hull along given axis and origin.

Colour Temperature & Correlated Colour Temperature#

colour.plotting

lines_daylight_locus([mireds, method])

Return the Daylight Locus line vertices, i.e. positions, normals and colours, according to given method.

LABELS_PLANCKIAN_LOCUS_DEFAULT

Implement a delimiter and case-insensitive dict-like object with support for slugs, i.e. SEO friendly and human-readable version of the keys but also canonical keys, i.e. slugified keys without delimiters.

lines_planckian_locus([labels, mireds, ...])

Return the Planckian Locus line vertices, i.e. positions, normals and colours, according to given method.

plot_planckian_locus_in_chromaticity_diagram_CIE1931(...)

Plot the Planckian Locus and given illuminants in CIE 1931 Chromaticity Diagram.

plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(...)

Plot the Planckian Locus and given illuminants in CIE 1960 UCS Chromaticity Diagram.

plot_planckian_locus_in_chromaticity_diagram_CIE1976UCS(...)

Plot the Planckian Locus and given illuminants in CIE 1976 UCS Chromaticity Diagram.

Ancillary Objects

colour.plotting.temperature

plot_daylight_locus([...])

Plot the Daylight Locus according to given method.

plot_planckian_locus([...])

Plot the Planckian Locus according to given method.

plot_planckian_locus_in_chromaticity_diagram(...)

Plot the Planckian Locus and given illuminants in the Chromaticity Diagram according to given method.

Colour Models Volume#

colour.plotting

plot_RGB_colourspaces_gamuts(colourspaces[, ...])

Plot given RGB colourspaces gamuts in given reference colourspace.

plot_RGB_scatter(RGB[, colourspace, model, ...])

Plot given RGB colourspace array in a scatter plot.

ANSI/IES TM-30-18 Colour Rendition Report#

colour.plotting

plot_single_sd_colour_rendition_report(sd[, ...])

Generate the ANSI/IES TM-30-18 Colour Rendition Report for given spectral distribution according to given method.

Ancillary Objects

colour.plotting.tm3018

plot_single_sd_colour_rendition_report_full(sd)

Generate the full ANSI/IES TM-30-18 Colour Rendition Report for given spectral distribution.

plot_single_sd_colour_rendition_report_intermediate(sd)

Generate the intermediate ANSI/IES TM-30-18 Colour Rendition Report for given spectral distribution.

plot_single_sd_colour_rendition_report_simple(sd)

Generate the simple ANSI/IES TM-30-18 Colour Rendition Report for given spectral distribution.

Automatic Colour Conversion Graph#

colour.plotting

plot_automatic_colour_conversion_graph(filename)

Plot Colour automatic colour conversion graph using Graphviz and pyraphviz.

Colour Quality#

Colour Fidelity Index#

colour

COLOUR_FIDELITY_INDEX_METHODS

Supported Colour Fidelity Index (CFI) computation methods.

colour_fidelity_index(sd_test[, ...])

Return the Colour Fidelity Index (CFI) \(R_f\) of given spectral distribution using given method.

colour.quality

ColourRendering_Specification_CIE2017(name, ...)

Define the CIE 2017 Colour Fidelity Index (CFI) colour quality specification.

colour_fidelity_index_CIE2017(sd_test[, ...])

Return the CIE 2017 Colour Fidelity Index (CFI) \(R_f\) of given spectral distribution.

ColourQuality_Specification_ANSIIESTM3018(...)

Define the ANSI/IES TM-30-18 Colour Fidelity Index (CFI) colour quality specification.

colour_fidelity_index_ANSIIESTM3018(sd_test)

Return the ANSI/IES TM-30-18 Colour Fidelity Index (CFI) \(R_f\) of given spectral distribution.

Colour Rendering Index#

colour

colour_rendering_index(sd_test[, ...])

Return the Colour Rendering Index (CRI) \(Q_a\) of given spectral distribution.

colour.quality

ColourRendering_Specification_CRI(name, Q_a, ...)

Define the Colour Rendering Index (CRI) colour quality specification.

Colour Quality Scale#

colour

COLOUR_QUALITY_SCALE_METHODS

Supported Colour Quality Scale (CQS) computation methods.

colour_quality_scale(sd_test[, ...])

Return the Colour Quality Scale (CQS) of given spectral distribution using given method.

colour.quality

ColourRendering_Specification_CQS(name, Q_a, ...)

Define the Colour Quality Scale (CQS) colour rendering (quality) specification.

Academy Spectral Similarity Index (SSI)#

colour

spectral_similarity_index(sd_test, sd_reference)

Return the Academy Spectral Similarity Index (SSI) of given test spectral distribution with given reference spectral distribution.

Spectral Recovery and Up-sampling#

Reflectance Recovery#
CIE XYZ Colourspace to Spectral#

colour

XYZ_to_sd(XYZ[, method])

Recover the spectral distribution of given CIE XYZ tristimulus values using given method.

XYZ_TO_SD_METHODS

Supported spectral distribution recovery methods.

Jakob and Hanika (2019)#

colour.recovery

XYZ_to_sd_Jakob2019(XYZ[, cmfs, illuminant, ...])

Recover the spectral distribution of given CIE XYZ tristimulus values using Jakob and Hanika (2019) method.

LUT3D_Jakob2019()

Define a class for working with pre-computed lookup tables for the Jakob and Hanika (2019) spectral upsampling method.

Ancillary Objects

colour.recovery

sd_Jakob2019(coefficients[, shape])

Return a spectral distribution following the spectral model given by Jakob and Hanika (2019).

find_coefficients_Jakob2019(XYZ[, cmfs, ...])

Compute the coefficients for Jakob and Hanika (2019) reflectance spectral model.

Mallett and Yuksel (2019)#

colour.recovery

RGB_to_sd_Mallett2019(RGB[, basis_functions])

Recover the spectral distribution of given RGB colourspace array using Mallett and Yuksel (2019) method.

Ancillary Objects

colour.recovery

MSDS_BASIS_FUNCTIONS_sRGB_MALLETT2019

the base object for multi spectral computations.

SPECTRAL_SHAPE_sRGB_MALLETT2019

Shape for Mallett and Yuksel (2019) sRGB colourspace basis functions: (380, 780, 5).

spectral_primary_decomposition_Mallett2019(...)

Perform the spectral primary decomposition as described in Mallett and Yuksel (2019) for given RGB colourspace.

Meng, Simon and Hanika (2015)#

colour.recovery

XYZ_to_sd_Meng2015(XYZ[, cmfs, illuminant, ...])

Recover the spectral distribution of given CIE XYZ tristimulus values using Meng et al. (2015) method.

Otsu, Yamamoto and Hachisuka (2018)#

colour.recovery

XYZ_to_sd_Otsu2018(XYZ[, cmfs, illuminant, ...])

Recover the spectral distribution of given CIE XYZ tristimulus values using Otsu et al. (2018) method.

Ancillary Objects

colour.recovery

Dataset_Otsu2018([shape, basis_functions, ...])

Store all the information needed for the Otsu et al. (2018) spectral upsampling method.

Tree_Otsu2018(*args, **kwargs)

A sub-class of colour.recovery.otsu2018.Node class representing the root node of a tree containing information shared with all the nodes, such as the standard observer colour matching functions and the illuminant, if any is used.

Smits (1999)#

colour.recovery

RGB_to_sd_Smits1999(RGB)

Recover the spectral distribution of given RGB colourspace array using Smits (1999) method.

SDS_SMITS1999

Smits (1999) spectral distributions.

Camera RGB Sensitivities Recovery#
Jiang, Liu, Gu and Süsstrunk (2013)#

colour.recovery

RGB_to_sd_camera_sensitivity_Jiang2013(RGB, ...)

Recover a single camera RGB sensitivity for given camera RGB values using Jiang et al. (2013) method.

RGB_to_msds_camera_sensitivities_Jiang2013(...)

Recover the camera RGB sensitivities for given camera RGB values using Jiang et al. (2013) method.

Ancillary Objects

colour.recovery

PCA_Jiang2013(msds_camera_sensitivities[, ...])

Perform the Principal Component Analysis (PCA) on given camera RGB sensitivities.

Colour Temperature#

Correlated Colour Temperature#

colour

uv_to_CCT(uv[, method])

Return the correlated colour temperature \(T_{cp}\) and \(\Delta_{uv}\) from given CIE UCS colourspace uv chromaticity coordinates using given method.

UV_TO_CCT_METHODS

Supported CIE UCS colourspace uv chromaticity coordinates to correlated colour temperature \(T_{cp}\) computation methods.

CCT_to_uv(CCT_D_uv[, method])

Return the CIE UCS colourspace uv chromaticity coordinates from given correlated colour temperature \(T_{cp}\) using given method.

CCT_TO_UV_METHODS

Supported correlated colour temperature \(T_{cp}\) to CIE UCS colourspace uv chromaticity coordinates computation methods.

xy_to_CCT(xy[, method])

Return the correlated colour temperature \(T_{cp}\) from given CIE xy chromaticity coordinates using given method.

XY_TO_CCT_METHODS

Supported CIE xy chromaticity coordinates to correlated colour temperature \(T_{cp}\) computation methods.

CCT_to_xy(CCT[, method])

Return the CIE xy chromaticity coordinates from given correlated colour temperature \(T_{cp}\) using given method.

CCT_TO_XY_METHODS

Supported correlated colour temperature \(T_{cp}\) to CIE xy chromaticity coordinates computation methods.

Robertson (1968)#

colour.temperature

mired_to_CCT(mired)

Convert given micro reciprocal degree to correlated colour temperature \(T_{cp}\).

CCT_to_mired(CCT)

Convert given correlated colour temperature \(T_{cp}\) to micro reciprocal degree (mired).

uv_to_CCT_Robertson1968(uv)

Return the correlated colour temperature \(T_{cp}\) and \(\Delta_{uv}\) from given CIE UCS colourspace uv chromaticity coordinates using Roberston (1968) method.

CCT_to_uv_Robertson1968(CCT_D_uv)

Return the CIE UCS colourspace uv chromaticity coordinates from given correlated colour temperature \(T_{cp}\) and \(\Delta_{uv}\) using Roberston (1968) method.

Krystek (1985)#

colour.temperature

uv_to_CCT_Krystek1985(uv[, optimisation_kwargs])

Return the correlated colour temperature \(T_{cp}\) from given CIE UCS colourspace uv chromaticity coordinates using Krystek (1985) method.

CCT_to_uv_Krystek1985(CCT)

Return the CIE UCS colourspace uv chromaticity coordinates from given correlated colour temperature \(T_{cp}\) using Krystek (1985) method.

Ohno (2013)#

colour.temperature

uv_to_CCT_Ohno2013(uv[, cmfs, start, end, ...])

Return the correlated colour temperature \(T_{cp}\) and \(\Delta_{uv}\) from given CIE UCS colourspace uv chromaticity coordinates, colour matching functions and temperature range using Ohno (2013) method.

CCT_to_uv_Ohno2013(CCT_D_uv[, cmfs])

Return the CIE UCS colourspace uv chromaticity coordinates from given correlated colour temperature \(T_{cp}\), \(\Delta_{uv}\) and colour matching functions using Ohno (2013) method.

XYZ_to_CCT_Ohno2013(XYZ[, cmfs, start, end, ...])

Return the correlated colour temperature \(T_{cp}\) and \(\Delta_{uv}\) from given CIE XYZ tristimulus values, colour matching functions and temperature range using Ohno (2013) method.

CCT_to_XYZ_Ohno2013(CCT_D_uv[, cmfs])

Return the CIE XYZ tristimulus values from given correlated colour temperature \(T_{cp}\), \(\Delta_{uv}\) and colour matching functions using Ohno (2013) method.

Planck (1900)#

colour.temperature

uv_to_CCT_Planck1900(uv[, cmfs, ...])

Return the correlated colour temperature \(T_{cp}\) of a blackbody from given CIE UCS colourspace uv chromaticity coordinates and colour matching functions.

CCT_to_uv_Planck1900(CCT[, cmfs])

Return the CIE UCS colourspace uv chromaticity coordinates from given correlated colour temperature \(T_{cp}\) and colour matching functions using the spectral radiance of a blackbody at the given thermodynamic temperature.

McCamy (1992)#

colour.temperature

xy_to_CCT_McCamy1992(xy)

Return the correlated colour temperature \(T_{cp}\) from given CIE xy chromaticity coordinates using McCamy (1992) method.

CCT_to_xy_McCamy1992(CCT[, optimisation_kwargs])

Return the CIE xy chromaticity coordinates from given correlated colour temperature \(T_{cp}\) using McCamy (1992) method.

Hernandez-Andres, Lee and Romero (1999)#

colour.temperature

xy_to_CCT_Hernandez1999(xy)

Return the correlated colour temperature \(T_{cp}\) from given CIE xy chromaticity coordinates using Hernandez-Andres et al. (1999) method.

CCT_to_xy_Hernandez1999(CCT[, ...])

Return the CIE xy chromaticity coordinates from given correlated colour temperature \(T_{cp}\) using Hernandez-Andres et al. (1999) method.

Kang, Moon, Hong, Lee, Cho and Kim (2002)#

colour.temperature

xy_to_CCT_Kang2002(xy[, optimisation_kwargs])

Return the correlated colour temperature \(T_{cp}\) from given CIE xy chromaticity coordinates using Kang et al. (2002) method.

CCT_to_xy_Kang2002(CCT)

Return the CIE xy chromaticity coordinates from given correlated colour temperature \(T_{cp}\) using Kang et al. (2002) method.

CIE Illuminant D Series#

colour.temperature

xy_to_CCT_CIE_D(xy[, optimisation_kwargs])

Return the correlated colour temperature \(T_{cp}\) of a CIE Illuminant D Series from its CIE xy chromaticity coordinates.

CCT_to_xy_CIE_D(CCT)

Return the CIE xy chromaticity coordinates of a CIE Illuminant D Series from its correlated colour temperature \(T_{cp}\).

Utilities#

Callback Management#

colour

colour.utilities

Callback(name, function)

Define a callback.

MixinCallback()

A mixin providing support for callbacks.

Common#

colour

domain_range_scale(scale)

Define context manager and decorator temporarily setting Colour domain-range scale.

get_domain_range_scale()

Return the current Colour domain-range scale.

set_domain_range_scale([scale])

Set the current Colour domain-range scale.

colour.utilities

CacheRegistry()

A registry for mapping-based caches.

is_caching_enabled()

Return whether Colour caching is enabled.

set_caching_enable(enable)

Set Colour caching enabled state.

caching_enable(enable)

Define a context manager and decorator temporarily setting Colour caching enabled state.

CACHE_REGISTRY

A registry for mapping-based caches.

handle_numpy_errors(**kwargs)

Decorate a function to handle Numpy errors.

ignore_numpy_errors(function)

Wrap given function wrapper.

raise_numpy_errors(function)

Wrap given function wrapper.

print_numpy_errors(function)

Wrap given function wrapper.

warn_numpy_errors(function)

Wrap given function wrapper.

ignore_python_warnings(function)

Decorate a function to ignore Python warnings.

attest(condition[, message])

Provide the assert statement functionality without being disabled by optimised Python execution.

batch(sequence[, k])

Return a batch generator from given sequence.

disable_multiprocessing()

Define a context manager and decorator to temporarily disabling Colour multiprocessing state.

multiprocessing_pool(*args, **kwargs)

Define a context manager providing a multiprocessing pool.

is_ctlrender_installed([raise_exception])

Return whether ctlrender is installed and available.

is_graphviz_installed([raise_exception])

Return whether Graphviz is installed and available.

is_matplotlib_installed([raise_exception])

Return whether Matplotlib is installed and available.

is_networkx_installed([raise_exception])

Return whether NetworkX is installed and available.

is_opencolorio_installed([raise_exception])

Return whether OpenColorIO is installed and available.

is_openimageio_installed([raise_exception])

Return whether OpenImageIO is installed and available.

is_pandas_installed([raise_exception])

Return whether Pandas is installed and available.

is_tqdm_installed([raise_exception])

Return whether tqdm is installed and available.

is_trimesh_installed([raise_exception])

Return whether Trimesh is installed and available.

is_xxhash_installed([raise_exception])

Return whether xxhash is installed and available.

required(*requirements)

Decorate a function to check whether various ancillary package requirements are satisfied.

is_iterable(a)

Return whether given variable \(a\) is iterable.

is_string(a)

Return whether given variable \(a\) is a str-like variable.

is_numeric(a)

Return whether given variable \(a\) is a Real-like variable.

is_integer(a)

Return whether given variable \(a\) is an numpy.integer-like variable under given threshold.

is_sibling(element, mapping)

Return whether given element type is present in given mapping types.

filter_kwargs(function, **kwargs)

Filter keyword arguments incompatible with the given function signature.

filter_mapping(mapping, names)

Filter given mapping with given names.

first_item(a)

Return the first item of given iterable.

copy_definition(definition[, name])

Copy a definition using the same code, globals, defaults, closure, and name.

validate_method(method, valid_methods[, message])

Validate whether given method exists in the given valid methods and returns the method lower cased.

optional(value, default)

Handle optional argument value by providing a default value.

slugify(object_[, allow_unicode])

Generate a SEO friendly and human-readable slug from given object.

int_digest(args[, seed])

Generate an integer digest for given argument using xxhash if available or falling back to hash() if not.

Array#

colour.utilities

MixinDataclassFields()

A mixin providing fields introspection for the dataclass-like class fields.

MixinDataclassIterable()

A mixin providing iteration capabilities over the dataclass-like class fields.

MixinDataclassArray()

A mixin providing conversion methods for dataclass-like class conversion to numpy.ndarray class.

MixinDataclassArithmetic()

A mixin providing mathematical operations for dataclass-like class.

as_array(a[, dtype])

Convert given variable \(a\) to numpy.ndarray using given numpy.dtype.

as_int(a[, dtype])

Attempt to convert given variable \(a\) to numpy.integer using given numpy.dtype.

as_float(a[, dtype])

Attempt to convert given variable \(a\) to numpy.floating using given numpy.dtype.

as_int_array(a[, dtype])

Convert given variable \(a\) to numpy.ndarray using given numpy.dtype.

as_float_array(a[, dtype])

Convert given variable \(a\) to numpy.ndarray using given numpy.dtype.

as_int_scalar(a[, dtype])

Convert given \(a\) variable to numpy.integer using given numpy.dtype.

as_float_scalar(a[, dtype])

Convert given \(a\) variable to numpy.floating using given numpy.dtype.

set_default_int_dtype([dtype])

Set Colour default numpy.integer precision by setting colour.constant.DTYPE_INT_DEFAULT attribute with given numpy.dtype wherever the attribute is imported.

set_default_float_dtype([dtype])

Set Colour default numpy.floating precision by setting colour.constant.DTYPE_FLOAT_DEFAULT attribute with given numpy.dtype wherever the attribute is imported.

to_domain_1(a[, scale_factor, dtype])

Scale given array \(a\) to domain '1'.

to_domain_10(a[, scale_factor, dtype])

Scale given array \(a\) to domain '10', used by Munsell Renotation System.

to_domain_100(a[, scale_factor, dtype])

Scale given array \(a\) to domain '100'.

to_domain_degrees(a[, scale_factor, dtype])

Scale given array \(a\) to degrees domain.

to_domain_int(a[, bit_depth, dtype])

Scale given array \(a\) to int domain.

from_range_1(a[, scale_factor, dtype])

Scale given array \(a\) from range '1'.

from_range_10(a[, scale_factor, dtype])

Scale given array \(a\) from range '10', used by Munsell Renotation System.

from_range_100(a[, scale_factor, dtype])

Scale given array \(a\) from range '100'.

from_range_degrees(a[, scale_factor, dtype])

Scale given array \(a\) from degrees range.

from_range_int(a[, bit_depth, dtype])

Scale given array \(a\) from int range.

is_ndarray_copy_enabled()

Return whether Colour numpy.ndarray copy is enabled: Various API objects return a copy of their internal numpy.ndarray for safety purposes but this can be a slow operation impacting performance.

set_ndarray_copy_enable(enable)

Set Colour numpy.ndarray copy enabled state.

ndarray_copy_enable(enable)

Define a context manager and decorator temporarily setting Colour numpy.ndarray copy enabled state.

ndarray_copy(a)

Return a numpy.ndarray copy if the relevant Colour state is enabled: Various API objects return a copy of their internal numpy.ndarray for safety purposes but this can be a slow operation impacting performance.

closest_indexes(a, b)

Return the array \(a\) closest element indexes to the reference array \(b\) elements.

closest(a, b)

Return the closest array \(a\) elements to the reference array \(b\) elements.

interval(distribution[, unique])

Return the interval size of given distribution.

is_uniform(distribution)

Return whether given distribution is uniform.

has_only_nan(a)

Return whether given array \(a\) contains only NaN values.

in_array(a, b[, tolerance])

Return whether each element of the array \(a\) is also present in the array \(b\) within given tolerance.

tstack(a[, dtype])

Stack given array of arrays \(a\) along the last axis (tail) to produce a stacked array.

tsplit(a[, dtype])

Split given stacked array \(a\) along the last axis (tail) to produce an array of arrays.

row_as_diagonal(a)

Return the rows of given array \(a\) as diagonal matrices.

orient(a[, orientation])

Orient given array \(a\) according to given orientation.

centroid(a)

Return the centroid indexes of given array \(a\).

fill_nan(a[, method, default])

Fill given array \(a\) NaN values according to given method.

ndarray_write(a)

Define a context manager setting given array \(a\) writeable to operate one and then read-only.

zeros(shape[, dtype, order])

Wrap np.zeros() definition to create an array with the active numpy.dtype defined by the colour.constant.DTYPE_FLOAT_DEFAULT attribute.

ones(shape[, dtype, order])

Wrap np.ones() definition to create an array with the active numpy.dtype defined by the colour.constant.DTYPE_FLOAT_DEFAULT attribute.

full(shape, fill_value[, dtype, order])

Wrap np.full() definition to create an array with the active type defined by the:attr:colour.constant.DTYPE_FLOAT_DEFAULT attribute.

index_along_last_axis(a, indexes)

Reduce the dimension of array \(a\) by one, by using an array of indexes to pick elements off the last axis.

format_array_as_row(a[, decimals, separator])

Format given array \(a\) as a row.

Metrics#

colour.utilities

metric_mse(a, b[, axis])

Compute the mean squared error (MSE) or mean squared deviation (MSD) between given variables \(a\) and \(b\).

metric_psnr(a, b[, max_a, axis])

Compute the peak signal-to-noise ratio (PSNR) between given variables \(a\) and \(b\).

Data Structures#

colour.utilities

CanonicalMapping([data])

Implement a delimiter and case-insensitive dict-like object with support for slugs, i.e. SEO friendly and human-readable version of the keys but also canonical keys, i.e. slugified keys without delimiters.

LazyCanonicalMapping([data])

Implement a lazy delimiter and case-insensitive dict-like object inheriting from colour.utilities.CanonicalMapping class.

Lookup

Extend dict type to provide a lookup by value(s).

Node(*args, **kwargs)

Represent a basic node supporting the creation of basic node trees.

Structure(*args, **kwargs)

Define a dict-like object allowing to access key values using dot syntax.

Verbose#

colour.utilities

message_box(message[, width, padding, ...])

Print a message inside a box.

show_warning(message, category, filename, lineno)

Alternative warnings.showwarning() definition that allows traceback printing.

warning(*args, **kwargs)

Issue a warning.

filter_warnings([colour_runtime_warnings, ...])

Filter Colour and also optionally overall Python warnings.

suppress_warnings([colour_runtime_warnings, ...])

Define a context manager filtering Colour and also optionally overall Python warnings.

suppress_stdout()

Define a context manager and decorator temporarily suppressing standard output.

numpy_print_options(*args, **kwargs)

Define a context manager implementing context changes to Numpy print behaviour.

describe_environment([runtime_packages, ...])

Describe Colour running environment, i.e. interpreter, runtime and development packages.

multiline_str(object_, attributes[, ...])

Return a formatted string representation of the given object.

multiline_repr(object_, attributes[, ...])

Return an (almost) evaluable string representation of the given object.

Ancillary Objects

colour.utilities

ColourWarning

Define the base class of Colour warnings.

ColourUsageWarning

Define the base class of Colour usage warnings.

ColourRuntimeWarning

Define the base class of Colour runtime warnings.

Colour Volume#

Optimal Colour Stimuli - MacAdam Limits#

colour

is_within_macadam_limits(xyY[, illuminant, ...])

Return whether given CIE xyY colourspace array is within MacAdam limits of given illuminant.

OPTIMAL_COLOUR_STIMULI_ILLUMINANTS

Illuminants Optimal Colour Stimuli.

Mesh Volume#

colour

is_within_mesh_volume(points, mesh[, tolerance])

Return whether given points are within given mesh volume using Delaunay triangulation.

Pointer’s Gamut#

colour

is_within_pointer_gamut(XYZ[, tolerance])

Return whether given CIE XYZ tristimulus values are within Pointer's Gamut volume.

RGB Volume#

colour

RGB_colourspace_limits(colourspace)

Compute given RGB colourspace volume limits in CIE L*a*b* colourspace.

RGB_colourspace_pointer_gamut_coverage_MonteCarlo(...)

Return given RGB colourspace percentage coverage of Pointer's Gamut volume using Monte Carlo method.

RGB_colourspace_visible_spectrum_coverage_MonteCarlo(...)

Return given RGB colourspace percentage coverage of visible spectrum volume using Monte Carlo method.

RGB_colourspace_volume_MonteCarlo(colourspace)

Perform given RGB colourspace volume computation using Monte Carlo method and multiprocessing.

RGB_colourspace_volume_coverage_MonteCarlo(...)

Return given RGB colourspace percentage coverage of an arbitrary volume.

Rösch-MacAdam Colour solid - Visible Spectrum#

colour

is_within_visible_spectrum(XYZ[, cmfs, ...])

Return whether given CIE XYZ tristimulus values are within the visible spectrum volume, i.e. Rösch-MacAdam colour solid, for given colour matching functions and illuminant.

Ancillary Objects

colour.volume

generate_pulse_waves(bins[, pulse_order, ...])

Generate the pulse waves of given number of bins necessary to totally stimulate the colour matching functions and produce the Rösch-MacAdam colour solid.

XYZ_outer_surface([cmfs, illuminant, ...])

Generate the Rösch-MacAdam colour solid, i.e. CIE XYZ colourspace outer surface, for given colour matching functions using multi-spectral conversion of pulse waves to CIE XYZ tristimulus values.

solid_RoschMacAdam([cmfs, illuminant, ...])

Generate the Rösch-MacAdam colour solid, i.e. CIE XYZ colourspace outer surface, for given colour matching functions using multi-spectral conversion of pulse waves to CIE XYZ tristimulus values.

Indices and tables#

6 See Also#

6.1 Software#

Python

Go

.NET

Julia

Matlab & Octave

7 Code of Conduct#

The Code of Conduct, adapted from the Contributor Covenant 1.4, is available on the Code of Conduct page.

8 Contact & Social#

The Colour Developers can be reached via different means:

9 About#

Colour by Colour Developers
Copyright 2013 Colour Developers – colour-developers@colour-science.org
This software is released under terms of BSD-3-Clause: https://opensource.org/licenses/BSD-3-Clause