Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/colour-science/colour
Colour Science for Python
https://github.com/colour-science/colour
color color-science color-space color-spaces colorspace colorspaces colour colour-science colour-space colour-spaces colourspace colourspaces data dataset datasets python spectral-data spectral-dataset spectral-datasets
Last synced: 4 days ago
JSON representation
Colour Science for Python
- Host: GitHub
- URL: https://github.com/colour-science/colour
- Owner: colour-science
- License: bsd-3-clause
- Created: 2014-02-23T18:55:40.000Z (almost 11 years ago)
- Default Branch: develop
- Last Pushed: 2024-10-29T00:32:38.000Z (2 months ago)
- Last Synced: 2024-10-29T15:04:40.646Z (2 months ago)
- Topics: color, color-science, color-space, color-spaces, colorspace, colorspaces, colour, colour-science, colour-space, colour-spaces, colourspace, colourspaces, data, dataset, datasets, python, spectral-data, spectral-dataset, spectral-datasets
- Language: Python
- Homepage: https://www.colour-science.org
- Size: 124 MB
- Stars: 2,110
- Watchers: 87
- Forks: 261
- Open Issues: 87
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGES.rst
- Contributing: CONTRIBUTING.rst
- Funding: .github/funding.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- starred-awesome - colour - Colour Science for Python (Python)
README
.. begin-trim-long-description
.. raw:: html
.. end-trim-long-description
|
.. start-badges
|NumFOCUS| |actions| |coveralls| |codacy| |version| |zenodo|
.. |NumFOCUS| image:: https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat-square&colorA=E1523D&colorB=007D8A
:target: http://numfocus.org
:alt: Powered by NumFOCUS
.. |actions| image:: https://img.shields.io/github/actions/workflow/status/colour-science/colour/.github/workflows/continuous-integration-quality-unit-tests.yml?branch=develop&style=flat-square
:target: https://github.com/colour-science/colour/actions
:alt: Develop Build Status
.. |coveralls| image:: http://img.shields.io/coveralls/colour-science/colour/develop.svg?style=flat-square
:target: https://coveralls.io/r/colour-science/colour
:alt: Coverage Status
.. |codacy| image:: https://img.shields.io/codacy/grade/1f3b8d3bba7440ba9ebc1170589628b1/develop.svg?style=flat-square
:target: https://app.codacy.com/gh/colour-science/colour
:alt: Code Grade
.. |version| image:: https://img.shields.io/pypi/v/colour-science.svg?style=flat-square
:target: https://pypi.org/project/colour-science
:alt: Package Version
.. |zenodo| image:: https://img.shields.io/badge/DOI-10.5281/zenodo.13917514-blue.svg?style=flat-square
:target: https://dx.doi.org/10.5281/zenodo.13917514
:alt: DOI.. end-badges
`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... contents:: **Table of Contents**
:backlinks: none
:depth: 2.. sectnum::
Draft Release Notes
-------------------The draft release notes of 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 `__... begin-trim-long-description
.. raw:: html
Gold Sponsors
.. raw:: html
.. raw:: html
Silver Sponsors
.. raw:: html
.. raw:: html
Bronze Sponsors
.. raw:: html
.. raw:: html
Donations & Special Sponsors
.. raw:: html
.. end-trim-long-description
Features
--------Most of the objects are available from the ``colour`` namespace:
.. code-block:: python
import colour
Automatic Colour Conversion Graph - ``colour.graph``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.. 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.49034776, 0.30185875, 0.23587685]).. 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.25331034, 0.13765286, 0.01543185])
.. code-block:: python
sorted(colour.CHROMATIC_ADAPTATION_METHODS)
.. code-block:: text
['CIE 1994', 'CMCCAT2000', 'Fairchild 1990', 'Von Kries', 'Zhai 2018', 'vK20']
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.365010921125915, h=22.279164147957076, s=62.814855853327131, Q=177.47124941102123, M=70.024939419291385, H=2.689608534423904, HC=None)
.. code-block:: python
colour.XYZ_to_CIECAM16(XYZ, XYZ_w, L_A, Y_b)
.. code-block:: text
CAM_Specification_CIECAM16(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_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, Y_b)
.. code-block:: text
CAM_Specification_Hellwig2022(J=33.880368498111686, C=37.579419116276348, h=19.510887327451748, s=109.33343382561695, Q=45.34489577734751, M=49.577131618021212, H=399.52975599115319, HC=None, J_HK=39.41741758094139, Q_HK=52.755585941150315)
.. code-block:: python
colour.XYZ_to_Kim2009(XYZ, XYZ_w, L_A)
.. code-block:: text
CAM_Specification_Kim2009(J=19.879918542450937, C=55.83905525087696, h=22.013388165090031, s=112.9797935493912, Q=36.309026130161513, M=46.346415858227871, H=2.3543198369639753, 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.121389892085183, h=33.711578931095183, s=81.444585609489536, Q=76.986725284523772, M=42.403805833900513, H=0.45779200212217158, HC=None, V=43.623590687423551, K=43.20894953152817, W=34.829588380192149)
Colour Blindness - ``colour.blindness``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.. code-block:: python
import numpy as np
cmfs = colour.colorimetry.MSDS_CMFS_LMS["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.18147565, 0.08609354, 0.08569274])
.. 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([[ 360. , 6654.27827064],
[ 361. , 6709.60527925],
[ 362. , 6764.82512152],
...
[ 778. , 10606.80038243],
[ 779. , 10590.33272593],
[ 780. , 10573.85196369]],
SpragueInterpolator,
{},
Extrapolator,
{'method': 'Constant', 'left': None, 'right': 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.655527367198
.. 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',
'HyAB',
'HyCH',
'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)
Spectral Images - Fichet et al. (2021)
**************************************.. code-block:: python
components = colour.read_spectral_image_Fichet2021("Polarised.exr")
list(components.keys()).. code-block:: text
['S0', 'S1', 'S2', 'S3']
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',
'CIE XYZ-D65 - Scene-referred',
'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',
'F-Gamut C',
'FilmLight E-Gamut',
'Gamma 1.8 Encoded Rec.709',
'Gamma 2.2 Encoded AP1',
'Gamma 2.2 Encoded AdobeRGB',
'Gamma 2.2 Encoded Rec.709',
'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',
'Linear AdobeRGB',
'Linear P3-D65',
'Linear Rec.2020',
'Linear Rec.709 (sRGB)',
'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',
'g18_rec709_scene',
'g22_adobergb_scene',
'g22_ap1_scene',
'g22_rec709_scene',
'lin_adobergb_scene',
'lin_ap0_scene',
'lin_ap1_scene',
'lin_ciexyzd65_scene',
'lin_p3d65_scene',
'lin_rec2020_scene',
'lin_rec709_scene',
'prophoto',
'sRGB',
'sRGB Encoded AP1',
'sRGB Encoded P3-D65',
'sRGB Encoded Rec.709 (sRGB)',
'srgb_ap1_scene',
'srgb_p3d65_scene',
'srgb_rec709_scene']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',
'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']CCTFs Encoding / Decoding
*************************.. code-block:: python
sorted(colour.CCTF_ENCODINGS)
.. code-block:: text
['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']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.sd_rayleigh_scattering()
.. code-block:: text
SpectralDistribution([[ 3.60000000e+02, 5.60246579e-01],
[ 3.61000000e+02, 5.53748137e-01],
[ 3.62000000e+02, 5.47344692e-01],
...
[ 7.78000000e+02, 2.37790178e-02],
[ 7.79000000e+02, 2.36559421e-02],
[ 7.80000000e+02, 2.35336632e-02]],
SpragueInterpolator,
{},
Extrapolator,
{'method': 'Constant', 'left': None, 'right': None})Light Quality - ``colour.quality``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Colour Fidelity Index
*********************.. code-block:: python
colour.colour_fidelity_index(colour.SDS_ILLUMINANTS["FL2"])
.. code-block:: text
70.120824401428848
.. 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.111822015662824
.. 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.233724121664793
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.52694330e-02],
[ 3.65000000e+02, 8.52203359e-02],
[ 3.70000000e+02, 8.52841304e-02],
...
[ 7.70000000e+02, 4.46546872e-01],
[ 7.75000000e+02, 4.46638451e-01],
[ 7.80000000e+02, 4.46641739e-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.04378461e-03, 9.21260449e-03,
-7.64080878e-03],
[ 4.10000000e+02, -8.76715607e-03, 1.12726694e-02,
6.37434190e-03],
[ 4.20000000e+02, 4.58126856e-02, 7.18000418e-02,
4.00001696e-01],
...
[ 6.80000000e+02, 4.00195568e-02, 5.55512389e-03,
1.36794925e-03],
[ 6.90000000e+02, -4.32240535e-03, 2.49731193e-03,
3.80303275e-04],
[ 7.00000000e+02, -6.00395414e-03, 1.54678227e-03,
5.40394352e-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.50747479e+03, 3.22334634e-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 issuing this command in a shell:.. code-block:: bash
$ pip install --user colour-science
The detailed installation procedure for the secondary dependencies is
described in the `Installation Guide `__.**Colour** is also available for `Anaconda `__
from *Continuum Analytics* via `conda-forge `__:.. code-block:: bash
$ conda install -c conda-forge colour-science
Tutorial
~~~~~~~~The `static tutorial `__
provides an introduction to **Colour**. An interactive version is available via
`Google Colab `__.How-To
~~~~~~The `Google Colab How-To `__
guide for **Colour** shows various techniques to solve specific problems and
highlights some interesting use cases.Contributing
~~~~~~~~~~~~If you would like to contribute to **Colour**, please refer to the following
`Contributing `__ guide.Changes
~~~~~~~The changes are viewable on the `Releases `__ page.
Bibliography
~~~~~~~~~~~~The bibliography is available on the `Bibliography `__ page.
It is also viewable directly from the repository in
`BibTeX `__
format.API Reference
-------------The main technical reference for **Colour** is the *API Reference*:
- `Release `__
- `Develop `__See Also
--------Software
~~~~~~~~**Python**
- `ColorAide `__ by Muse, I.
- `ColorPy `__ 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 `__
- `X `__
- `Bluesky `__.. begin-trim-long-description
Thank You!
----------.. raw:: html
Coffee Sponsors
.. raw:: html
.. end-trim-long-description
About
-----| **Colour** by Colour Developers
| Copyright 2013 Colour Developers β `[email protected] `__
| This software is released under terms of BSD-3-Clause: https://opensource.org/licenses/BSD-3-Clause
| `https://github.com/colour-science/colour `__