Colour v0.3.12 Release Notes

Release Date: 2019-03-24 // about 5 years ago
  • Colour 0.3.12 - Alpha Milestone

    Another important 700+ commits step on The Road to Stable!

    ๐Ÿš€ This release was severely delayed because of the involvement of some of us in the authoring of the upcoming Cinematic Color update. Colouris used to produce an important amount of figures in this work and it was important to improve the plotting capabilities.

    ๐Ÿ“ฆ Plotting Package Overhaul

    The colour.plotting sub-package was extensively overhauled. It is less opinionated and more flexible. The plotting definitions have been renamed and start with plot_, they return the figure and axes instances. The Cinematic Color 2 - Figures Google Colab document is a good example highlighting the greatest and latest changes and capabilities.

    0๏ธโƒฃ Default to CIE Standard Illuminant D Series D65

    The CIE Standard Illuminant D Series D65 was made the default illuminant in places where CIE Illuminant D Series D50 was used as the default argument.

    A few reasons for this choice, first D65 is a Standard CIE illuminant along with A, second Colour is used mainly in computer graphics thus it makes sense to adopt D65 where it is ubiquitous, and, finally, it brings consistency across the API while preventing some errors from users with less expertise in the field.

    Domain-Range Scales

    The colour science field adopts many input domains and output ranges. Those are challenging when designing an API. Picking a unique domain-range scale over an other has caused surprise and grief to practitioners of different industries in other software.

    Colour has always used the domain-range scales of the publications it implements while recognizing the need for a unique domain-range scale. The API can be switched to use a soft normalised scale to domain-range [0, 1] using the colour.set_domain_range_scale definition and the colour.domain_range_scale context manager. More information about Domain-Range Scales is available in the documentation.

    Look-Up-Tables IO

    ๐Ÿš€ With this release, Colour is now able to read and write Look-Up-Tables (LUTs) of various dimensions, i.e. LUT1D, LUT3x1D, LUT3D and LUT Sequences.

    Polynomial Colour Correction

    Polynomial colour correction was added, it is a useful tool to correct for non-linearity of data, for example, film stocks colours. With great powers come great responsibilities and polynomials will eventually alter significantly
    colour data that is not present in the original fitting set.

    ๐ŸŽ Windows and macOs CI

    ๐Ÿ‘Œ Support for Azure Pipelines was added by @MichaelMauderer giving for the first time continuous integration on macOS and Windows, a few Windows related issues were addressed.

    Contrast Sensitivity Function

    The Barten (1999) contrast sensitivity function was implemented and can be used to estimate ideal code values as a function of viewing conditions.

    Miscellaneous

    The power word and abbreviation has been removed from all the spectral distribution related objects. Likewise, the word spectral has been removed from all the related objects and replaced with sd.

    ๐Ÿ“š The built documentation has been removed from the PyPi package to reduce the size of the downloads.

    ๐Ÿ”‹ Features

    colour.algebra

    Implement support for safe and symmetrical power with colour.algebra.spow definition and the related colour.algebra.is_spow_enabled, colour.algebra.set_spow_enable and colour.algebra.spow_enable definitions. (@KelSolaar)

    Implement colour.NearestNeighbourInterpolator interpolator class. (@KelSolaar)

    ๐Ÿ‘ Implement support for various ellipse related geometrical definitions: (@KelSolaar)

    • colour.algebra.ellipse_coefficients_general_form
    • colour.algebra.ellipse_coefficients_canonical_form
    • colour.algebra.point_at_angle_on_ellipse
    • colour.algebra.ellipse_fitting_Halir1998
    • colour.algebra.ELLIPSE_FITTING_METHODS
    • colour.algebra.ellipse_fitting

    colour.characterisation

    • Implement support for Cheung et al. (2004), Finlayson et al. (2015) and Vandermonde polynomial colour correction with colour.polynomial_expansion, colour.colour_correction_matrix, and colour.colour_correction definitions wrapping the following objects: (@KelSolaar)
      • Cheung et al. (2004) : colour.characterisation.augmented_matrix_Cheung2004,
        colour.characterisation.colour_correction_matrix_Cheung2004 and
        colour.characterisation.colour_correction_Cheung2004 definitions.
      • Finlayson et al. (2015) : colour.characterisation.augmented_matrix_Finlayson2015,
        colour.characterisation.colour_correction_matrix_Finlayson2015 and
        colour.characterisation.colour_correction_Finlayson2015 definitions.
      • Vandermonde : colour.characterisation.augmented_matrix_Vandermonde,
        colour.characterisation.colour_correction_matrix_Vandermonde and
        colour.characterisation.colour_correction_Vandermonde definitions.
    • Add X-Rite new ColourChecker data from prior and after November 2014 in colour.COLOURCHECKERS attribute and available with the following keys:
      • ColorChecker24 - Before November 2014
      • ColorChecker24 - After November 2014

    colour.blindness

    • Implement support for Machado et al. (2009) colour vision deficiency model with colour.anomalous_trichromacy_cmfs_Machado2009, colour.anomalous_trichromacy_matrix_Machado2009 and colour.cvd_matrix_Machado2009 definitions. (@KelSolaar, @MichaelMauderer)

    colour.colorimetry

    • Implement support for multi-spectral distribution array conversion to CIE XYZ tristimulus values with colour.multi_sds_to_XYZ definition. (@KelSolaar)
      It ultimately allows conversion of multi-spectral images to RGB, as an example here is the RIT MetaCow converted to sRGB:

    image

    • Add colour.MultiSpectralDistribution.signal_type property and colour.MultiSpectralDistribution.to_sds method. (@KelSolaar)
    • Implement support for gaussian spectral distributions generation and single and multi LED spectral distributions generation according to Ohno (2005) method with the following objects: (@KelSolaar)
      • colour.SD_GAUSSIAN_METHODS
      • colour.sd_gaussian
      • colour.colorimetry.sd_single_led_Ohno2005
      • colour.SD_SINGLE_LED_METHODS
      • colour.sd_single_led
      • colour.colorimetry.sd_multi_leds_Ohno2005
      • colour.SD_MULTI_LEDS_METHODS
      • colour.sd_multi_leds
    • Add colour.colorimetry.daylight_locus_function definition computing the the Daylight Locus chromaticity coordinate y_D for given chromaticity coordinate x_D. (@KelSolaar)

    colour.contrast

    • Implement support for Barten (1999) contrast sensitivity function (CSF) with colour.contrast.contrast_sensitivity_function_Barten1999 definition and the colour.contrast_sensitivity_function high-level definition wrapper. (@KelSolaar)

    image
    Computing the minimum detectable contrast with the assumed conditions for UHDTV applications as given in ITU-R BT.2246-4 Figure 31 and using Barten (1999) method.

    colour.difference

    • Implement support for DIN99 colour difference formula with colour.difference.delta_E_DIN99 definition.
      (@KelSolaar, @MichaelMauderer)

    colour.io

    • Implement support for reading and writing 1D, 3x1D and 3D LUTs with the colour.read_LUT and colour.write_LUT definitions. (@nick-shaw, @KelSolaar)

    The following LUT formats are currently available:

    - *Cinespace*: `colour.io.read_LUT_Cinespace` and `colour.io.write_LUT_Cinespace` definitions.
    - *Iridas*: `colour.io.read_LUT_IridasCube` and `colour.io.write_LUT_IridasCube` definitions.
    - *Resolve*: `colour.io.read_LUT_ResolveCube` and `colour.io.write_LUT_ResolveCube` definitions.
    - *Sony SPI 1D*: `colour.io.read_LUT_SonySPI1D` and `colour.io.write_LUT_SonySPI1D` definitions.
    - *Sony SPI 3D*: `colour.io.read_LUT_SonySPI3D` and `colour.io.write_LUT_SonySPI3D` definitions.
    
    • ๐Ÿ‘ Implement support for writing image attributes using the colour.io.ImageAttribute_Specification class:
      (@KelSolaar)

      import numpy as npimport colour compression = colour.io.ImageAttribute_Specification('Compression', 'none') colour.write_image(np.ones((32, 32, 3)), 'compression_rle.tif') colour.write_image(np.ones((32, 32, 3)), 'compression_none.tif', attributes=[compression])

    colour.models

    • Implement support for Safdar et al. (2017) JzAzBz colourspace with colour.XYZ_to_JzAzBz and colour.JzAzBz_to_XYZ definitions. (@KelSolaar)
    • Implement support for YCoCg colour encoding with colour.RGB_to_YCoCg and colour.YCoCg_to_RGB definitions. (@KelSolaar)
    • Implement colour.ENCODING_CCTFS and colour.DECODING_CCTFS attributes and colour.encoding_cctf and colour.decoding_cctf definitions: they are convenient collections around the following transfer function objects: (@KelSolaar)
      • colour.ENCODING_CCTFS and colour.encoding_cctf:
      • colour.LOG_ENCODING_CURVES
      • colour.OETFS
      • colour.EOTFS_REVERSE
      • colour.DECODING_CCTFS and colour.decoding_cctf:
      • colour.LOG_DECODING_CURVES
      • colour.EOTFS
      • colour.OETFS_REVERSE
    • Implement colour.Hunter_Rdab_to_XYZ definition. (@KelSolaar)
    • Implement colour.UVW_to_XYZ definition. (@KelSolaar)
    • Implement colour.xy_to_Luv_uv and colour.xy_to_UCS_uv definitions. (@KelSolaar)
    • Implement colour.models.DCDM_XYZ_COLOURSPACE. (@KelSolaar, @codycuellar)
    • Implement colour.RGB_Colourspace.copy and colour.RGB_Colourspace.chromatically_adapt methods respectively returning a copy and chromatically adapting the current instance of the RGB_Colourspace to given whitepoint. (@KelSolaar)
    • Implement support for P3-D65 colourspace with colour.models.P3_D65_COLOURSPACE attribute. (@jdvandenberg)
    • Implement support for Filmic Pro log encoding curve with colour.models.log_encoding_FilmicPro6 and colour.models.log.decoding_FilmicPro6 definitions. (@KelSolaar, @nick-shaw)
    • Implement support for FilmLight E-Gamut colourspace and its log encoding curve with the colour.models.FILMLIGHT_E_GAMUT_COLOURSPACEattribute andcolour.models.log_encoding_FilmLightTLogandcolour.models.log. log_decoding_FilmLightTLog` definitions. (@nick-shaw)

    The following definitions have now support for CA bypass by using the None builtin as chromatic_adaptation_transform argument: (@KelSolaar, @scoopxyz)

    colour.XYZ_to_RGB

    colour.RGB_to_XYZ

    colour.RGB_to_RGB_matrix

    colour.RGB_to_RGB

    Implement support for Sharp RGB colourspace from Ward and Eydelberg-Vileshin (2002) with colour.models.SHARP_RGB_COLOURSPACE attribute.

    colour.plotting

    • Implement colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931, colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS and colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS definitions plotting MacAdam (1942) Ellipses (Observer PGN) in the Chromaticity Diagram. (@KelSolaar)

    image

    • Implement colour.plotting.plot_pointer_gamut definition plotting Pointer's Gamut . (@KelSolaar)
    • Implement support for colour rendition charts comparison with colour.plotting.plot_multi_colour_checkers definition. (@KelSolaar)

    image

    • Implement colour.plotting.plot_single_function and colour.plotting.plot_multi_functions definitions. (@KelSolaar)
    • Implement colour.plotting.plot_single_luminance_function and colour.plotting.plot_multi_luminance_functions definitions. (@KelSolaar)
    • Implement colour.plotting.filter_passthrough utility definition. (@KelSolaar)

    colour.utilities

    • Implement support for multiple different domain-range scales with the following objects: (@KelSolaar)
      • colour.get_domain_range_scale definition which returns the current domain-range scale.
      • colour.set_domain_range_scale definition which sets the current domain-range scale.
      • colour.domain_range_scale decorator/context manager which sets the current domain-range scale for the scope of the decorated objects or context.
    • Implement colour.utilities.metric_mse and colour.utilities.metric_psnr definitions computing respectively mean squared error (MSE) and peak signal-to-noise ratio (PSNR). (@KelSolaar)
    • Implement colour.utilities.describe_environment definition that outputs the important information about the current environment: (@KelSolaar)

      environment = colour.utilities.describe_environment()

      • *
      • Interpreter : *
      • python : 2.7.14 | packaged by conda-forge | (default, Dec 25 2017, *
      • 01:18:54) *
      • [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] *
      • *
      • colour-science.org : *
      • colour : v0.3.11-323-g380c1838 *
      • *
      • Runtime : *
      • numpy : 1.14.3 *
      • scipy : 1.0.0 *
      • pandas : 0.22.0 *
      • matplotlib : 2.2.2 *
      • notebook : 5.4.0 *
      • ipywidgets : 7.2.1 *

      * *

    • Implement colour.utilities.filter_mapping utility definition. (@KelSolaar)

    • Implement colour.utilities.as_array, colour.utilities.as_int_array, colour.utilities.as_float_array, colour.utilities.as_int, and colour.utilities.as_float utility definitions (@KelSolaar, @MichaelMauderer)

    colour.volume

    • Implement colour.volume.XYZ_outer_surface definition generating CIE XYZ colourspace outer surface. (@KelSolaar)
    • Implement colour.volume.generate_pulse_waves definition generating pulse waves for CIE XYZ colourspace outer surface computation. (@KelSolaar)

    ๐Ÿ›  Fixes

    colour.appearance

    • CAM16 computations were incorrect because of a faulty D intermediate variable calculation, colour.XYZ_to_CAM16 and colour.CAM16_to_XYZ definitions are affected. (@KelSolaar, @crowsonkb)
    • CIECAM02 Dim induction factor N_c has been changed from 0.95 to 0.9 to match the CIE recommendation. (@KelSolaar, Mark D. Fairchild)
    • Handles NaNs gracefully incolour.XYZ_to_ATD95 definition. (@KelSolaar)

    colour.colorimetry

    • CIE Illuminant D Series D60 illuminant chromaticity coordinates and spectral distribution were incorrect because of the mistaken assumption that ACES whitepoint is CIE Illuminant D Series D60:
    Whitepoint Chromaticity Coordinates
    ACES [0.32168, 0.33767]
    D60 [0.32163, 0.33774]

    As a consequence, colour.ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D60'], colour.ILLUMINANTS['CIE 1964 10 Degree Standard Observer']['D60'] and colour.ILLUMINANTS_SDS['D60'] values have changed and a new colour.ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['ACES'] illuminant has been introduced.

    • colour.sd_CIE_illuminant_D_series definition has been updated to conform to CIE 015:2004 recommendation and its output now better matches tabulated data. (@KelSolaar)
    • colour.lightness and colour.luminance definitions now use consistent domain/range for Fairchild (2010) and Fairchild (2011) methods.

    colour.models

    • Fixes incorrect computation of epsilon value for hdr-CIELAB and hdr-IPT 2011 colourspaces: colour.XYZ_to_hdr_CIELab, colour.hdr_CIELab_to_XYZ, colour.XYZ_to_hdr_IPT and colour.hdr_IPT_to_XYZ definitions output is affected for the Fairchild 2011 method. (@KelSolaar, @sobotka)

    colour.volume

    • colour.is_within_visible_spectrum definition has been overhauled and now relies on a proper computation of CIE XYZ colourspace outer surface. As a consequence, colour.RGB_colourspace_visible_spectrum_coverage_MonteCarlo definition output is largely affected and RGB colourspaces have increased coverage, e.g. for sRGB: 36% to 49%.

    ๐Ÿ”„ Changes

    colour.algebra

    • colour.algebra.random_triplet_generator definition now returns a ndarray instead of an iterator, memory consumption is higher but speed is increased.

    colour.characterisation

    • colour.first_order_colour_fit: (@KelSolaar)
      • Name: colour_correction_matrix
    • colour.COLOURCHECKERS_SPDS: (@KelSolaar)
      • Name: COLOURCHECKERS_SDS
    • colour.COLOURCHECKERS_SDS spectral distributions are now ordered according to the colour rendition chart samples order thus colour.characterisation.COLOURCHECKER_INDEXES_TO_NAMES_MAPPING is not needed anymore. (@KelSolaar)
    • colour.characterisation.COLOURCHECKER_INDEXES_TO_NAMES_MAPPING: (@KelSolaar)
      • Remove
    • colour.COLOURCHECKERS are now using an ordered dict instead of instances of colour.characterisation.dataset.colour_checkers.chromaticity_coordinates.ColourChecker_Specification class. (@KelSolaar)
    • colour.characterisation.dataset.colour_checkers.chromaticity_coordinates.ColourChecker_Specification: (@KelSolaar)
      • Remove

    colour.colorimetry

    • All the Illuminants and light sources now use a linear interpolator by default for consistency with CIE Standard Illuminant D Series which should be linearly interpolated as per CIE 15:2004 recommendations. (@KelSolaar)
    • CIE Standard Illuminant A uses chromaticity coordinates as given in CIE 015:2004 Colorimetry, 3rd Edition.
    • CIE Illuminant D Series D55 uses chromaticity coordinates as given in CIE 015:2004 Colorimetry, 3rd Edition.
    • CIE Illuminant D Series D75 uses chromaticity coordinates as given in CIE 015:2004 Colorimetry, 3rd Edition.
    • Illuminants F Series use chromaticity coordinates as given in CIE 015:2004 Colorimetry, 3rd Edition.
    • Illuminants F Series that were using HunterLab naming convention have been renamed to CIE naming convention, e.g. F1 has been renamed to FL1, F2 to FL2 and so forth.
    • colour.blackbody_spd: (@KelSolaar)
      • Name: sd_blackbody
    • colour.CIE_standard_illuminant_A_function: (@KelSolaar)
      • Name: sd_CIE_standard_illuminant_A
      • Return: colour.SpectralDistribution
    • colour.constant_spd: (@KelSolaar)
      • Name: sd_constant
    • colour.D_illuminant_relative_spd: (@KelSolaar)
      • Name: sd_CIE_illuminant_D_series
      • Signature: sd_CIE_illuminant_D_series(xy, M1_M2_rounding=True)
    • colour.ILLUMINANTS_RELATIVE_SPDS: (@KelSolaar)
      • Name: ILLUMINANTS_SDS
    • colour.LIGHT_SOURCES_RELATIVE_SPDS: (@KelSolaar)
      • Name: LIGHT_SOURCES_SDS
    • colour.colorimetry.lightness_Fairchild2011: (@KelSolaar)
      • Signature: lightness_Fairchild2011(Y, epsilon=0.474, method='hdr-CIELAB')
    • colour.colorimetry.luminance_Fairchild2011: (@KelSolaar)
      • Signature: luminance_Fairchild2011(L_hdr, epsilon=0.474, method='hdr-CIELAB')
    • colour.mesopic_luminous_efficiency_function: (@KelSolaar)
      • Name: sd_mesopic_luminous_efficiency_function
    • colour.MultiSpectralPowerDistribution: (@KelSolaar)
      • Name: MultiSpectralDistribution
    • colour.ones_spd: (@KelSolaar)
      • Name: sd_ones
    • colour.SpectralPowerDistribution: (@KelSolaar)
      • Name: SpectralDistribution
    • colour.SPECTRAL_TO_XYZ_METHODS: (@KelSolaar)
      • Name: SD_TO_XYZ_METHODS
    • colour.spectral_to_XYZ: (@KelSolaar)
      • Name: sd_to_XYZ
      • Signature: sd_to_XYZ(sd, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(ASTME30815_PRACTISE_SHAPE), k=None, method='ASTM E308-15', **kwargs)
    • colour.zeros_spd: (@KelSolaar)
      • Name: sd_zeros
    • colour.colorimetry.spectral_to_XYZ_ASTME30815: (@KelSolaar)
      • Name: sd_to_XYZ_ASTME30815
      • Signature: sd_to_XYZ_ASTME30815(sd, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(ASTME30815_PRACTISE_SHAPE), use_practice_range=True, mi_5nm_omission_method=True, mi_20nm_interpolation_method=True, k=None)
    • colour.colorimetry.spectral_to_XYZ_integration: (@KelSolaar)
      • Name: sd_to_XYZ_integration
      • Signature: sd_to_XYZ_integration(sd, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].shape), k=None)
    • colour.colorimetry.spectral_to_XYZ_tristimulus_weighting_factors_ASTME30815: (@KelSolaar)
      • Name: sd_to_XYZ_tristimulus_weighting_factors_ASTME30815
      • Signature: sd_to_XYZ_tristimulus_weighting_factors_ASTME30815(sd, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(ASTME30815_PRACTISE_SHAPE), k=None)
    • colour.colorimetry.tristimulus_weighting_factors_ASTME202211: (@KelSolaar)
      • Signature: tristimulus_weighting_factors_ASTME202211cmfs, illuminant, shape, k=None)

    colour.constants

    • colour.constants.CIE_E: (@KelSolaar)
      • Remove: The CIE 1976, e.g. Lightness (CIE 1976), Luminance (CIE 1976), CIE L*a*b*, CIE L*u*v** related code uses the algorithm recommended in CIE 015:2004 Colorimetry, 3rd Edition.
    • colour.constants.CIE_K: (@KelSolaar)
      • Remove: The CIE 1976, e.g. Lightness (CIE 1976), Luminance (CIE 1976), CIE L*a*b*, CIE L*u*v** related code uses the algorithm recommended in CIE 015:2004 Colorimetry, 3rd Edition.

    colour.io

    • colour.IES_TM2714_Spd: (@KelSolaar)
      • Name: SpectralDistribution_IESTM2714
    • colour.read_image: (@KelSolaar, @nick-shaw)
      • Signature: read_image(path, bit_depth='float32', attributes=False)
    • colour.read_spds_from_csv_file: (@KelSolaar)
      • Name: read_sds_from_csv_file
    • colour.read_spds_from_xrite_file: (@KelSolaar)
      • Name: read_sds_from_xrite_file
    • colour.write_spds_to_csv_file: (@KelSolaar)
      • Name: write_sds_to_csv_file

    colour.models

    • colour.RGB_Colourspace.illuminant: (@KelSolaar)
      • Name: whitepoint_name
    • colour.spectral_to_aces_relative_exposure_values: (@KelSolaar)
      • Name: sd_to_aces_relative_exposure_values
    • colour.models.DCI_P3_COLOURSPACE and colour.models.DCI_P3_P_COLOURSPACE colourspaces CCTFs have been changed for Gamma 2.6. (@KelSolaar, @codycuellar)

    0๏ธโƒฃ The following transfer functions now take and output floating point values by default:

    colour.models.oetf_DCIP3: (@KelSolaar, @codycuellar)

    • Name: eotf_reverse_DCDM

    - Signature: eotf_reverse_DCDM(XYZ, out_int=False)

    colour.models.eotf_DCIP3: (@KelSolaar, @codycuellar)

    • Name: eotf_DCDM

    - Signature: oetf_DCDM(XYZ, in_int=False)

    colour.models.oetf_DICOMGSDF: (@KelSolaar)

    - Signature: oetf_DICOMGSDF(L, out_int=False)

    colour.models.eotf_DICOMGSDF: (@KelSolaar)

    - Signature: eotf_DICOMGSDF(J, in_int=False)

    colour.models.oetf_ROMMRGB: (@KelSolaar)

    - Signature: oetf_ROMMRGB(X, bit_depth=8, out_int=False)

    colour.models.eotf_ROMMRGB: (@KelSolaar)

    - Signature: eotf_ROMMRGB(X_p, bit_depth=8, in_int=False)

    colour.models.oetf_ProPhotoRGB: (@KelSolaar)

    - Signature: oetf_ProPhotoRGB(X, bit_depth=8, out_int=False)

    colour.models.eotf_ProPhotoRGB: (@KelSolaar)

    - Signature: eotf_ProPhotoRGB(X_p, bit_depth=8, in_int=False)

    colour.models.oetf_RIMMRGB: (@KelSolaar)

    - Signature: oetf_RIMMRGB(X, bit_depth=8, out_int=False, E_clip=2.0)

    colour.models.eotf_RIMMRGB: (@KelSolaar)

    - Signature: eotf_RIMMRGB(X_p, bit_depth=8, in_int=False, E_clip=2.0)

    colour.models.log_encoding_ERIMMRGB: (@KelSolaar)

    - Signature: log_encoding_ERIMMRGB(X, bit_depth=8, out_int=False, E_min=0.001, E_clip=316.2)

    colour.models.log_decoding_ERIMMRGB: (@KelSolaar)

    - Signature: log_decoding_ERIMMRGB(X_p, bit_depth=8, in_int=False, E_min=0.001, E_clip=316.2)

    RED colourspaces primaries have been chromatically adapted to D65 illuminant as Graeme Natress confirmed RED is using D65. (@nick-shaw)
    The following colourspaces are affected:

    • colour.models.RED_COLOR_COLOURSPACE
    • colour.models.RED_COLOR_2_COLOURSPACE
    • colour.models.RED_COLOR_3_COLOURSPACE
    • colour.models.RED_COLOR_4_COLOURSPACE
    • colour.models.DRAGON_COLOR_COLOURSPACE

    - colour.models.DRAGON_COLOR_2_COLOURSPACE

    colour.function_gamma: (@KelSolaar)

    - Name: gamma_function

    colour.function_linear: (@KelSolaar)

    • Name: linear_function

    colour.phenomena

    • colour.rayleigh_scattering_spd: (@KelSolaar)
      • Name: sd_rayleigh_scattering

    colour.plotting

    • colour.plotting.boundaries: (@KelSolaar)
      • Remove: Functionality has been moved to colour.plotting.render definition.
    • colour.plotting.decorate: (@KelSolaar)
      • Remove: Functionality has been moved to colour.plotting.render definition.
    • colour.plotting.display: (@KelSolaar)
      • Remove: Functionality has been moved to colour.plotting.render definition.
    • colour.plotting.colour_plotting_defaults: (@KelSolaar)
      • Name: colour_plotting_style
    • colour.plotting.get_RGB_colourspace: (@KelSolaar)
      • Name: filter_RGB_colourspaces
      • Signature: filter_RGB_colourspaces(filterer, flags=re.IGNORECASE):
    • colour.plotting.get_cmfs: (@KelSolaar)
      • Name: filter_cmfs
      • Signature: filter_cmfs(filterer, flags=re.IGNORECASE):
    • colour.plotting.get_illuminant: (@KelSolaar)
      • Name: filter_illuminants
      • Signature: filter_illuminants(filterer, flags=re.IGNORECASE):
    • colour.plotting. label_rectangles: (@KelSolaar)
      • Signature: label_rectangles(labels, rectangles, rotation='vertical', text_size=10, offset=None)
    • colour.plotting.cvd_simulation_Machado2009_plot: (@KelSolaar)
      • Name: plot_cvd_simulation_Machado2009
    • colour.plotting.single_colour_checker_plot: (@KelSolaar)
      • Name: plot_single_colour_checker
    • colour.plotting.multi_colour_checker_plot: (@KelSolaar)
      • Name: plot_multi_colour_checkers
    • colour.plotting.single_spd_plot: (@KelSolaar)
      • Name: plot_single_sd
    • colour.plotting.multi_spd_plot: (@KelSolaar)
      • Name: plot_multi_sds
    • colour.plotting.single_cmfs_plot: (@KelSolaar)
      • Name: plot_single_cmfs
    • colour.plotting.multi_cmfs_plot: (@KelSolaar)
      • Name: plot_multi_cmfs
    • colour.plotting.single_illuminant_spd_plot: (@KelSolaar)
      • Name: plot_single_illuminant_sd
    • colour.plotting.multi_illuminant_spd_plot: (@KelSolaar)
      • Name: plot_multi_illuminant_sds
    • colour.plotting.visible_spectrum_plot: (@KelSolaar)
      • Name: plot_visible_spectrum
    • colour.plotting.single_lightness_function_plot: (@KelSolaar)
      • Name: plot_single_lightness_function
    • colour.plotting.multi_lightness_function_plot: (@KelSolaar)
      • Name: plot_multi_lightness_functions
    • colour.plotting.plot_single_lightness_function and colour.plotting.plot_multi_lightness_functions definitions now render normalised Lightness. (@KelSolaar)
    • colour.plotting.blackbody_spectral_radiance_plot: (@KelSolaar)
      • Name: plot_blackbody_spectral_radiance
    • colour.plotting.blackbody_colours_plot: (@KelSolaar)
      • Name: plot_blackbody_colours
    • colour.plotting.single_colour_swatch_plot: (@KelSolaar)
      • Name: plot_single_colour_swatch
    • colour.plotting.multi_colour_swatch_plot: (@KelSolaar)
      • Name: plot_multi_colour_swatches
      • Signature: plot_multi_colour_swatches(colour_swatches, width=1, height=1, spacing=0, columns=3, text_parameters=None, background_colour=(1.0, 1.0, 1.0), compare_swatches=None, **kwargs)
    • colour.plotting.image_plot: (@KelSolaar)
      • Name: plot_image
      • Signature: plot_image(image, text_parameters=None, interpolation='nearest', colour_map=matplotlib.cm.Greys_r, **kwargs)
    • colour.plotting.corresponding_chromaticities_prediction_plot: (@KelSolaar)
      • Name: plot_corresponding_chromaticities_prediction
    • colour.plotting.spectral_locus_plot: (@KelSolaar)
      • Name: plot_spectral_locus
    • colour.plotting.chromaticity_diagram_colours_plot: (@KelSolaar)
      • Name: plot_chromaticity_diagram_colours
    • colour.plotting.chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_chromaticity_diagram
    • colour.plotting.chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_chromaticity_diagram_CIE1931
      • Signature: plot_chromaticity_diagram_CIE1931(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, show_spectral_locus=True, wavelength_labels=None, **kwargs)
    • colour.plotting.chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_chromaticity_diagram_CIE1960UCS
      • Signature: plot_chromaticity_diagram_CIE1960UCS(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, show_spectral_locus=True, wavelength_labels=None, **kwargs)
    • colour.plotting.chromaticity_diagram_plot_CIE1976UCS: (@KelSolaar)
      • Name: plot_chromaticity_diagram_CIE1976UCS
      • Signature: plot_chromaticity_diagram_CIE1976UCS(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, show_spectral_locus=True, wavelength_labels=None, **kwargs)
    • colour.plotting.spds_chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_sds_in_chromaticity_diagram
    • colour.plotting.spds_chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_sds_in_chromaticity_diagram_CIE1931
      • Signature: plot_sds_in_chromaticity_diagram_CIE1931(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_parameters=None, chromaticity_diagram_callable_CIE1931=chromaticity_diagram_plot_CIE1931, **kwargs)
    • colour.plotting.spds_chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_sds_in_chromaticity_diagram_CIE1960UCS
      • Signature: plot_sds_in_chromaticity_diagram_CIE1960UCS(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_parameters=None, chromaticity_diagram_callable_CIE1960UCS=chromaticity_diagram_plot_CIE1960UCS, **kwargs)
    • colour.plotting.spds_chromaticity_diagram_plot_CIE1976UCS: (@KelSolaar)
      • Name: plot_sds_in_chromaticity_diagram_CIE1976UCS
      • Signature: plot_sds_in_chromaticity_diagram_CIE1976UCS(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_parameters=None, chromaticity_diagram_callable_CIE1976UCS=chromaticity_diagram_plot_CIE1976UCS, **kwargs)
    • colour.plotting.RGB_colourspaces_chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_RGB_colourspaces_in_chromaticity_diagram
    • colour.plotting.RGB_colourspaces_chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931
    • colour.plotting.RGB_colourspaces_chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS
    • colour.plotting.RGB_colourspaces_chromaticity_diagram_plot_CIE1976UCS: (@KelSolaar)
      • Name: plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS
    • colour.plotting.RGB_chromaticity_coordinates_chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_RGB_chromaticities_in_chromaticity_diagram
    • colour.plotting.RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931
      • Signature: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1931=RGB_colourspaces_chromaticity_diagram_plot_CIE1931, scatter_parameters=None, **kwargs)
    • colour.plotting.RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS
      • Signature: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1960UCS=RGB_colourspaces_chromaticity_diagram_plot_CIE1960UCS, scatter_parameters=None, **kwargs)
    • colour.plotting.RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1976UCS: (@KelSolaar)
      • Name: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS
      • Signature: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1976UCS= RGB_colourspaces_chromaticity_diagram_plot_CIE1976UCS, scatter_parameters=None, **kwargs)
    • colour.plotting.single_cctf_plot: (@KelSolaar)
      • Name: plot_single_cctf
    • colour.plotting.multi_cctf_plot: (@KelSolaar)
      • Name: plot_multi_cctfs
    • colour.plotting.single_munsell_value_function_plot: (@KelSolaar)
      • Name: plot_single_munsell_value_function
    • colour.plotting.multi_munsell_value_function_plot: (@KelSolaar)
      • Name: plot_multi_munsell_value_functions
    • colour.plotting.single_rayleigh_scattering_spd_plot: (@KelSolaar)
      • Name: plot_single_sd_rayleigh_scattering
    • colour.plotting.the_blue_sky_plot: (@KelSolaar)
      • Name: plot_the_blue_sky
    • colour.plotting.colour_quality_bars_plot: (@KelSolaar)
      • Name: plot_colour_quality_bars
    • colour.plotting.single_spd_colour_rendering_index_bars_plot: (@KelSolaar)
      • Name: plot_single_sd_colour_rendering_index_bars
    • colour.plotting.multi_spd_colour_rendering_index_bars_plot: (@KelSolaar)
      • Name: plot_multi_sds_colour_rendering_indexes_bars
    • colour.plotting.single_spd_colour_quality_scale_bars_plot: (@KelSolaar)
      • Name: plot_single_sd_colour_quality_scale_bars
    • colour.plotting.multi_spd_colour_quality_scale_bars_plot: (@KelSolaar)
      • Name: plot_multi_sds_colour_quality_scales_bars
    • colour.plotting.planckian_locus_plot: (@KelSolaar)
      • Name: plot_planckian_locus
    • colour.plotting.planckian_locus_chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_planckian_locus_in_chromaticity_diagram
    • colour.plotting.planckian_locus_chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_planckian_locus_in_chromaticity_diagram_CIE1931
    • colour.plotting.planckian_locus_chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS
    • colour.plotting.RGB_colourspaces_gamuts_plot: (@KelSolaar)
      • Name: plot_RGB_colourspaces_gamuts
      • Signature: `plot_RGB_colourspaces_gamuts(colourspaces=None, reference_colourspace='CIE xyY', segments=8, show_grid=True, grid_segments=10, show_spectral_locus=False, spectral_locus_colour=None, cmfs='CIE 1931 2 Degree Standard Observer', **kwargs)
    • colour.plotting.RGB_scatter_plot: (@KelSolaar)
      • Name: plot_RGB_scatter
      • Signature: `plot_RGB_scatter(RGB, colourspace, reference_colourspace='CIE xyY', colourspaces=None, segments=8, show_grid=True, grid_segments=10, show_spectral_locus=False, spectral_locus_colour=None, points_size=12, cmfs='CIE 1931 2 Degree Standard Observer', **kwargs)

    colour.recovery

    • colour.REFLECTANCE_RECOVERY_METHODS: (@KelSolaar)
      • Name: XYZ_TO_SD_METHODS
    • colour.XYZ_to_spectral: (@KelSolaar)
      • Name: XYZ_to_sd
    • colour.recovery.RGB_to_spectral_Smits1999: (@KelSolaar)
      • Name: RGB_to_sd_Smits1999
    • colour.recovery.RGB_to_sd_Smits1999 output spectral distribution defaults to colour.LinearInterpolator interpolator. (@KelSolaar)
    • colour.recovery.XYZ_to_spectral_Meng2015: (@KelSolaar)
      • Name: XYZ_to_sd_Meng2015
      • Signature: XYZ_to_sd_Meng2015(XYZ, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], interval=5, optimisation_parameters=None)

    colour.utilities

    • โš  colour.utilities.filter_warnings: (@KelSolaar)
      • Signature: filter_warnings(state=True, colour_warnings=True, colour_runtime_warnings=False, colour_usage_warnings=False, python_warnings=False)
    • colour.utilities.message_box: (@KelSolaar)
      • Signature: message_box(message, width=79, padding=3, print_callable=print)
    • colour.utilities.as_numeric: (@KelSolaar)
      • Signature: as_numeric(a, dtype=DEFAULT_FLOAT_DTYPE)

    colour.volume

    • colour.is_within_visible_spectrum: (@KelSolaar)
      • Signature: is_within_visible_spectrum(XYZ, interval=10, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].shape), tolerance=None)