Releases: colour-science/colour
Colour 0.4.7
Colour 0.4.7 - Alpha Milestone
Features
Dependencies
- Support for Python 3.14 was implemented. (#1379, @ KelSolaar)
- scipy has been made optional.
- imageio has been made optional.
- typing-extensions requirement has been dropped.
The following scientific packages minimum versions are required:
- numpy >= 2.0.0
- scipy >= 1.13.0
- matplotlib >= 3.9
- networkx >= 3.3
- pandas >= 2.2
Documentation
- Each documented object has been verified and processed with a LLM to improve consistency and correct typos and mistakes. (#1352, #1357, @KelSolaar, Claude Code)
colour.adaptation
- Implement support for Li (2025) chromatic adaptation transform with
colour.chromatic_adaptation_Li2025definition. (#1349, #1356, @UltraMo114, @KelSolaar, Claude Code)
colour.appearance
- Implement support for sCAM colour appearance model with
colour.XYZ_to_sCAMandcolour.sCAM_to_XYZdefinitions. (#1349, #1356, @UltraMo114, @KelSolaar, Claude Code)
colour.io
- The
colour.LUT3D.invertmethod has been improved and yields smoother results via Shepard interpolation and iterative adaptive smoothing. (54637c4, @KelSolaar, Claude Code)
colour.difference
- Implement support for Metamerism Index computation with
colour.difference.Lab_to_metamerism_indexandcolour.difference.XYZ_to_metamerism_indexdefinitions. (#1374, @lassefschmidt)
colour.models
-
Implement support for sUCS colour space model with
colour.XYZ_to_sUCS,colour.sUCS_to_XYZ,colour.models.sUCS_Iab_to_sUCS_IChandcolour.models.sUCS_ICh_to_sUCS_Iabdefinitions. (#1349, #1356, @UltraMo114, @KelSolaar, Claude Code) -
Implement Color Interop Forum recommendation for ColorSpace Encodings for Texture Assets and CG Rendering. (#1316, @KelSolaar)
The following RGB colourspaces were added:
colour.models.RGB_COLOURSPACE_LIN_REC709_SCENEcolour.models.RGB_COLOURSPACE_LIN_P3D65_SCENEcolour.models.RGB_COLOURSPACE_LIN_REC2020_SCENEcolour.models.RGB_COLOURSPACE_LIN_ADOBERGB_SCENEcolour.models.RGB_COLOURSPACE_LIN_CIEXYZD65_SCENEcolour.models.RGB_COLOURSPACE_SRGB_REC709_SCENEcolour.models.RGB_COLOURSPACE_G22_REC709_SCENEcolour.models.RGB_COLOURSPACE_G18_REC709_SCENEcolour.models.RGB_COLOURSPACE_SRGB_AP1_SCENEcolour.models.RGB_COLOURSPACE_G22_AP1_SCENEcolour.models.RGB_COLOURSPACE_SRGB_P3D65_SCENEcolour.models.RGB_COLOURSPACE_G22_ADOBERGB_SCENE
The following aliases were added:
-
lin_ap1_scene -
lin_ap0_scene -
lin_rec709_scene -
lin_p3d65_scene -
lin_rec2020_scene -
lin_adobergb_scene -
lin_ciexyzd65_scene -
srgb_rec709_scene -
g22_rec709_scene -
g18_rec709_scene -
srgb_ap1_scene -
g22_ap1_scene -
srgb_p3d65_scene -
g22_adobergb_scene -
Implement support for Filmlight E-Gamut 2 RGB colourspace with
colour.models.RGB_COLOURSPACE_FILMLIGHT_E_GAMUT_2attribute. (#1323, @nick-shaw) -
Implement support for Fujifilm F-Gamut C RGB colourspace with
colour.models.RGB_COLOURSPACE_F_GAMUT_Cattribute. (#1317, @KelSolaar) -
Implement support for Xiaomi Mi-Log Profile with
colour.models.log_encoding_MiLogandcolour.models.log_decoding_MiLogdefinitions. (#1359, @KelSolaar, Claude Code) -
Implement Schlömer (2019) improved OSA-UCS to CIE XYZ conversion: This reduced failure cases significantly and brought x28.5 increased performance. (#1372, @KelSolaar, Claude Code)
colour.phenomena
- Implement support for the Transfer Matrix Method: The main definition is
colour.phenomena.matrix_transfer_tmmthat computes transfer matrices for multilayer thin film structures with full vectorisation across wavelength, angle and thickness. (#1366, @KelSolaar, Claude Code)
The colour.phenomena.thin_film_tmm and colour.phenomena.multilayer_tmm definitions compute thin film and multilayer reflectance / transmittance respectively.
colour.phenomena.snell_lawcolour.phenomena.polarised_light_magnitude_elementscolour.phenomena.polarised_light_reflection_amplitudecolour.phenomena.polarised_light_reflection_coefficientcolour.phenomena.polarised_light_transmission_amplitudecolour.phenomena.polarised_light_transmission_coefficientcolour.phenomena.TransferMatrixResultcolour.phenomena.matrix_transfer_tmmcolour.phenomena.light_water_molar_refraction_Schiebener1990colour.phenomena.light_water_refractive_index_Schiebener1990colour.phenomena.thin_film_tmmcolour.phenomena.multilayer_tmm
New plotting definitions were added, most notable ones being colour.plotting.plot_thin_film_iridescence, colour.plotting.plot_thin_film_reflectance_map and colour.plotting.plot_multi_layer_stack.
colour.plotting.plot_single_layer_thin_filmcolour.plotting.plot_multi_layer_thin_filmcolour.plotting.plot_thin_film_comparisoncolour.plotting.plot_thin_film_spectrumcolour.plotting.plot_thin_film_iridescencecolour.plotting.plot_thin_film_reflectance_mapcolour.plotting.plot_multi_layer_stack
colour.quality
- Implement support for Spectral radiance factors of test-colour sample #15 of the Japanese skin complexion, 5nm wavelength steps. (#1337, @cmuellner, @KelSolaar)
- The
colour.spectral_similarity_indexdefinition now also supportscolour.MultiSpectralDistributionsas parameters. (#1373, #1370, @KelSolaar)
colour.utilities
Introduce a metadata system for documenting expected input/output value ranges in function signatures using Annotated type hints. Functions now declare scale information (e.g., [0, 1], [0, 100], [0, 360]) directly in their type annotations. (#1371, @KelSolaar)
Type Aliases for Common Scales
def XYZ_to_Lab(XYZ: Domain1) -> Range100: # Domain [0, 1], Range [0, 100]
...
def Lab_to_LCHab(Lab: Domain100_100_360) -> Range100_100_360: # Tuple scales
...Metadata Extraction
from colour.utilities import get_domain_range_scale_metadata
metadata = get_domain_range_scale_metadata(XYZ_to_Lab)
# {'domain': {'XYZ': 1}, 'range': 100}Automatic Scaling in Automatic Colour Conversion Graph
Lab = convert(XYZ, "CIE XYZ", "CIE Lab", to_reference_scale=True) # Returns Lab in [0, 100]
XYZ = convert(Lab_native, "CIE Lab", "CIE XYZ", from_reference_scale=True) # Accepts Lab in [0, 100]Performance
Import Time
- scipy has been made optional to reduce import times. (#1375, #1376, @KelSolaar)
colour.algebra
- Optimise
colour.algebra.table_interpolation_trilinearandcolour.algebra.table_interpolation_tetrahedraldefinitions for 1.3x performance improvement. (b8e1583, @KelSolaar, Claude Code)
colour.temperature
- Vectorise
colour.temperature.uv_to_CCT_Robertson1968andcolour.temperature.CCT_to_uv_Robertson1968definitions for 30x and 90x performance improvement. (#1367, @KelSolaar, Claude Code)
Fixes
colour.utilities
- Ensure that
colour.utilities.tsplitdefinition returns a contiguous copy of the input array. (9ba813d, @KelSolaar)
Changes
colour.algebra
- The
colour.algebra.sdiv_modecontext manager andcolour.algebra.sdivdefinition and other related objects now support two new modes:Replace With Epsilon: Zero-division is avoided by replacing zero denominators with the machine epsilon value from :attr:colour.constants.EPSILON.Warning Replace With Epsilon: Zero-division is avoided by replacing zero denominators with the machine epsilon value from :attr:colour.constants.EPSILONwith a warning.
colour.colorimetry
- The
colour.SpectralDistribution.interpolatedefinition has been updated to handle fractional wavelengths better. (#1328, @KelSolaar)- Numerical differences are expected if any of the following definitions were used with fractional wavelengths:
colour.SpectralDistribution.interpolatecolour.SpectralDistribution.aligncolour.MultiSpectralDistributions.interpolatecolour.MultiSpectralDistributions.aligncolour.colorimetry.reshape_sdcolour.colorimetry.reshape_msds
- Numerical differences are expected if any of the following definitions were used with fractional wavelengths:
colour.models
| Object | Name | Author |
|---|---|---|
colour.IPT_hue_angle |
colour.models.IPT_hue_angle |
@KelSolaar |
Colour 0.4.6
Colour 0.4.6 - Alpha Milestone
Fixes
Dependencies
- trimesh was incorrectly added as a required dependency during the uv migration. (4649c11, @KelSolaar)
colour.models
- Revert c25934e which incorrectly changed Canon Cinema Gamut whitepoint to D55. (92dcd6d, @KelSolaar)
Colour 0.4.5
Colour 0.4.5 - Alpha Milestone
Features
Dependencies
- Support for Python 3.13 was implemented. (#1302, @ KelSolaar)
- Support for Numpy 2 was implemented. (#1279, @KelSolaar)
- pygraphviz was replaced with pydot so that installation is easier:
pygraphvizneeds to be built , which is not trivial, whereaspydotis a pure Python package.
The following scientific packages minimum versions are required:
- numpy >= 1.24
- scipy >= 1.10
- matplotlib >= 3.7
- networkx >= 3
- pandas >= 2
Development Environment
Astral's uv
-
We switched from Poetry to uv and hatch for managing the development environment and build our wheels. (#1300)
- uv is faster at resolving the environment and the team at astral.sh has been doing wonders for the Python ecosystem, we have been using ruff for a while now.
- It is so good that it literally only requires
uv run --with colour-science my_script.pyto run a script using Colour. - Thanks a ton to @charliermarsh et al.!
-
Improve static typing checks using multi-threading thanks to @erictraut suggestion.
Environment
It is now possible to create a ~/.colour-science/colour-science.jenv JSON file from which Colour will load environment variables from: (#1239, @KelSolaar)
{
"COLOUR_SCIENCE__COLOUR__SHOW_WARNINGS_WITH_TRACEBACK": 1
}The following new environment variables are now supported:
COLOUR_SCIENCE__FILTER_RUNTIME_WARNINGS: Filter Colour runtime warnings.COLOUR_SCIENCE__FILTER_USAGE_WARNINGS: Filter Colour usage warnings.COLOUR_SCIENCE__FILTER_COLOUR_WARNINGS: Filter Colour warnings, this also filters Colour usage and runtime warnings.COLOUR_SCIENCE__FILTER_PYTHON_WARNINGS: Filter Python warnings.
Input and Output
- Definitions reading from and writing to files now support the
pathlib.Pathtype. (ff4fe99, @KelSolaar)
colour.adaptation
- Implement support for vK20 chromatic adaptation transform with
colour.adaptation.matrix_chromatic_adaptation_vk20andcolour.adaptation.chromatic_adaptation_vK20definitions. (#1131, @KelSolaar)
colour.characterisation
- Add the ColorChecker SG chromaticity coordinates with the
colour.CCS_COLOURCHECKERS["ColorCheckerSG - Before November 2014"]andcolour.CCS_COLOURCHECKERS["ColorCheckerSG - After November 2014"]attribute keys.
colour.colorimetry
- Use
shapeif passed, to also reshape thecolour.continuous.AbstractContinuousSignalsub-classes incolour.colorimetry.sd_to_XYZ_integrationdefinition. (#1250, @KelSolaar)
colour.models
-
Programmatically add polar conversions to the following definitions: (#1183, #1272, @KelSolaar)
-
colour.Lab_to_LCHab* -
colour.LCHab_to_Lab* -
colour.Luv_to_LCHuv* -
colour.LCHuv_to_Luv* -
colour.hdr_CIELab_to_hdr_CIELCHab -
colour.hdr_CIELCHab_to_hdr_CIELab -
colour.Hunter_Lab_to_Hunter_LCHab -
colour.Hunter_LCHab_to_Hunter_Lab -
colour.Hunter_Rdab_to_Hunter_RdCHab -
colour.Hunter_RdCHab_to_Hunter_Rdab -
colour.ICaCb_to_ICHab -
colour.ICHab_to_ICaCb -
colour.ICtCp_to_ICHtp -
colour.ICHtp_to_ICtCp -
colour.IgPgTg_to_IgCHpt -
colour.IgCHpt_to_IgPgTg -
colour.IPT_to_ICH -
colour.ICH_to_IPT -
colour.Izazbz_to_IzCHab -
colour.IzCHab_to_Izazbz -
colour.Jzazbz_to_JzCHab -
colour.JzCHab_to_Jzazbz -
colour.hdr_IPT_to_hdr_ICH -
colour.hdr_ICH_to_hdr_IPT -
colour.Oklab_to_Oklch -
colour.Oklch_to_Oklab -
colour.ProLab_to_ProLCHab -
colour.ProLCHab_to_ProLab -
colour.IPT_Ragoo2021_to_ICH_Ragoo2021 -
colour.ICH_Ragoo2021_to_IPT_Ragoo2021
* Now programmatically defined
colour.utilities
Port-Based Nodes and Graphs (#1277, @KelSolaar)
6 new classes were introduced to support for a port-based node-graph:
colour.utilities.Portcolour.utilities.PortNodecolour.utilities.PortGraphcolour.utilities.Forcolour.utilities.ParallelForThreadcolour.utilities.ParallelForMultiProcess
They enable the construction of processing graphs:
class NodeAdd(PortNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.description = "Perform the addition of the two input port values."
self.add_input_port("a")
self.add_input_port("b")
self.add_output_port("output")
def process(self):
a = self.get_input("a")
b = self.get_input("b")
if a is None or b is None:
return
self._output_ports["output"].value = a + b
self.dirty = False
class NodeMultiply(PortNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.description = (
"Perform the multiplication of the two input port values."
)
self.add_input_port("a")
self.add_input_port("b")
self.add_output_port("output")
def process(self):
a = self.get_input("a")
b = self.get_input("b")
if a is None or b is None:
return
self._output_ports["output"].value = a * b
self.dirty = False
node_add = NodeAdd()
node_add.set_input("a", 1)
node_add.set_input("b", 1)
node_multiply = NodeMultiply()
node_multiply.set_input("b", 2)
graph = PortGraph()
graph.add_node(node_add)
graph.add_node(node_multiply)
graph.connect(node_add, "output", node_multiply, "a")
graph.process()
print(node_multiply.get_output("output"))
graph.to_graphviz().draw("Graph.png", prog="dot")colour-hdri uses the new classes to implement a multi-processed HDRI merging graph: https://github.com/colour-science/colour-hdri/blob/develop/colour_hdri/examples/examples_advanced_processing_with_an_input_device_transform.ipynb
Fixes
colour.colorimetry
- Fix issue where
colour.colorimetry.sds_and_msds_to_msdsdefinition did not always copy the converted spectral distributions and was causing seemingly random unit tests failure. (891d364, @KelSolaar) - Fix issue when passing a
colour.MultiSpectralDistributionstocolour.sd_to_XYZdefinition using the ASTM E308 method. (20fb963, @KelSolaar, @gul916)
colour.io
- Ensure that
colour.io.process_image_OpenColorIOdefinition handles non-contiguous arrays. (387c9e5, @nick-shaw, @KelSolaar)
colour.models
- Change Canon Cinema Gamut whitepoint to D55. (c25934e, @MrLixm, @KelSolaar)
colour.notation
- Reduce various thresholds in Munsell Renotation computations to allow sRGB colours to be converted. (#1173, 4b0c38d, @KelSolaar)
colour.utilities
- Ensure that caches are systematically cleared when changing dtype: It was causing seemingly random unit tests failure. (8faeb09, @KelSolaar)
Changes
colour.algebra
| Object | Name | Author |
|---|---|---|
colour.algebra.vector_dot |
vecmul |
@KelSolaar |
colour.plotting
| Object | Signature | Author |
|---|---|---|
colour.plotting.plot_RGB_colourspace_section |
plot_RGB_colourspace_section(colourspace: (RGB_Colourspace | LiteralRGBColourspace | str | Sequence[RGB_Colourspace | LiteralRGBColourspace | str]) ,model: LiteralColourspaceModel | str = "CIE xyY", axis: Literal["+z", "+x", "+y"] | str = "+z", origin: float = 0.5, normalise: bool = True,size: float = 1.0, show_section_colours: bool = True, show_section_contour: bool = True, segments: int = 64, **kwargs: Any) -> Tuple[Figure, Axes] |
@KelSolaar |
colour.utilities
- ~
colour.utilities.is_string: (@KelSolaar)- Remove
Colour 0.4.4
Colour 0.4.4 - Alpha Milestone
This release implements support for Python 3.12 (#1224).
We are now using isort to order our imports. We improved the repository style using the Scientific Python Repository Review page.
colour-visuals was made public: It is a new repository implementing various WebGPU-based visuals on top of Colour and pygfx.
Features
Packaging
We have solved the clash with https://github.com/vaab/colour by loading a known subset of the objects given by vaab/colour-0.1.5 into our namespace if the COLOUR_SCIENCE__COLOUR__IMPORT_VAAB_COLOUR=True environment variable is defined. (#1222, @KelSolaar, @tjdcs, @MichaelMauderer)
See the following issues for more information:
colour.hints
- Various new literals have been added to help packages using
Colourwith typing annotations. (#1198, @KelSolaar, @jamesmyatt)
colour.models
- Implement support for Apple Log Profile with
colour.models.log_encoding_AppleLogProfileandcolour.models.log_decoding_AppleLogProfiledefinitions. (@KelSolaar)
colour.plotting
-
Add new definitions to generate data useful for other plotting definitions and used by colour-visuals: (@KelSolaar)
-
colour.plotting.lines_daylight_locus -
colour.plotting.lines_planckian_locus -
colour.plotting.lines_pointer_gamut -
colour.plotting.lines_spectral_locus
Fixes
colour.continuous
- Ensure that
colour.continuous.AbstractContinuousFunctionclass and sub-classes, e.g.colour.SpectralDistributionclass, can be pickled. (#66c26b6, @KelSolaar)
colour.difference
- Fix numerical precision issue in
colour.difference.delta_E_CIE1994definition. (#1206, @volrak, @KelSolaar)
colour.utilities
- Fix issue in
colour.utilities.verbose.multiline_reprdefinition when an attribute representation isNone. (#1466, @KelSolaar)
Changes
Unit Tests
- We have changed our unit tests to use
np.testing.assert_allcloserather thannp.testing.assert_array_almost_equalto help with tests failing on Github Actions because of minor precision issues when usingpytest-xdist, multi-threading and caching. (@KelSolaar)
colour.constants
| Object | Name | Author |
|---|---|---|
colour.constants.DEFAULT_INT_DTYPE |
DTYPE_INT_DEFAULT |
@KelSolaar |
colour.constants.DEFAULT_FLOAT_DTYPE |
DTYPE_FLOAT_DEFAULT |
... |
Colour 0.4.3
Colour 0.4.3 - Alpha Milestone
We worked on many optimisations around colour quality metrics that should result in overall performance increase, thanks again to @tjdcs for the heavy lifting!
@charliermarsh's ruff is now used as a replacement for:
We also replaced mypy with pyright for performance reasons. We took that opportunity to simplify our type annotations.
The colour.XYZ_to_RGB and colour.RGB_to_XYZ definition signatures have been changed to be easier to use, please update any code using them. See #1127 for more information.
With this release, the following scientific packages minimum versions are required:
- numpy >= 1.22
- scipy >= 1.8
- matplotlib >= 3.5
- networkx >= 2.7
- pandas >= 1.4
Features
colour.characterisation
- Add TE226 V2 colour checker reference values. (#1113, #901, @Rusching)
- Add
colour.apply_matrix_colour_correctiondefinition andcolour.APPLY_MATRIX_COLOUR_CORRECTION_METHODSattribute to conveniently apply a colour-correction matrix computed with thecolour.matrix_colour_correctiondefinition. (@KelSolaar) - Add terms 4 and 35 to Cheung (2004) polynomial transformation. (#1160, @chnmasta05)
colour.colorimetry
- The continuous signal classes are now iterable, e.g.
colour.SpectralDistributionandcolour.MultiSpectralDistributions. (#1088, @KelSolaar)
import colour
sd = colour.SDS_ILLUMINANTS["A"]
for i in sd:
print(i)[ 300. 0.930483]
[ 305. 1.12821]
[ 310. 1.35769]
...
[ 780. 241.675]
import colour
sd = colour.MSDS_CMFS["CIE 2012 2 Degree Standard Observer"]
for i in sd:
print(i)[ 3.90000000e+02 3.76964700e-03 4.14616100e-04 1.84726000e-02]
[ 3.91000000e+02 4.53241600e-03 5.02833300e-04 2.22110100e-02]
[ 3.92000000e+02 5.44655300e-03 6.08499100e-04 2.66981900e-02]
...
[ 8.30000000e+02 1.76246500e-06 7.05386000e-07 0.00000000e+00]
colour.models
- Implement support for Kirk (2019) Yrg colourspace with
colour.XYZ_to_Yrgandcolour.Yrg_to_XYZdefinitions. (#1152, @KelSolaar) - Implement support for Fujifilm F-Log2 encodings with
colour.models.log_decoding_FLog2andcolour.models.log_encoding_FLog2definitions. (#1076, @zachlewis) - Implement support for PLASA ANSI E1.54 colourspace with
colour.models.RGB_COLOURSPACE_PLASA_ANSI_E154attribute. (#1193, @KelSolaar)
colour.notation
- Implement support for CSS Color 3 with
colour.notation.CSS_COLOR_3attribute andcolour.notation.keyword_to_RGB_CSSColor3definition. (#1140, @KelSolaar)
colour.plotting
- Make RGB encoding optional in
colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931,colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCSandcolour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCSdefinitions. (@KelSolaar)
RGB = np.random.random((128, 128, 3))
plot_RGB_chromaticities_in_chromaticity_diagram(RGB, "ITU-R BT.709", scatter_kwargs={"apply_cctf_encoding": False})- Add a new
colour.plotting.temperature.plot_daylight_locusdefinition. (@KelSolaar) - Add a new
planckian_locus_use_miredskeyword argument tocolour.plotting.temperature.plot_planckian_locusdefinition. (@KelSolaar)
colour.temperature
- Add
colour.temperature.mired_to_CCTandcolour.temperature.CCT_to_mireddefinitions to perform micro reciprocal degree and CCT conversions. (#1114, @KelSolaar) - Add
colour.temperature.XYZ_to_CCT_Ohno2013andcolour.temperature.CCT_to_XYZ_Ohno2013convenient definitions. (#1120, @tjdcs)
colour.utilities
- Add
colour.utilities.int_digestdefinition using xxhash to compute 64-bit integer hashes. (#1149, @KelSolaar, @tjdcs)
Performance
- The Colour Fidelity Index (2017), i.e.
colour.quality.colour_fidelity_index_CIE2017definition, and TM 30-18, i.e.colour.quality.colour_fidelity_index_ANSIIESTM3018definition, metrics performance has been improved by x100 thanks to overall optimizations, e.g.colour.temperature.uv_to_CCT_Ohno2013definition is x5 faster. (#1120, @tjdcs, @KelSolaar)
Fixes
Dependencies
- Implement support for Numpy 1.24.0. (#1087, @KelSolaar)
colour.io
- Fix incorrect bit-depth conversion in
colour.io.write_image_OpenImageIOdefinition when writing 16-bit integer images (82ef2c4, @nick-shaw, @KelSolaar)
colour.colorimetry
- Fix incorrect
colour.colorimetry.sd_gaussian_fwhmdefinition output (#1184, @EricFlyMeToTheMoon, @tjdcs, @KelSolaar)
colour.models
- Implement various minor corrections from Sarifuddin (2021) to
colour.RGB_to_HCLdefinition. (1a580ef, @KelSolaar)
colour.phenomena
- Fix incorrect CO2 concentration scaling in
colour.phenomena.rayleigh.F_air_Bodhaine1999definition. (#307, #1167, @chnmasta05, @KelSolaar)
colour.utilities
- Fix dimensionality reduction issue in
colour.utilities.as_floatdefinition that was causing issue with 1-pixel images processing. (#1189, @KelSolaar, @MrLixm)
Changes
colour.colorimetry
| Object | Signature | Author |
|---|---|---|
colour.sd_single_led |
`sd_single_led(peak_wavelength: float, shape: SpectralShape = SPECTRAL_SHAPE_DEFAULT, method: Literal["Ohno 2005"] | str = "Ohno 2005", **kwargs: Any) -> SpectralDistribution` |
colour.sd_multi_leds |
`sd_multi_leds(peak_wavelengths: ArrayLike, shape: SpectralShape = SPECTRAL_SHAPE_DEFAULT, method: Literal["Ohno 2005"] | str = "Ohno 2005", **kwargs: Any) -> SpectralDistribution` |
colour.colorimetry.sd_single_led_Ohno2005 |
sd_single_led_Ohno2005(peak_wavelength: float, half_spectral_width: float, shape: SpectralShape = SPECTRAL_SHAPE_DEFAULT, **kwargs: Any) -> SpectralDistribution |
... |
colour.colorimetry.sd_multi_leds_Ohno2005 |
`sd_multi_leds_Ohno2005(peak_wavelengths: ArrayLike, half_spectral_widths: ArrayLike, peak_power_ratios: ArrayLike | None = None, shape: SpectralShape = SPECTRAL_SHAPE_DEFAULT, **kwargs: Any) -> SpectralDistribution` |
colour.characterisation
- Ensure that the matrix returned by
colour.matrix_idtdefinition is whitepoint preserving using thecolour.characterisation.optimisation_factory_rawtoaces_v1optimisation factory. (@KelSolaar) - Implement support for Finlayson et al. (2015) root-polynomials colour correction with
colour.characterisation.optimisation_factory_Oklab_15optimisation factory. (@KelSolaar) - The
colour.matrix_idtdefinition optimisation factories are now returning 4 objects. (@KelSolaar)
colour.models
- The
colour.XYZ_to_xyandcolour.XYZ_to_xyYdefinitions do no return the parameter illuminant chromaticities when the luminanceYis equal to zero. This behaviour was motivated by a note from Bruce Justin Lindbloom but does not have a CIE or ASTM recommendation. (#1153, @KelSolaar)
| Object | Name | Author |
|---|---|---|
colour.XYZ_to_IPT_Munish2021 |
XYZ_to_IPT_Ragoo2021 |
@blue-j, @KelSolaar |
colour.IPT_Munish2021_to_XYZ |
IPT_Ragoo2021_to_XYZ |
... |
| Object | Signature | Author |
|---|---|---|
colour.XYZ_to_RGB |
`XYZ_to_RGB(XYZ: ArrayLike, colourspace: RGB_Colourspace | str, illuminant: ArrayLike |
Colour 0.4.2
Colour 0.4.2 - Alpha Milestone
This release implements support for Python 3.11. It includes the remaining contributions of the GSoC 2021 work from Cédric (@villirion). New RGB colourspaces, transfer functions, colour models and colour appearance models have been added. Various performance improvements have been implemented.
We would like to especially thanks @tjdcs for his recent contributions.
With this release, the minimum Python version is 3.9 and the following scientific packages minimum versions are required:
- numpy >= 1.20
- scipy >= 1.7
- matplotlib >= 3.4
- networkx >= 2.6
- pandas >= 1.3
Features
colour.appearance
- Implement support for Hellwig and Fairchild (2022) colour appearance model with
colour.XYZ_to_Hellwig2022andcolour.Hellwig2022_to_XYZdefinitions. (#972 @KelSolaar) - Implement support for CIECAM16 colour appearance model with
colour.XYZ_to_CIECAM16andcolour.CIECAM16_to_XYZdefinitions. (#1015, @KelSolaar)
colour.colorimetry
- Add convenient
colour.SpectralShape.wavelengthsproperty. (@KelSolaar)
colour.difference
- Implement support for Recommendation ITU-R BT.2124 with
colour.difference.delta_E_ITPdefinition. (#981, @sabarish-srinivasan)
colour.io
- Implement simple wrapper for the Color Transformation Language (CTL) with the
colour.io.ctl_renderandcolour.io.process_image_ctldefinitions. (#977, @KelSolaar)
colour.models
-
Implement support for Munish Ragoo and Farup (2021) Optimised IPT colourspace with
colour.XYZ_to_IPT_Munish2021andcolour.IPT_Munish2021_to_XYZdefinitions. (#990, @KelSolaar) -
Implement support for Leica L-Log log encodings with
colour.models.log_encoding_LLogandcolour.models.log_decoding_LLogdefinitions. (#986, @KelSolaar, @nick-shaw, @zachlewis) -
Implement support for Recommendation ITU-T H.273 / INTERNATIONAL STANDARD ISO/IEC 23091-2 code points for video signal type identification with
colour.COLOUR_PRIMARIES_ITUTH273,colour.TRANSFER_CHARACTERISTICS_ITUTH273andcolour.MATRIX_COEFFICIENTS_ITUTH273attributes andcolour.models.describe_video_signal_colour_primaries,colour.models.describe_video_signal_transfer_characteristicsandcolour.models.describe_video_signal_matrix_coefficientsdefinitions. (#987, #1033, @fxthomas, @KelSolaar). -
Implement support for ARRI Wide Gamut 4 colourspace and ARRI LogC4 log encodings with
colour.models.RGB_COLOURSPACE_ARRI_WIDE_GAMUT_4attribute andcolour.models.log_encoding_ARRILogC4andcolour.models.log_decoding_ARRILogC4definitions. (#1056, @KelSolaar)For consistency:
- The
colour.models.RGB_COLOURSPACE_ALEXA_WIDE_GAMUTattribute has been renamed toRGB_COLOURSPACE_ARRI_WIDE_GAMUT_3. - The
colour.models.log_encoding_ALEXALogCandcolour.models.log_decoding_ALEXALogCdefinitions have been renamed tolog_encoding_ARRILogC3andlog_decoding_ARRILogC3respectively. - Keys in the various mappings, e.g.
colour.RGB_COLOURSPACES,colour.LOG_ENCODINGS, have been renamed accordingly.
- The
colour.recovery
GSoC - 2021
- Implement support for Jiang et al. (2013) camera RGB sensitivities recovery with
colour.recovery.RGB_to_msds_camera_sensitivities_Jiang2013definition. (#1002, @villirion, @KelSolaar)
colour.utilities
- The
colour.utilities.CanonicalMappingandcolour.utilities.LazyCanonicalMapping, fomerlycolour.utilities.CaseInsensitiveMappingandcolour.utilities.LazyCaseInsensitiveMapping, respectively, support canonical (and sluggified) keys: (#993, @KelSolaar, @zachlewis)
>>> import colour
>>> colour.RGB_COLOURSPACES['ALEXA Wide Gamut'].name
'ALEXA Wide Gamut'
>>> colour.RGB_COLOURSPACES['alexa-wide-gamut'].name
'ALEXA Wide Gamut'
>>> colour.RGB_COLOURSPACES['alexawidegamut'].name
'ALEXA Wide Gamut'
>>> 'ALEXA Wide Gamut' in colour.RGB_COLOURSPACES
True
>>> 'alexa-wide-gamut' in colour.RGB_COLOURSPACES
True
>>> 'alexawidegamut' in colour.RGB_COLOURSPACES
True
>>> del colour.RGB_COLOURSPACES['alexa-wide-gamut']
>>> 'ALEXA Wide Gamut' in colour.RGB_COLOURSPACES
False
>>> list(colour.RGB_COLOURSPACES.slugified_keys())
['aces2065-1', 'acescc', 'acescct', 'acescg', 'acesproxy', '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', 'eci-rgb-v2', 'erimm-rgb', 'ekta-space-ps-5', 'f-gamut', 'filmlight-e-gamut', 'itu-r-bt2020', 'itu-r-bt470-525', 'itu-r-bt470-625', 'itu-r-bt709', 'max-rgb', 'n-gamut', 'ntsc-1953', 'ntsc-1987', 'p3-d65', 'palsecam', 'prophoto-rgb', 'protune-native', 'redwidegamutrgb', 'redcolor', 'redcolor2', 'redcolor3', 'redcolor4', 'rimm-rgb', 'romm-rgb', 'russell-rgb', 's-gamut', 's-gamut3', 's-gamut3cine', 'smpte-240m', 'smpte-c', 'sharp-rgb', 'v-gamut', 'venice-s-gamut3', 'venice-s-gamut3cine', 'xtreme-rgb', 'srgb', 'aces', 'adobe1998', 'prophoto']
>>> list(colour.RGB_COLOURSPACES.canonical_keys())
['aces20651', 'acescc', 'acescct', 'acescg', 'acesproxy', 'adobergb1998', 'adobewidegamutrgb', 'applergb', 'bestrgb', 'betargb', 'blackmagicwidegamut', 'ciergb', 'cinemagamut', 'colormatchrgb', 'dcdmxyz', 'dcip3', 'dcip3p', 'djidgamut', 'dragoncolor', 'dragoncolor2', 'davinciwidegamut', 'displayp3', 'donrgb4', 'ecirgbv2', 'erimmrgb', 'ektaspaceps5', 'fgamut', 'filmlightegamut', 'iturbt2020', 'iturbt470525', 'iturbt470625', 'iturbt709', 'maxrgb', 'ngamut', 'ntsc1953', 'ntsc1987', 'p3d65', 'palsecam', 'prophotorgb', 'protunenative', 'redwidegamutrgb', 'redcolor', 'redcolor2', 'redcolor3', 'redcolor4', 'rimmrgb', 'rommrgb', 'russellrgb', 'sgamut', 'sgamut3', 'sgamut3cine', 'smpte240m', 'smptec', 'sharprgb', 'vgamut', 'venicesgamut3', 'venicesgamut3cine', 'xtremergb', 'srgb', 'aces', 'adobe1998', 'prophoto']
>>> list(colour.MSDS_CMFS.slugified_keys())
['stockman-sharpe-2-degree-cone-fundamentals', 'stockman-sharpe-10-degree-cone-fundamentals', 'smith-pokorny-1975-normal-trichromats', 'wright-guild-1931-2-degree-rgb-cmfs', 'stiles-burch-1955-2-degree-rgb-cmfs', 'stiles-burch-1959-10-degree-rgb-cmfs', 'cie-1931-2-degree-standard-observer', 'cie-1964-10-degree-standard-observer', 'cie-2012-2-degree-standard-observer', 'cie-2012-10-degree-standard-observer', 'cie-2015-2-degree-standard-observer', 'cie-2015-10-degree-standard-observer', 'cie_2_1931', 'cie_10_1964']
>>> list(colour.MSDS_CMFS.canonical_keys())
['stockmansharpe2degreeconefundamentals', 'stockmansharpe10degreeconefundamentals', 'smithpokorny1975normaltrichromats', 'wrightguild19312degreergbcmfs', 'stilesburch19552degreergbcmfs', 'stilesburch195910degreergbcmfs', 'cie19312degreestandardobserver', 'cie196410degreestandardobserver', 'cie20122degreestandardobserver', 'cie201210degreestandardobserver', 'cie20152degreestandardobserver', 'cie201510degreestandardobserver', 'cie21931', 'cie101964']Most of the datasets Colour ship with benefit from this new feature.
Performance
colour.temperature.uv_to_CCT_Ohno2013definition is ~100x faster. (#951, @KelSolaar)colour.temperature.CCT_to_uv_Ohno2013definition is ~425x faster. (#951, @KelSolaar)- Creation of the
colour.Signalclass underlying continuous function now happens lazilly. (#1057, @tjdcs) colour.SpectralDistribution.shapeproperty getter is faster by ensuring monotonicity of thecolour.SpectralDistribution.domainproperty. (#1067, 85f6a57, @tjdcs, @KelSolaar)
Fixes
colour.contrast
- Fix incorrect log function in the pupil diameter computation of Barten (1999) contrast sensitivity function. (#1022, @xmsguan, @KelSolaar)
Changes
colour.algebra
| Object | Access Change | Author |
|---|---|---|
colour.algebra.ellipse_coefficients_general_form |
colour.geometry.ellipse_coefficients_general_form |
@KelSolaar |
colour.algebra.ellipse_coefficients_canonical_form |
colour.geometry.ellipse_coefficients_canonical_form |
... |
colour.algebra.point_at_angle_on_ellipse |
colour.geometry.point_at_angle_on_ellipse |
... |
colour.algebra.ellipse_fitting_Halir1998 |
colour.geometry.ellipse_fitting_Halir1998 |
... |
colour.algebra.ELLIPSE_FITTING_METHODS |
colour.geometry.ELLIPSE_FITTING_METHODS |
... |
colour.algebra.ellipse_fitting |
colour.geometry.ellipse_fitting |
... |
colour.algebra.extend_line_segment |
colour.geometry.extend_line_segment |
... |
colour.algebra.extend_line_segment |
colour.geometry.extend_line_segment |
... |
colour.algebra.extend_line_segment |
colour.geometry.extend_line_segment |
... |
colour.characterisation
Object | Signature ...
Colour 0.4.1
Colour 0.4.1 - Alpha Milestone
This release is a maintenance release that mainly addresses packaging issues experienced by the MSYS2 maintainers and import issues when using Colour with Numpy 1.19.x and 1.20.x.
Fixes
Dependencies
- Fix import issues when trying to import
colourwith Numpy 1.19.x and 1.20.x. (@KelSolaar, @remia)
Distribution
- Fix incorrectly generated
setup.pyfile. (@KelSolaar, @kmilos)
colour.colorimetry
- Fix intersection filtering in
colour.colorimetry.closest_spectral_locus_wavelengthdefinition. (@KelSolaar, @sobotka)
Colour 0.4.0
Colour 0.4.0 - Alpha Milestone
Over a year in the making, this release integrates most of the GSoC 2021 work from Cédric (@villirion), all the code from Geetansh (@SGeetansh) and the remaining GSoC 2020 code from Nishant (@njwardhan). We would like to thank them again for their great contributions!
Python 2.7 support has been dropped and the minimal version is Python 3.8 as per https://scientific-python.org/. The following minimal dependency versions are also required:
The highlights of this release are as follows:
- Colour now runs on iOS and iPadOS with Pyto.
- The import of
colouris now 3.6 times faster. - Typing annotations have been added and the codebase is checked with Mypy.
- The documentation has been updated and uses the pydata-sphinx-theme and has better compliance with PEP257.
- The code formatter is now Black,
- Many Python 3 features such as f-Strings or the
dataclassdecorator have been adopted. - The plotting API has been improved to be more consistent when setting the colours of some figures, e.g. spectral or planckian locus.
- New colour appearance models:
- Zhai and Luo (2018) chromatic adaptation model.
- Kim, Weyrich and Kautz (2009) colour appearance model.
- ZCAM colour appearance model.
- Helmholtz-Kohlrausch effect estimation.
- New colour models:
- Oklab colour model.
- Hanbury (2003) IHLS (Improved HLS) colourspace.
- DIN99b, DIN99c, and DIN99d refined formulas.
- ProLab colourspace.
- Sarifuddin and Missaoui (2005) HCL colourspace.
- New RGB colourspaces and transfer functions:
- Nikon N-Gamut colourspace and the N-Log log encoding.
- Blackmagic Wide Gamut colourspace and the associated Blackmagic Film Generation 5 OETF.
- DaVinci Intermediate OETF.
- RED Log3G10 encoding and decoding curves with linear extension.
- Other notable features:
- Huang et al. (2015) power-functions.
- LUT 1D, LUT 3x1D and LUT 3D inversion.
- UPRTek and Sekonic spectral data parsers.
- SPImtx LUT input and output.
- R'G'B' to Y'CbCr matrices computation.
- Gamut ring/section plotting.
- Rösch-MacAdam colour solid hue lines.
- Support for OpenColorIO processor.
- Note that the optional dependency is not specified in the
pyproject.toml, see AcademySoftwareFoundation/OpenColorIO#1573 for more information.
- Note that the optional dependency is not specified in the
Thanks again to all the contributors to this release!
- @aforsythe
- @fredsavoir
- @ilia3101
- @jedypod
- @JGoldstone
- @nick-shaw
- @njwardhan
- @Paul-Sims
- @ramparvathaneni
- @romanovar
- @saransh
- @SGeetansh
- @sobotka
- @villirion
- @zachlewis
Features
Typing
- The API has been fully annotated with typing annotations, a new
colour.hintssub-package exporting all the hints has been created.
Performance
- Import time has been reduced to ~1.5secs from 5.5secs on @KelSolaar's MacBook Pro (Retina, 13-inch, Mid 2014) by using a lazy load mechanism for the spectral data and delaying various imports in the
colour.plotting.tm3018module. See PR #840 for more information. - Repetitive spectral computations are now cached and a small cache management API has been created, see
colour.utilities.CACHE_REGISTRYattribute for more information. - The
colour.sd_to_XYZandcolour.msds_to_XYZdefinitions now use the same n-dimensional code under the hood. Some minor numerical differences are expected as the explicit summations and multiplications have been replaced withnp.dot.
colour.adaptation
GSoC - 2021
- Implement support for Zhai and Luo (2018) chromatic adaptation model with
colour.adaptation.chromatic_adaptation_Zhai2018definition. (@villirion, @KelSolaar)
colour.appearance
GSoC - 2021
- Implement support for Kim, Weyrich and Kautz (2009) colour appearance model with
colour.XYZ_to_Kim2009andcolour.Kim2009_to_XYZdefinitions. (@villirion, @KelSolaar)
- Implement support for ZCAM colour appearance model with the
colour.XYZ_to_ZCAMandcolour.ZCAM_to_XYZdefinitions. (@KelSolaar) - Implement support for Helmholtz-Kohlrausch effect estimation with
colour.HelmholtzKohlrausch_effect_object_Nayatani1997andcolour.HelmholtzKohlrausch_effect_luminous_Nayatani1997definitions. (@ilia3101, @KelSolaar) - Colour appearance models now use a dataclass-like class output instead of the
namedtupleand thus are mutable.
colour.characterisation
- Various ACES Input Device Transform computation objects have been updated to generate additional data and support more features for the Academy Input Device Transform (IDT) calculator. (@KelSolaar, @aforsythe)
- Add
colour.camera_RGB_to_ACES2065_1definition. (@KelSolaar, @aforsythe)
colour.colorimetry
- Implement support for spectral uniformity computation with
colour.spectral_uniformitydefinition. (@KelSolaar) - Add
colour.TVS_ILLUMINANTSattribute providing a reference for the CIE XYZ tristimulus values of the CIE illuminants. (@KelSolaar) - Ensure that
colour.SpectralShapeand dictKeysViewclass instances can be passed as domain tocolour.SpectralDistributionandcolour.MutliSpectralDistributionsclasses. (@KelSolaar) - The
colour.colorimetry.yellowness_ASTME313definition has been updated to use the recommended Yellowness Index equation as given by ASTME313. The alternative method has been renamed tocolour.colorimetry.yellowness_ASTME313_alternative. (@KelSolaar, @romanovar)
colour.difference
- Implement support for STRESS index computation according to García et al. (2007) method with
colour.index_stressdefinition andcolour.INDEX_STRESS_METHODSattribute. (@KelSolaar) - Implement support for Huang et al. (2015) power-functions improving colour-difference formulas with
colour.difference.power_function_Huang2015definition. (@KelSolaar)
colour.io
GSoC - 2020
- Implement support for LUT 1D, LUT 3x1D and LUT 3D inversion with the
colour.LUT1D.invert,colour.LUT3x1D.invertandcolour.LUT3D.invertmethods. (@njwardhan, @KelSolaar)
GSoC - 2021
- Implement support for UPRTek and Sekonic spectral data parsers with the
colour.SpectralDistribution_UPRTekandcolour.SpectralDistribution_Sekonicclasses. (@SGeetansh, @KelSolaar)
- Implement support for OpenColorIO processor with
colour.io.process_image_OpenColorIOdefinition. (@KelSolaar) - Implement support for SPImtx LUT input and output with new
colour.io.read_LUT_SonySPImtxandcolour.io.write_LUT_SonySPImtxdefinitions andcolour.io.LUTOperatorMatrixsupport class. (@nick-shaw, @KelSolaar, @zachlewis) - The
colour.io.tm2714.Header_IESTM2714class can now be hashed and compared for equality. (@JGoldstone)
colour.models
GSoC - 2021
- Implement support for Hanbury (2003) IHLS (Improved HLS) colourspace with
colour.RGB_to_IHLSandcolour.IHLS_to_RGBdefinitions. (@SGeetansh, @KelSolaar) - Implement support for DIN99b, DIN99c, and DIN99d refined formulas in
colour.Lab_to_DIN99andcolour.DIN99_to_Labdefinitions. (@SGeetansh) - Implement support for ProLab colourspace with
colour.ProLab_to_XYZandcolour.XYZ_to_ProLabdefinitions. (@SGeetansh, @KelSolaar)
- Implement support for Sarifuddin and Missaoui (2005) HCL colourspace with
colour.RGB_to_HCLandcolour.HCL_to_RGBdefinitions. (@Saransh-cpp, @KelSolaar) - Implement wrapper
colour.XYZ_to_ICTCPandcolour.ICTCP_to_XYZdefinitions. (@KelSolaar) - Implement wrapper
colour.XYZ_to_CAM02LCD,colour.CAM02LCD_to_XYZ,colour.XYZ_to_CAM02SCD,colour.CAM02SCD_to_XYZ,colour.XYZ_to_CAM02UCSand
colour.CAM02UCS_to_XYZdefinitions. (@KelSolaar) - Implement wrapper
colour.XYZ_to_CAM16LCD,colour.CAM16LCD_to_XYZ,colour.XYZ_to_CAM16SCD,colour.CAM16SCD_to_XYZ,colour.XYZ_to_CAM16UCSand
colour.CAM16UCS_to_XYZdefinitions. (@KelSolaar) - Implement support for R'G'B' to Y'CbCr matrices computation with
colour.matrix_YCbCrandcolour.offset_YCbCrdefinitions. (@KelSolaar, @nick-shaw) - Implement support for Oklab colour model with
colour.XYZ_to_Oklabandcolour.Oklab_to_XYZdefinitions. (@KelSolaar) - Implement support for Nikon N-Gamut colourspace and the N-Log log encoding and decoding curves with
colour.models.RGB_COLOURSPACE_N_GAMUTclass andcolour.models.log_encoding_NLOGandcolour.models.log_decoding_NLOGdefinitions. (@sobotka, @KelSolaar) - Implement support for RED Log3G10 encoding and decoding curves that uses a linear extension as given in the final version of White Paper on REDWideGamutRGB and Log3G10. (@jedypod)
- Implement support for Blackmagic Wide Gamut colourspace and the associated Blackmagic Film Generation 5 OETF and its inverse with
colour.models.RGB_COLOURSPACE_BLACKMAGIC_WIDE_GAMUTattribute,colour.models.oetf_BlackmagicFilmGeneration5andcolour.models.oetf_inverse_BlackmagicFilmGeneration5definitions. (@KelSolaar) - Implement support for *DaVinci Inte...
Colour 0.3.16
Colour 0.3.16 - Alpha Milestone
This release integrates all the GSoC work from Pawel (@enneract), most of the code from Nishant (@njwardhan) and, the optimizations from Omar (@OmarWagih1). We would like to thank them again for their great contributions!
We stop testing for Python 3.5 and, Scipy>=1.1.0 becomes the minimum version. This is the last feature release to support Python 2.7! We will also trim the deprecation code in the next version thus, please make sure to update your code accordingly.
The colour.SpectralDistribution.interpolate and colour.MultiSpectralDistributions.interpolate methods now honour class instantiation time interpolation parameters instead of blindly applying CIE 167:2005 recommendation, this introduces minor numerical changes.
Many definitions, methods and, module attributes have been renamed to improve consistency and we are reaching a satisfactory point in that regard, hopefully, the names will be much more stable from now on.
Features
colour.algebra
- Add
colour.algebra.smoothstepdefinition. (@KelSolaar)
colour.characterisation
- Support for ACES Input Device Transform (IDT) generation: The implementation follows to some extent RAW to ACES v1 and P-2013-001 procedure. (@KelSolaar)
Usage is simple and as follows:
>>> sensitivities = colour.CAMERA_RGB_SPECTRAL_SENSITIVITIES['Nikon 5100 (NPL)']
>>> illuminant = colour.ILLUMINANT_SDS['D55']
>>> colour.matrix_idt(sensitivities, illuminant)
array([[ 0.46579991, 0.13409239, 0.01935141],
[ 0.01786094, 0.77557292, -0.16775555],
[ 0.03458652, -0.16152926, 0.74270359]])The following ISO 7589 and 6728 spectral data has been added: (@KelSolaar)
-
ISO 6728 Standard Lens
-
ISO 7589 Diffuser
-
New attributes
colour.SDS_LENSEScontaining the ISO 6728 Standard Lens andcolour.SDS_FILTERScontaining the ISO 7589 Diffuser have been added. -
The ISO 17321-1 24 patches reflectance data has been added as an alias to Ohta (1997) measurements. (@KelSolaar)
colour.colorimetry
The following ISO 7589 illuminants have been added: (@KelSolaar)
-
ISO 7589 Photographic Daylight
-
ISO 7589 Sensitometric Daylight
-
ISO 7589 Studio Tungsten
-
ISO 7589 Sensitometric Studio Tungsten
-
ISO 7589 Photoflood
-
ISO 7589 Sensitometric Photoflood
-
ISO 7589 Sensitometric Printer
-
Add
colour.msds_constant,colour.msds_zerosandcolour.msds_onesdefinitions. (@KelSolaar)
colour.difference
- Add
colour.difference.JND_CIE1976attribute representing the Just Noticeable Difference (JND) according to CIE 1976 colour difference formula.
colour.geometry
The geometry primitives generation code has been consolidated into a new colour.geometry sub-package. The following objects are available: (@KelSolaar)
Primitives
colour.geometry.primitive_gridcolour.geometry.primitive_cubecolour.PRIMITIVE_METHODScolour.primitive
Primitives Vertices
colour.geometry.primitive_vertices_quad_mpl(for Matplotlib usage only)colour.geometry.primitive_vertices_grid_mpl(for Matplotlib usage only)colour.geometry.primitive_vertices_cube_mpl(for Matplotlib usage only)colour.geometry.primitive_vertices_spherecolour.PRIMITIVE_VERTICES_METHODScolour.primitive_vertices
colour.models
GSoC - 2020
- Add
colour.models.log_encoding_Log2andcolour.models.log_decoding_Log2log encoding and decoding definitions. (@njwardhan, @KelSolaar) - Add
colour.models.exponent_function_basicandcolour.models.exponent_function_monitor_curvedefinitions. (@njwardhan) - Add
colour.models.logarithmic_function_basic,colour.models.logarithmic_function_quasilogandcolour.models.logarithmic_function_cameradefinitions. (@njwardhan, @nick-shaw, @KelSolaar)
- Implement support for IGPGTG colourspace by Hellwig and Fairchild (2020) with the
colour.XYZ_to_IGPGTGandcolour.IGPGTG_to_XYZdefinitions. (@KelSolaar) - Implement support for DaVinci Wide Gamut colourspace. (@KelSolaar)
colour.plotting
- Implement support for ANSI/IES TM-30-18 Colour Rendition Report. (@enneract, @KelSolaar)
- Implement support for RGB colourspaces chromatic adaptation in various plotting routines: (@KelSolaar)
colour.quality
GSoC - 2020
- Implement support for CIE 2017 Colour Fidelity Index quality metric computation
colour.quality.colour_fidelity_index_CIE2017definition. (@enneract) - Implement support for ANSI/IES TM-30-18 Colour Fidelity Index quality metric computation
colour.quality.colour_fidelity_index_ANSIIESTM3018definition. (@enneract)
colour.recovery
GSoC - 2020
- Implement support for Jakob and Hanika (2019) spectral upsampling method with the
colour.recovery.XYZ_to_sd_Jakob2019definition. (@enneract, @KelSolaar) - Implement support for Mallett and Yuksel (2019) spectral upsampling method with the
colour.recovery.RGB_to_sd_Mallett2019definition. (@enneract) - Implement support for Otsu, Yamamoto and Hachisuka (2018) spectral upsampling method with the
colour.recovery.XYZ_to_sd_Otsu2018definition. (@enneract, @KelSolaar)
colour.utilities
- Float precision can be set globally with the
colour.utilities.set_float_precisiondefinition and theCOLOUR_SCIENCE__FLOAT_PRECISIONenvironment variable. It will affect almost the entire API and lead to increase performance at the price of broken capabilities. (@KelSolaar) - It is now possible to pass an
axisargument to thecolour.utilities.metric_mseandcolour.utilities.metric_psnrdefinitions. (@KelSolaar) - Add
colour.utilities.LazyCaseInsensitiveMappingclass for lazily loading slow and heavy datasets. (@KelSolaar)
Fixes
colour.characterisation
- The Finlayson, MacKiewicz and Hurlbert (2015) colour correction method was defective when root-polynomial expansion is in use. (@ChunHsinWang, @KelSolaar)
colour.colorimetry
- The
colour.SpectralDistribution.align,colour.MultiSpectralDistributions.align,colour.SpectralDistribution.interpolateandcolour.MultiSpectralDistributions.interpolatemethods did not honour the instantiation time interpolation class and were forcibly using either thecolour.SpragueInterpolatororcolour.CubicSplineInterpolatorclasses unless aninterpolatorargument was passed. This behaviour was not desirable and was changed so that if the instantiation time interpolation class is not one ofcolour.SpragueInterpolatororcolour.CubicSplineInterpolator, then, it will be used instead and thus it will take precedence over the CIE 167:2005 recommendation. (@KelSolaar)
The immediate consequence is small numerical changes to various spectral computations, for example:
>>> illuminant = ILLUMINANTS_SDS['D65']
>>> sd_to_XYZ_tristimulus_weighting_factors_ASTME308(
... sd, cmfs, illuminant) # doctest: +ELLIPSIS
- array([ 10.8402899..., 9.6843539..., 6.2160858...])
+ array([ 10.8405832..., 9.6844909..., 6.2155622...])
>>> from colour import COLOURCHECKERS_SDS
>>> sd = COLOURCHECKERS_SDS['ColorChecker N Ohta']['dark skin']
>>> sd_to_aces_relative_exposure_values(sd) # doctest: +ELLIPSIS
- array([ 0.1171785..., 0.0866347..., 0.0589707...])
+ array([ 0.1171814..., 0.0866360..., 0.0589726...])
Colour quality metrics are affected a bit more severely:
```diff
>>> from colour import ILLUMINANTS_SDS
>>> sd = ILLUMINANTS_SDS['FL2']
>>> colour_rendering_index(sd) # doctest: +ELLIPSIS
- 64.1515202...
+ 64.2337241...
>>> from colour import ILLUMINANTS_SDS
>>> sd = ILLUMINANTS_SDS['FL2']
>>> colour_quality_scale(sd) # doctest: +ELLIPSIS
- 64.0172835...
+ 64.1117031...CIE Illuminant D Series D60 chromaticity have also been modified:
- 'D60': np.array([0.321626242047397, 0.337736995955436]),
+ 'D60': np.array([0.321616709705268, 0.337619916550817]),See #566 for more details.
colour.models
colour.OETF_INVERSESattribute ITU-R BT.2100 HLG key was incorrectly named ITU-R BT.2100 HLD. (@jchwei)colour.HSL_to_RGBdefinition output was incorrect when saturation was equal to 1. (@KelSolaar, @nadersadoughi)
colour.plotting
- The
colour.plotting.diagrams.plot_chromaticity_diagramdefinition was not passing anymore the CMFS to the underlyingcolour.plotting.diagrams.plot_spectral_locusandcolour.plotting.diagrams.plot_chromaticity_diagram_coloursdefinitions. (@KelSolaar, @sobotka)
colour.utilities
- The
colour.utilities.filter_warningsdefinition was not behaving properly and has been fixed. (@KelSolaar)
Examples
colour.plotting.plot_RGB_colourspaces_gamutsdefinition was using an incorrectstyleargument. (@sianyi)
C...
Colour 0.3.15
Colour 0.3.15 - Alpha Milestone
This is mainly a maintenance release implementing support for Python 3.8, Numpy 1.18 and fixing a major issue in Krystek (1985) correlated colour temperature computation.
Features
colour.colorimetry
- The typical CIE LED illuminants spectral power distributions and chromaticity coordinates have been added to the datasets: (@KelSolaar)
- LED-B1
- LED-B2
- LED-B3
- LED-B4
- LED-B5
- LED-BH1,
- LED-RGB1
- LED-V1
- LED-V2
- The recommended indoor illuminants ID65 and ID50 spectral power distributions and chromaticity coordinates have been added to the datasets. (@KelSolaar)
- Add
colour.colorimetry.sds_and_multi_sds_to_multi_sdsdefinition that converts given spectral and multi-spectral distributions to multi-spectral distributions. (@KelSolaar)
colour.models
- Implement support for Display P3 RGB colourspace as per https://developer.apple.com/documentation/coregraphics/cgcolorspace/1408916-displayp3#discussion. (@sobotka)
- Add
colour.models.Jab_to_JChandcolour.models.JCh_to_Jabdefinitions. (@KelSolaar)
Fixes
colour
Various fixes have been implemented to ensure compatibility with Python 3.8 and Numpy 1.18. (@KelSolaar, @MaxSchambach, @mzszym)
colour.io
- Prevent spi3d LUT index duplicates because of floating point precision related issues. (@KelSolaar, @sobotka, @nick-shaw)
colour.notation
- Fix incorrect Domain-Range scale in Munsell Renotation System implementation. (@KelSolaar)
colour.temperature
colour.temperature.CCT_to_uv_Krystek1985definition was incorrectly implemented. Incorrect reading of the reference publications ended up with exponentiations being different, e.g.10**4was replaced with10e4. (@OlliNiemitalo)
Changes
colour.algebra
colour.algebra.cartesian_to_sphericalandcolour.algebra.spherical_to_cartesianuse ISO conversion convention. ρ is in range [0, +inf], θ is in range [0, pi] radians, i.e. [0, 180] degrees, and φ is in range [-pi, pi] radians, i.e. [-180, 180] degrees.
colour.volume
colour.is_within_visible_spectrum: (@KelSolaar)- Signature:
XYZ_outer_surface(XYZ, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].clone().align(DEFAULT_SPECTRAL_SHAPE_XYZ_OUTER_SURFACE), illuminant=sd_ones(DEFAULT_SPECTRAL_SHAPE_XYZ_OUTER_SURFACE), tolerance=None, **kwargs)
- Signature:
colour.volume.XYZ_outer_surface: (@KelSolaar)- Signature:
XYZ_outer_surface(cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].clone().align(DEFAULT_SPECTRAL_SHAPE_XYZ_OUTER_SURFACE), illuminant=sd_ones(DEFAULT_SPECTRAL_SHAPE_XYZ_OUTER_SURFACE), **kwargs) - Implementation: The generated CIE XYZ tristimulus values are not normalised anymore, this will only affect computation if a different illuminant than CIE Illuminant E is chosen.
- Signature:
colour.plotting
: (@KelSolaar)colour.plotting.common.wrap_title- Remove










