.. raw:: html
|
`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.
.. sectnum::
Draft Release Notes
-------------------
The draft release notes from the
`develop `__
branch are available at this
`url `__.
Sponsors
--------
We are grateful for the support of our
`sponsors `__.
If you'd like to join them, please consider
`becoming a sponsor on OpenCollective `__.
Features
--------
Most of the objects are available from the ``colour`` namespace:
.. code-block:: python
import colour
Automatic Colour Conversion Graph - ``colour.graph``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Starting with version *0.3.14*, **Colour** implements an automatic colour
conversion graph enabling easier colour conversions.
.. image:: https://colour.readthedocs.io/en/develop/_static/Examples_Colour_Automatic_Conversion_Graph.png
.. code-block:: python
sd = colour.SDS_COLOURCHECKERS["ColorChecker N Ohta"]["dark skin"]
colour.convert(sd, "Spectral Distribution", "sRGB", verbose={"mode": "Short"})
.. code-block:: text
===============================================================================
* *
* [ Conversion Path ] *
* *
* "sd_to_XYZ" --> "XYZ_to_sRGB" *
* *
===============================================================================
array([ 0.45675795, 0.30986982, 0.24861924])
.. code-block:: python
illuminant = colour.SDS_ILLUMINANTS["FL2"]
colour.convert(
sd,
"Spectral Distribution",
"sRGB",
sd_to_XYZ={"illuminant": illuminant},
)
.. code-block:: text
array([ 0.47924575, 0.31676968, 0.17362725])
Chromatic Adaptation - ``colour.adaptation``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
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))
.. code-block:: text
array([ 0.2533053 , 0.13765138, 0.01543307])
.. code-block:: python
sorted(colour.CHROMATIC_ADAPTATION_METHODS)
.. code-block:: text
['CIE 1994', 'CMCCAT2000', 'Fairchild 1990', 'Von Kries', 'Zhai 2018']
Algebra - ``colour.algebra``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kernel Interpolation
********************
.. code-block:: python
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])
.. code-block:: text
array([ 6.18062083, 8.08238488, 57.85783403])
Sprague (1880) Interpolation
****************************
.. code-block:: python
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])
.. code-block:: text
array([ 6.72951612, 7.81406251, 43.77379185])
Colour Appearance Models - ``colour.appearance``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
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)
.. code-block:: text
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)
.. code-block:: python
colour.XYZ_to_CIECAM16(XYZ, XYZ_w, L_A, Y_b)
.. code-block:: text
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)
.. code-block:: python
colour.XYZ_to_CAM16(XYZ, XYZ_w, L_A, Y_b)
.. code-block:: text
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)
.. code-block:: python
colour.XYZ_to_Hellwig2022(XYZ, XYZ_w, L_A)
.. code-block:: text
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)
.. code-block:: python
colour.XYZ_to_Kim2009(XYZ, XYZ_w, L_A)
.. code-block:: text
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)
.. code-block:: python
colour.XYZ_to_ZCAM(XYZ, XYZ_w, L_A, Y_b)
.. code-block:: text
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)
Colour Blindness - ``colour.blindness``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
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]
.. code-block:: text
array([ 0.08912884, 0.0870524 , 0.955393 ])
.. code-block:: python
primaries = colour.MSDS_DISPLAY_PRIMARIES["Apple Studio Display"]
d_LMS = (15, 0, 0)
colour.matrix_anomalous_trichromacy_Machado2009(cmfs, primaries, d_LMS)
.. code-block:: text
array([[-0.27774652, 2.65150084, -1.37375432],
[ 0.27189369, 0.20047862, 0.52762768],
[ 0.00644047, 0.25921579, 0.73434374]])
Colour Correction - ``colour characterisation``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
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)
.. code-block:: text
array([ 0.1806237 , 0.07234791, 0.07848845])
.. code-block:: python
sorted(colour.COLOUR_CORRECTION_METHODS)
.. code-block:: text
['Cheung 2004', 'Finlayson 2015', 'Vandermonde']
ACES Input Transform - ``colour characterisation``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
sensitivities = colour.MSDS_CAMERA_SENSITIVITIES["Nikon 5100 (NPL)"]
illuminant = colour.SDS_ILLUMINANTS["D55"]
colour.matrix_idt(sensitivities, illuminant)
.. code-block:: text
(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]))
Colorimetry - ``colour.colorimetry``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Spectral Computations
*********************
.. code-block:: python
colour.sd_to_XYZ(colour.SDS_LIGHT_SOURCES["Neodimium Incandescent"])
.. code-block:: text
array([ 36.94726204, 32.62076174, 13.0143849 ])
.. code-block:: python
sorted(colour.SPECTRAL_TO_XYZ_METHODS)
.. code-block:: text
['ASTM E308', 'Integration', 'astm2015']
Multi-Spectral Computations
***************************
.. code-block:: python
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),
)
.. code-block:: text
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]]])
.. code-block:: python
sorted(colour.MSDS_TO_XYZ_METHODS)
.. code-block:: text
['ASTM E308', 'Integration', 'astm2015']
Blackbody Spectral Radiance Computation
***************************************
.. code-block:: python
colour.sd_blackbody(5000)
.. code-block:: text
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})
Dominant, Complementary Wavelength & Colour Purity Computation
**************************************************************
.. code-block:: python
xy = [0.54369557, 0.32107944]
xy_n = [0.31270000, 0.32900000]
colour.dominant_wavelength(xy, xy_n)
.. code-block:: text
(array(616.0),
array([ 0.68354746, 0.31628409]),
array([ 0.68354746, 0.31628409]))
Lightness Computation
*********************
.. code-block:: python
colour.lightness(12.19722535)
.. code-block:: text
41.527875844653451
.. code-block:: python
sorted(colour.LIGHTNESS_METHODS)
.. code-block:: text
['Abebe 2017',
'CIE 1976',
'Fairchild 2010',
'Fairchild 2011',
'Glasser 1958',
'Lstar1976',
'Wyszecki 1963']
Luminance Computation
*********************
.. code-block:: python
colour.luminance(41.52787585)
.. code-block:: text
12.197225353400775
.. code-block:: python
sorted(colour.LUMINANCE_METHODS)
.. code-block:: text
['ASTM D1535',
'CIE 1976',
'Fairchild 2010',
'Fairchild 2011',
'Newhall 1943',
'astm2008',
'cie1976']
Whiteness Computation
*********************
.. code-block:: python
XYZ = [95.00000000, 100.00000000, 105.00000000]
XYZ_0 = [94.80966767, 100.00000000, 107.30513595]
colour.whiteness(XYZ, XYZ_0)
.. code-block:: text
array([ 93.756 , -1.33000001])
.. code-block:: python
sorted(colour.WHITENESS_METHODS)
.. code-block:: text
['ASTM E313',
'Berger 1959',
'CIE 2004',
'Ganz 1979',
'Stensby 1968',
'Taube 1960',
'cie2004']
Yellowness Computation
**********************
.. code-block:: python
XYZ = [95.00000000, 100.00000000, 105.00000000]
colour.yellowness(XYZ)
.. code-block:: text
4.3400000000000034
.. code-block:: python
sorted(colour.YELLOWNESS_METHODS)
.. code-block:: text
['ASTM D1925', 'ASTM E313', 'ASTM E313 Alternative']
Luminous Flux, Efficiency & Efficacy Computation
************************************************
.. code-block:: python
sd = colour.SDS_LIGHT_SOURCES["Neodimium Incandescent"]
colour.luminous_flux(sd)
.. code-block:: text
23807.655527367202
.. code-block:: python
sd = colour.SDS_LIGHT_SOURCES["Neodimium Incandescent"]
colour.luminous_efficiency(sd)
.. code-block:: text
0.19943935624521045
.. code-block:: python
sd = colour.SDS_LIGHT_SOURCES["Neodimium Incandescent"]
colour.luminous_efficacy(sd)
.. code-block:: text
136.21708031547874
Contrast Sensitivity Function - ``colour.contrast``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
colour.contrast_sensitivity_function(u=4, X_0=60, E=65)
.. code-block:: text
358.51180789884984
.. code-block:: python
sorted(colour.CONTRAST_SENSITIVITY_METHODS)
.. code-block:: text
['Barten 1999']
Colour Difference - ``colour.difference``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
Lab_1 = [100.00000000, 21.57210357, 272.22819350]
Lab_2 = [100.00000000, 426.67945353, 72.39590835]
colour.delta_E(Lab_1, Lab_2)
.. code-block:: text
94.035649026659485
.. code-block:: python
sorted(colour.DELTA_E_METHODS)
.. code-block:: text
['CAM02-LCD',
'CAM02-SCD',
'CAM02-UCS',
'CAM16-LCD',
'CAM16-SCD',
'CAM16-UCS',
'CIE 1976',
'CIE 1994',
'CIE 2000',
'CMC',
'DIN99',
'ITP',
'cie1976',
'cie1994',
'cie2000']
IO - ``colour.io``
~~~~~~~~~~~~~~~~~~
Images
******
.. code-block:: python
RGB = colour.read_image("Ishihara_Colour_Blindness_Test_Plate_3.png")
RGB.shape
.. code-block:: text
(276, 281, 3)
Look Up Table (LUT) Data
************************
.. code-block:: python
LUT = colour.read_LUT("ACES_Proxy_10_to_ACES.cube")
print(LUT)
.. code-block:: text
LUT3x1D - ACES Proxy 10 to ACES
-------------------------------
Dimensions : 2
Domain : [[0 0 0]
[1 1 1]]
Size : (32, 3)
.. code-block:: python
RGB = [0.17224810, 0.09170660, 0.06416938]
LUT.apply(RGB)
.. code-block:: text
array([ 0.00575674, 0.00181493, 0.00121419])
Colour Models - ``colour.models``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CIE xyY Colourspace
*******************
.. code-block:: python
colour.XYZ_to_xyY([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 0.54369557, 0.32107944, 0.12197225])
CIE L*a*b* Colourspace
**********************
.. code-block:: python
colour.XYZ_to_Lab([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 41.52787529, 52.63858304, 26.92317922])
CIE L*u*v* Colourspace
**********************
.. code-block:: python
colour.XYZ_to_Luv([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 41.52787529, 96.83626054, 17.75210149])
CIE 1960 UCS Colourspace
************************
.. code-block:: python
colour.XYZ_to_UCS([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 0.13769339, 0.12197225, 0.1053731 ])
CIE 1964 U*V*W* Colourspace
***************************
.. code-block:: python
XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
colour.XYZ_to_UVW(XYZ)
.. code-block:: text
array([ 94.55035725, 11.55536523, 40.54757405])
CAM02-LCD, CAM02-SCD, and CAM02-UCS Colourspaces - Luo, Cui and Li (2006)
*************************************************************************
.. code-block:: python
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)
.. code-block:: text
array([ 47.16899898, 38.72623785, 15.8663383 ])
.. code-block:: python
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)
.. code-block:: text
array([ 47.16899898, 38.72623785, 15.8663383 ])
CAM16-LCD, CAM16-SCD, and CAM16-UCS Colourspaces - Li et al. (2017)
*******************************************************************
.. code-block:: python
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)
.. code-block:: text
array([ 46.55542238, 40.22460974, 14.25288392])
.. code-block:: python
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)
.. code-block:: text
array([ 46.55542238, 40.22460974, 14.25288392])
DIN99 Colourspace and DIN99b, DIN99c, DIN99d Refined Formulas
*************************************************************
.. code-block:: python
Lab = [41.52787529, 52.63858304, 26.92317922]
colour.Lab_to_DIN99(Lab)
.. code-block:: text
array([ 53.22821988, 28.41634656, 3.89839552])
ICaCb Colourspace
******************
.. code-block:: python
XYZ_to_ICaCb(np.array([0.20654008, 0.12197225, 0.05136952]))
.. code-block:: text
array([ 0.06875297, 0.05753352, 0.02081548])
IgPgTg Colourspace
******************
.. code-block:: python
colour.XYZ_to_IgPgTg([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 0.42421258, 0.18632491, 0.10689223])
IPT Colourspace
***************
.. code-block:: python
colour.XYZ_to_IPT([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 0.38426191, 0.38487306, 0.18886838])
Jzazbz Colourspace
******************
.. code-block:: python
colour.XYZ_to_Jzazbz([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 0.00535048, 0.00924302, 0.00526007])
hdr-CIELAB Colourspace
**********************
.. code-block:: python
colour.XYZ_to_hdr_CIELab([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 51.87002062, 60.4763385 , 32.14551912])
hdr-IPT Colourspace
*******************
.. code-block:: python
colour.XYZ_to_hdr_IPT([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 25.18261761, -22.62111297, 3.18511729])
Hunter L,a,b Colour Scale
*************************
.. code-block:: python
XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
colour.XYZ_to_Hunter_Lab(XYZ)
.. code-block:: text
array([ 34.92452577, 47.06189858, 14.38615107])
Hunter Rd,a,b Colour Scale
**************************
.. code-block:: python
XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
colour.XYZ_to_Hunter_Rdab(XYZ)
.. code-block:: text
array([ 12.197225 , 57.12537874, 17.46241341])
Oklab Colourspace
*****************
.. code-block:: python
colour.XYZ_to_Oklab([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 0.51634019, 0.154695 , 0.06289579])
OSA UCS Colourspace
*******************
.. code-block:: python
XYZ = [0.20654008 * 100, 0.12197225 * 100, 0.05136952 * 100]
colour.XYZ_to_OSA_UCS(XYZ)
.. code-block:: text
array([-3.0049979 , 2.99713697, -9.66784231])
ProLab Colourspace
******************
.. code-block:: python
colour.XYZ_to_ProLab([0.51634019, 0.15469500, 0.06289579])
.. code-block:: text
array([1.24610688, 2.39525236, 0.41902126])
Ragoo and Farup (2021) Optimised IPT Colourspace
************************************************
.. code-block:: python
colour.XYZ_to_IPT_Ragoo2021([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 0.42248243, 0.2910514 , 0.20410663])
Yrg Colourspace - Kirk (2019)
*****************************
.. code-block:: python
colour.XYZ_to_Yrg([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
array([ 0.13137801, 0.49037645, 0.37777388])
Y'CbCr Colour Encoding
**********************
.. code-block:: python
colour.RGB_to_YCbCr([1.0, 1.0, 1.0])
.. code-block:: text
array([ 0.92156863, 0.50196078, 0.50196078])
YCoCg Colour Encoding
*********************
.. code-block:: python
colour.RGB_to_YCoCg([0.75, 0.75, 0.0])
.. code-block:: text
array([ 0.5625, 0.375 , 0.1875])
ICtCp Colour Encoding
*********************
.. code-block:: python
colour.RGB_to_ICtCp([0.45620519, 0.03081071, 0.04091952])
.. code-block:: text
array([ 0.07351364, 0.00475253, 0.09351596])
HSV Colourspace
***************
.. code-block:: python
colour.RGB_to_HSV([0.45620519, 0.03081071, 0.04091952])
.. code-block:: text
array([ 0.99603944, 0.93246304, 0.45620519])
IHLS Colourspace
****************
.. code-block:: python
colour.RGB_to_IHLS([0.45620519, 0.03081071, 0.04091952])
.. code-block:: text
array([ 6.26236117, 0.12197943, 0.42539448])
Prismatic Colourspace
*********************
.. code-block:: python
colour.RGB_to_Prismatic([0.25, 0.50, 0.75])
.. code-block:: text
array([ 0.75 , 0.16666667, 0.33333333, 0.5 ])
RGB Colourspace and Transformations
***********************************
.. code-block:: python
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,
)
.. code-block:: text
array([ 0.45595571, 0.03039702, 0.04087245])
RGB Colourspace Derivation
**************************
.. code-block:: python
p = [0.73470, 0.26530, 0.00000, 1.00000, 0.00010, -0.07700]
w = [0.32168, 0.33767]
colour.normalised_primary_matrix(p, w)
.. code-block:: text
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]])
RGB Colourspaces
****************
.. code-block:: python
sorted(colour.RGB_COLOURSPACES)
.. code-block:: text
['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']
OETFs
*****
.. code-block:: python
sorted(colour.OETFS)
.. code-block:: text
['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']
EOTFs
*****
.. code-block:: python
sorted(colour.EOTFS)
.. code-block:: text
['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']
OOTFs
*****
.. code-block:: python
sorted(colour.OOTFS)
.. code-block:: text
['ITU-R BT.2100 HLG', 'ITU-R BT.2100 PQ']
Log Encoding / Decoding
***********************
.. code-block:: python
sorted(colour.LOG_ENCODINGS)
.. code-block:: text
['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']
CCTFs Encoding / Decoding
*************************
.. code-block:: python
sorted(colour.CCTF_ENCODINGS)
.. code-block:: text
['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']
Recommendation ITU-T H.273 Code points for Video Signal Type Identification
***************************************************************************
.. code-block:: python
colour.COLOUR_PRIMARIES_ITUTH273.keys()
.. code-block:: text
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 22, 23])
.. code-block:: python
colour.models.describe_video_signal_colour_primaries(1)
.. code-block:: text
===============================================================================
* *
* 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'] *
* *
===============================================================================
.. code-block:: python
colour.TRANSFER_CHARACTERISTICS_ITUTH273.keys()
.. code-block:: text
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
.. code-block:: python
colour.models.describe_video_signal_transfer_characteristics(1)
.. code-block:: text
===============================================================================
* *
* Transfer Characteristics: 1 *
* --------------------------- *
* *
* Function : *
* FFmpeg Constants : ['AVCOL_TRC_BT709', 'BT709'] *
* *
===============================================================================
.. code-block:: python
colour.MATRIX_COEFFICIENTS_ITUTH273.keys()
.. code-block:: text
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
.. code-block:: python
colour.models.describe_video_signal_matrix_coefficients(1)
.. code-block:: text
===============================================================================
* *
* Matrix Coefficients: 1 *
* ---------------------- *
* *
* Matrix Coefficients : [ 0.2126 0.0722] *
* FFmpeg Constants : ['AVCOL_SPC_BT709', 'BT709'] *
* *
===============================================================================
Colour Notation Systems - ``colour.notation``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Munsell Value
*************
.. code-block:: python
colour.munsell_value(12.23634268)
.. code-block:: text
4.0824437076525664
.. code-block:: python
sorted(colour.MUNSELL_VALUE_METHODS)
.. code-block:: text
['ASTM D1535',
'Ladd 1955',
'McCamy 1987',
'Moon 1943',
'Munsell 1933',
'Priest 1920',
'Saunderson 1944',
'astm2008']
Munsell Colour
**************
.. code-block:: python
colour.xyY_to_munsell_colour([0.38736945, 0.35751656, 0.59362000])
.. code-block:: text
'4.2YR 8.1/5.3'
.. code-block:: python
colour.munsell_colour_to_xyY("4.2YR 8.1/5.3")
.. code-block:: text
array([ 0.38736945, 0.35751656, 0.59362 ])
Optical Phenomena - ``colour.phenomena``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
colour.rayleigh_scattering_sd()
.. code-block:: text
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})
Light Quality - ``colour.quality``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Colour Fidelity Index
*********************
.. code-block:: python
colour.colour_fidelity_index(colour.SDS_ILLUMINANTS["FL2"])
.. code-block:: text
70.120825477833037
.. code-block:: python
sorted(colour.COLOUR_FIDELITY_INDEX_METHODS)
.. code-block:: text
['ANSI/IES TM-30-18', 'CIE 2017']
Colour Quality Scale
********************
.. code-block:: python
colour.colour_quality_scale(colour.SDS_ILLUMINANTS["FL2"])
.. code-block:: text
64.111703163816699
.. code-block:: python
sorted(colour.COLOUR_QUALITY_SCALE_METHODS)
.. code-block:: text
['NIST CQS 7.4', 'NIST CQS 9.0']
Colour Rendering Index
**********************
.. code-block:: python
colour.colour_rendering_index(colour.SDS_ILLUMINANTS["FL2"])
.. code-block:: text
64.233724121664807
Academy Spectral Similarity Index (SSI)
***************************************
.. code-block:: python
colour.spectral_similarity_index(
colour.SDS_ILLUMINANTS["C"], colour.SDS_ILLUMINANTS["D65"]
)
.. code-block:: text
94.0
Spectral Up-Sampling & Recovery - ``colour.recovery``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Reflectance Recovery
********************
.. code-block:: python
colour.XYZ_to_sd([0.20654008, 0.12197225, 0.05136952])
.. code-block:: text
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})
.. code-block:: python
sorted(colour.REFLECTANCE_RECOVERY_METHODS)
.. code-block:: text
['Jakob 2019', 'Mallett 2019', 'Meng 2015', 'Otsu 2018', 'Smits 1999']
Camera RGB Sensitivities Recovery
*********************************
.. code-block:: python
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,
)
.. code-block:: text
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})
Correlated Colour Temperature Computation Methods - ``colour.temperature``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
colour.uv_to_CCT([0.1978, 0.3122])
.. code-block:: text
array([ 6.50751282e+03, 3.22335875e-03])
.. code-block:: python
sorted(colour.UV_TO_CCT_METHODS)
.. code-block:: text
['Krystek 1985', 'Ohno 2013', 'Planck 1900', 'Robertson 1968', 'ohno2013', 'robertson1968']
.. code-block:: python
sorted(colour.XY_TO_CCT_METHODS)
.. code-block:: text
['CIE Illuminant D Series',
'Hernandez 1999',
'Kang 2002',
'McCamy 1992',
'daylight',
'hernandez1999',
'kang2002',
'mccamy1992']
Colour Volume - ``colour.volume``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
colour.RGB_colourspace_volume_MonteCarlo(colour.RGB_COLOURSPACE_RGB["sRGB"])
.. code-block:: text
821958.30000000005
Geometry Primitives Generation - ``colour.geometry``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
colour.primitive("Grid")
.. code-block:: text
(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', '`__ by Kness, M.
- `Colorspacious `__ by Smith, N. J., et al.
- `python-colormath `__ by Taylor, G., et al.
**Go**
- `go-colorful `__ by Beyer, L., et al.
**.NET**
- `Colourful `__ by Pažourek, T., et al.
**Julia**
- `Colors.jl `__ by Holy, T., et al.
**Matlab & Octave**
- `COLORLAB `__ by Malo, J., et al.
- `Psychtoolbox `__ by Brainard, D., et al.
- `The Munsell and Kubelka-Munk Toolbox `__ by Centore, P.
Code of Conduct
---------------
The *Code of Conduct*, adapted from the `Contributor Covenant 1.4 `__,
is available on the `Code of Conduct `__ page.
Contact & Social
----------------
The *Colour Developers* can be reached via different means:
- `Email `__
- `Facebook `__
- `Github Discussions `__
- `Gitter `__
- `Twitter `__
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
| `https://github.com/colour-science/colour `__