Colour Versions Save

Colour Science for Python

v0.4.4

4 months ago

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_AppleLogProfile and colour.models.log_decoding_AppleLogProfile definitions. (@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.AbstractContinuousFunction class and sub-classes, e.g. colour.SpectralDistribution class, can be pickled. (#66c26b6, @KelSolaar)

colour.difference

  • Fix numerical precision issue in colour.difference.delta_E_CIE1994 definition. (#1206, @volrak, @KelSolaar)

colour.utilities

  • Fix issue in colour.utilities.verbose.multiline_repr definition when an attribute representation is None. (#1466, @KelSolaar)

Changes

Unit Tests

  • We have changed our unit tests to use np.testing.assert_allclose rather than np.testing.assert_array_almost_equal to help with tests failing on Github Actions because of minor precision issues when using pytest-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 ...

v0.4.3

8 months ago

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:

Features

colour.characterisation

  • Add TE226 V2 colour checker reference values. (#1113, #901, @Rusching)
  • Add colour.apply_matrix_colour_correction definition and colour.APPLY_MATRIX_COLOUR_CORRECTION_METHODS attribute to conveniently apply a colour-correction matrix computed with the colour.matrix_colour_correction definition. (@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.SpectralDistribution and colour.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_Yrg and colour.Yrg_to_XYZ definitions. (#1152, @KelSolaar)
  • Implement support for Fujifilm F-Log2 encodings with colour.models.log_decoding_FLog2 and colour.models.log_encoding_FLog2 definitions. (#1076, @zachlewis)
  • Implement support for PLASA ANSI E1.54 colourspace with colour.models.RGB_COLOURSPACE_PLASA_ANSI_E154 attribute. (#1193, @KelSolaar)

colour.notation

  • Implement support for CSS Color 3 with colour.notation.CSS_COLOR_3 attribute and colour.notation.keyword_to_RGB_CSSColor3 definition. (#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_CIE1960UCS and colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS definitions. (@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_locus definition. (@KelSolaar)
  • Add a new planckian_locus_use_mireds keyword argument to colour.plotting.temperature.plot_planckian_locus definition. (@KelSolaar)

image

colour.temperature

  • Add colour.temperature.mired_to_CCT and colour.temperature.CCT_to_mired definitions to perform micro reciprocal degree and CCT conversions. (#1114, @KelSolaar)
  • Add colour.temperature.XYZ_to_CCT_Ohno2013 and colour.temperature.CCT_to_XYZ_Ohno2013 convenient definitions. (#1120, @tjdcs)

colour.utilities

  • Add colour.utilities.int_digest definition using xxhash to compute 64-bit integer hashes. (#1149, @KelSolaar, @tjdcs)

Performance

  • The Colour Fidelity Index (2017), i.e. colour.quality.colour_fidelity_index_CIE2017 definition, and TM 30-18, i.e. colour.quality.colour_fidelity_index_ANSIIESTM3018 definition, metrics performance has been improved by x100 thanks to overall optimizations, e.g. colour.temperature.uv_to_CCT_Ohno2013 definition is x5 faster. (#1120, @tjdcs, @KelSolaar)

Fixes

Dependencies

colour.io

  • Fix incorrect bit-depth conversion in colour.io.write_image_OpenImageIO definition when writing 16-bit integer images (82ef2c4376d606f2576804f353926eb8f2bfb219, @Nick-Shaw, @KelSolaar)

colour.colorimetry

  • Fix incorrect colour.colorimetry.sd_gaussian_fwhm definition output (#1184, @EricFlyMeToTheMoon, @tjdcs, @KelSolaar)

colour.models

  • Implement various minor corrections from Sarifuddin (2021) to colour.RGB_to_HCL definition. (1a580ef610d5afc9c1f867a430e48f134a30db6a, @KelSolaar)

colour.phenomena

  • Fix incorrect CO2 concentration scaling in colour.phenomena.rayleigh.F_air_Bodhaine1999 definition. (#307, #1167, @chnmasta05, @KelSolaar)

colour.utilities

  • Fix dimensionality reduction issue in colour.utilities.as_float definition 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_idt definition is whitepoint preserving using the colour.characterisation.optimisation_factory_rawtoaces_v1 optimisation factory. (@KelSolaar)
  • Implement support for Finlayson et al. (2015) root-polynomials colour correction with colour.characterisation.optimisation_factory_Oklab_15 optimisation factory. (@KelSolaar)
  • The colour.matrix_idt definition optimisation factories are now returning 4 objects. (@KelSolaar)

colour.models

  • The colour.XYZ_to_xy and colour.XYZ_to_xyY definitions do no return the parameter illuminant chromaticities when the luminance Y is 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.RGB_to_XYZ `RGB_to_XYZ(RGB: ArrayLike, colourspace: RGB_Colourspace str, illuminant: ArrayLike
colour.matrix_RGB_to_RGB `matrix_RGB_to_RGB(input_colourspace: RGB_Colourspace str, output_colourspace: RGB_Colourspace
colour.RGB_to_RGB `RGB_to_RGB(RGB: ArrayLike, input_colourspace: RGB_Colourspace str, output_colourspace: RGB_Colourspace
colour.XYZ_to_xy XYZ_to_xy(XYZ: ArrayLike) -> NDArrayFloat ...
colour.XYZ_to_xyY XYZ_to_xyY(XYZ: ArrayLike) -> NDArrayFloat ...
colour.models.log_decoding_ACESproxy `log_decoding_ACESproxy(ACESproxy: ArrayLike, bit_depth: Literal[10, 12] = 10, in_int: bool = False, constants: dict None = None) -> NDArrayFloat`

colour.plotting

  • colour.plotting.plot_multi_sds and colour.plotting.diagram.plot_sds_in_chromaticity_diagram definitions now default to use CIE Illuminant E when computing spectrum colours. (510860ac2e4715a6d5434c76f61bc26f95fe24fa, @KelSolaar)

colour.quality

  • The colour.spectral_similarity_index definition has been updated to 2020 publication update. (#1163, @benjaminherb)
Object Signature Author
colour.spectral_similarity_index spectral_similarity_index(sd_test: SpectralDistribution, sd_reference: SpectralDistribution, round_result: bool = True) -> NDArrayFloat @tjdcs

v0.4.2

1 year ago

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:

Features

colour.appearance

  • Implement support for Hellwig and Fairchild (2022) colour appearance model with colour.XYZ_to_Hellwig2022 and colour.Hellwig2022_to_XYZ definitions. (#972 @KelSolaar)
  • Implement support for CIECAM16 colour appearance model with colour.XYZ_to_CIECAM16 and colour.CIECAM16_to_XYZ definitions. (#1015, @KelSolaar)

colour.colorimetry

  • Add convenient colour.SpectralShape.wavelengths property. (@KelSolaar)

colour.difference

  • Implement support for Recommendation ITU-R BT.2124 with colour.difference.delta_E_ITP definition. (#981, @sabarish-srinivasan)

colour.io

  • Implement simple wrapper for the Color Transformation Language (CTL) with the colour.io.ctl_render and colour.io.process_image_ctl definitions. (#977, @KelSolaar)

colour.models

  • Implement support for Munish Ragoo and Farup (2021) Optimised IPT colourspace with colour.XYZ_to_IPT_Munish2021 and colour.IPT_Munish2021_to_XYZ definitions. (#990, @KelSolaar)

  • Implement support for Leica L-Log log encodings with colour.models.log_encoding_LLog and colour.models.log_decoding_LLog definitions. (#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_ITUTH273 and colour.MATRIX_COEFFICIENTS_ITUTH273 attributes and colour.models.describe_video_signal_colour_primaries, colour.models.describe_video_signal_transfer_characteristics and colour.models.describe_video_signal_matrix_coefficients definitions. (#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_4 attribute and colour.models.log_encoding_ARRILogC4 and colour.models.log_decoding_ARRILogC4 definitions. (#1056, @KelSolaar)

    For consistency:

    • The colour.models.RGB_COLOURSPACE_ALEXA_WIDE_GAMUT attribute has been renamed to RGB_COLOURSPACE_ARRI_WIDE_GAMUT_3.
    • The colour.models.log_encoding_ALEXALogC and colour.models.log_decoding_ALEXALogC definitions have been renamed to log_encoding_ARRILogC3 and log_decoding_ARRILogC3 respectively.
    • Keys in the various mappings, e.g. colour.RGB_COLOURSPACES, colour.LOG_ENCODINGS, have been renamed accordingly.

colour.recovery

GSoC - 2021

  • Implement support for Jiang et al. (2013) camera RGB sensitivities recovery with colour.recovery.RGB_to_msds_camera_sensitivities_Jiang2013 definition. (#1002, @villirion, @KelSolaar)

Camera RGB Sensitivities Recovery

colour.utilities

  • The colour.utilities.CanonicalMapping and colour.utilities.LazyCanonicalMapping, fomerly colour.utilities.CaseInsensitiveMapping and colour.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_Ohno2013 definition is ~100x faster. (#951, @KelSolaar)
  • colour.temperature.CCT_to_uv_Ohno2013 definition is ~425x faster. (#951, @KelSolaar)
  • Creation of the colour.Signal class underlying continuous function now happens lazilly. (#1057, @tjdcs)
  • colour.SpectralDistribution.shape property getter is faster by ensuring monotonicity of the colour.SpectralDistribution.domain property. (#1067, 85f6a57aa604718b2c72e9d9ebb945cd712f9047, @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 Author
colour.sd_to_aces_relative_exposure_values sd_to_aces_relative_exposure_values(sd: SpectralDistribution, illuminant: Optional[SpectralDistribution] = None, chromatic_adaptation_transform: Optional[Union[Literal["Bianco 2010", "Bianco PC 2010", "Bradford", "CAT02 Brill 2008", "CAT02", "CAT16", "CMCCAT2000", "CMCCAT97", "Fairchild", "Sharp", "Von Kries", "XYZ Scaling", ], str, ]]= "CAT02") -> NDArray @KelSolaar

colour.colorimetry

  • The return value of the colour.sd_to_XYZ and colour.msds_to_XYZ definition is by default divided by 100 when k is not None. (#1020, @KelSolaar, @tjdcs)
  • The CIE 2012 2 Degree Standard Observer and CIE 2012 10 Degree Standard Observer keys in the colour.MSDS_CMFS attribute have been renamed to CIE 2015 2 Degree Standard Observer and CIE 2015 10 Degree Standard Observer respectively for consistency with their official CIE names. (@KelSolaar)
Object Signature Author
colour.colorimetry.msds_to_XYZ_ASTME308 msds_to_XYZ_ASTME308(msds: MultiSpectralDistributions, cmfs: Optional[MultiSpectralDistributions] = None, illuminant: Optional[SpectralDistribution] = None, use_practice_range: Boolean = True, mi_5nm_omission_method: Boolean = True, mi_20nm_interpolation_method: Boolean = True, k: Optional[Number] = None ) -> NDArray @tjdcs

colour.graph

  • The conversion paths starting from Spectral Distribution do not use CIE Standard Illuminant D65 anymore by default during the conversion to CIE XYZ tristimulus values. (#1059, @ema2159, @KelSolaar)

colour.io

colour.models

  • The DCI-P3+ key in the colour.RGB_COLOURSPACES mapping has been renamed to DCI-P3-P to avoid canonical key collisions. (@KelSolaar, @zachlewis)
Object Name Author
colour.models.RGB_COLOURSPACE_ALEXA_WIDE_GAMUT RGB_COLOURSPACE_ARRI_WIDE_GAMUT_3 @KelSolaar
colour.models.eotf_inverse_BT2020 oetf_BT2020 @KelSolaar, @fxthomas
colour.models.eotf_BT2020 oetf_inverse_BT2020 ...
colour.models.oetf_PQ_BT2100 oetf_BT2100_PQ @KelSolaar
colour.models.oetf_inverse_PQ_BT2100 oetf_inverse_BT2100_PQ ...
colour.models.eotf_PQ_BT2100 eotf_BT2100_PQ ...
colour.models.eotf_inverse_PQ_BT2100 eotf_inverse_BT2100_PQ ...
colour.models.ootf_PQ_BT2100 ootf_BT2100_PQ ...
colour.models.ootf_inverse_PQ_BT2100 ootf_inverse_BT2100_PQ ...
colour.models.oetf_HLG_BT2100 oetf_BT2100_HLG ...
colour.models.oetf_inverse_HLG_BT2100 oetf_inverse_BT2100_HLG ...
colour.models.eotf_HLG_BT2100 eotf_BT2100_HLG ...
colour.models.eotf_inverse_HLG_BT2100 eotf_inverse_BT2100_HLG ...
colour.models.log_encoding_ALEXALogC log_encoding_ARRILogC3 ...
colour.models.log_decoding_ALEXALogC log_decoding_ARRILogC3 ...
colour.models.ootf_HLG_BT2100 ootf_BT2100_HLG ...
colour.models.ootf_inverse_HLG_BT2100 ootf_inverse_BT2100_HLG ...

colour.plotting

  • Fix incorrect value for CRI R9 in TM-30-18 report. (@kohler-t)

  • All the plotting definitions relying on the colour.plotting.common.filter_RGB_colourspaces, colour.plotting.common.filter_cmfs, colour.plotting.common.filter_illuminants and colour.plotting.common.filter_colour_checkers definitions do not accept a RegEx pattern anymore but a basic string. It is possible to also use any of the lower, slugified or canonical values:

  • ntsc (1953)

  • ntsc-1953

  • ntsc1953

Object Signature Author
colour.plotting.common.filter_RGB_colourspaces filter_RGB_colourspaces(filterers: Union[RGB_Colourspace, str, Sequence[Union[RGB_Colourspace, str]]], allow_non_siblings: Boolean = True) -> Dict[str, RGB_Colourspace] @KelSolaar
colour.plotting.common.filter_cmfs filter_cmfs(filterers: Union[MultiSpectralDistributions,str,Sequence[Union[MultiSpectralDistributions, str]],], allow_non_siblings: Boolean = True) -> Dict[str, MultiSpectralDistributions] ...
colour.plotting.common.filter_illuminants filter_illuminants(filterers: Union[SpectralDistribution, str, Sequence[Union[SpectralDistribution, str]]], allow_non_siblings: Boolean = True) -> Dict[str, SpectralDistribution] ...
colour.plotting.common.filter_colour_checkers filter_colour_checkers(filterers: Union[ColourChecker, str, Sequence[Union[ColourChecker, str]]], allow_non_siblings: Boolean = True) -> Dict[str, ColourChecker] ...
colour.plotting.plot_RGB_colourspaces_gamuts plot_RGB_colourspaces_gamuts(colourspaces: Union[RGB_Colourspace, str, Sequence[Union[RGB_Colourspace, str]]], model: Union[Literal["CAM02LCD", "CAM02SCD", "CAM02UCS", "CAM16LCD", "CAM16SCD", "CAM16UCS", "CIE XYZ", "CIE xyY", "CIE Lab", "CIE Luv", "CIE UCS", "CIE UVW", "DIN99", "Hunter Lab", "Hunter Rdab", "ICaCb", "ICtCp", "IPT", "IgPgTg", "Jzazbz", "OSA UCS", "Oklab", "hdr-CIELAB", "hdr-IPT",], str,] = "CIE xyY", segments: Integer = 8, show_grid: Boolean = True, grid_segments: Integer = 10, show_spectral_locus: Boolean = False, spectral_locus_colour: Optional[Union[ArrayLike, str]] = None, cmfs: Union[MultiSpectralDistributions, str, Sequence[Union[MultiSpectralDistributions, str]],] = "CIE 1931 2 Degree Standard Observer", chromatically_adapt: Boolean = False, convert_kwargs: Optional[Dict] = None, **kwargs: Any,) -> Tuple[plt.Figure, plt.Axes] ...
colour.plotting.plot_RGB_colourspaces_gamuts plot_RGB_scatter(RGB: ArrayLike, colourspace: Union[RGB_Colourspace, str, Sequence[Union[RGB_Colourspace, str]]] = "sRGB", model: Union[Literal["CAM02LCD", "CAM02SCD", "CAM02UCS", "CAM16LCD", "CAM16SCD", "CAM16UCS", "CIE XYZ", "CIE xyY", "CIE Lab", "CIE Luv", "CIE UCS", "CIE UVW", "DIN99", "Hunter Lab", "Hunter Rdab", "ICaCb", "ICtCp", "IPT", "IgPgTg", "Jzazbz", "OSA UCS", "Oklab", "hdr-CIELAB", "hdr-IPT",],str,] = "CIE xyY",colourspaces: Optional[Union[RGB_Colourspace, str, Sequence[Union[RGB_Colourspace, str]]]] = None, segments: Integer = 8, show_grid: Boolean = True, grid_segments: Integer = 10, show_spectral_locus: Boolean = False, spectral_locus_colour: Optional[Union[ArrayLike, str]] = None, points_size: Floating = 12, cmfs: Union[MultiSpectralDistributions, str, Sequence[Union[MultiSpectralDistributions, str]],] = "CIE 1931 2 Degree Standard Observer", chromatically_adapt: Boolean = False, convert_kwargs: Optional[Dict] = None, **kwargs: Any,) -> Tuple[plt.Figure, plt.Axes] ...

colour.utilities

Object Name Author
colour.utilities.CaseInsensitiveMapping CanonicalMapping @KelSolaar, @zachlewis
colour.utilities.LazyCaseInsensitiveMapping LazyCanonicalMapping ...

v0.4.1

2 years ago

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 colour with Numpy 1.19.x and 1.20.x. (@KelSolaar, @remia)

Distribution

  • Fix incorrectly generated setup.py file. (@KelSolaar, @kmilos)

colour.colorimetry

  • Fix intersection filtering in colour.colorimetry.closest_spectral_locus_wavelength definition. (@KelSolaar, @sobotka)

v0.4.0

2 years ago

v0.3.16

3 years ago

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.smoothstep definition. (@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_LENSES containing the ISO 6728 Standard Lens and colour.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_zeros and colour.msds_ones definitions. (@KelSolaar)

colour.difference

  • Add colour.difference.JND_CIE1976 attribute 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_grid
  • colour.geometry.primitive_cube
  • colour.PRIMITIVE_METHODS
  • colour.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_sphere
  • colour.PRIMITIVE_VERTICES_METHODS
  • colour.primitive_vertices

colour.models

GSoC - 2020

  • Add colour.models.log_encoding_Log2 and colour.models.log_decoding_Log2 log encoding and decoding definitions. (@njwardhan, @KelSolaar)
  • Add colour.models.exponent_function_basic and colour.models.exponent_function_monitor_curve definitions. (@njwardhan)
  • Add colour.models.logarithmic_function_basic, colour.models.logarithmic_function_quasilog and colour.models.logarithmic_function_camera definitions. (@njwardhan, @nick-shaw, @KelSolaar)

  • Implement support for IGPGTG colourspace by Hellwig and Fairchild (2020) with the colour.XYZ_to_IGPGTG and colour.IGPGTG_to_XYZ definitions. (@KelSolaar)
  • Implement support for DaVinci Wide Gamut colourspace. (@KelSolaar)

colour.plotting

  • Implement support for ANSI/IES TM-30-18 Colour Rendition Report. (@enneract, @KelSolaar)

image image image

  • Implement support for RGB colourspaces chromatic adaptation in various plotting routines: (@KelSolaar)

image image

colour.quality

GSoC - 2020

  • Implement support for CIE 2017 Colour Fidelity Index quality metric computation colour.quality.colour_fidelity_index_CIE2017 definition. (@enneract)
  • Implement support for ANSI/IES TM-30-18 Colour Fidelity Index quality metric computation colour.quality.colour_fidelity_index_ANSIIESTM3018 definition. (@enneract)

colour.recovery

GSoC - 2020

  • Implement support for Jakob and Hanika (2019) spectral upsampling method with the colour.recovery.XYZ_to_sd_Jakob2019 definition. (@enneract, @KelSolaar)
  • Implement support for Mallett and Yuksel (2019) spectral upsampling method with the colour.recovery.RGB_to_sd_Mallett2019 definition. (@enneract)
  • Implement support for Otsu, Yamamoto and Hachisuka (2018) spectral upsampling method with the colour.recovery.XYZ_to_sd_Otsu2018 definition. (@enneract, @KelSolaar)

colour.utilities

  • Float precision can be set globally with the colour.utilities.set_float_precision definition and the COLOUR_SCIENCE__FLOAT_PRECISION environment 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 axis argument to the colour.utilities.metric_mse and colour.utilities.metric_psnr definitions. (@KelSolaar)
  • Add colour.utilities.LazyCaseInsensitiveMapping class 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.interpolate and colour.MultiSpectralDistributions.interpolate methods did not honour the instantiation time interpolation class and were forcibly using either the colour.SpragueInterpolator or colour.CubicSplineInterpolator classes unless an interpolator argument was passed. This behaviour was not desirable and was changed so that if the instantiation time interpolation class is not one of colour.SpragueInterpolator or colour.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 https://github.com/colour-science/colour/issues/566 for more details.

colour.models

  • colour.OETF_INVERSES attribute ITU-R BT.2100 HLG key was incorrectly named ITU-R BT.2100 HLD. (@jchwei)
  • colour.HSL_to_RGB definition output was incorrect when saturation was equal to 1. (@KelSolaar, @nadersadoughi)

colour.plotting

  • The colour.plotting.diagrams.plot_chromaticity_diagram definition was not passing anymore the CMFS to the underlying colour.plotting.diagrams.plot_spectral_locus and colour.plotting.diagrams.plot_chromaticity_diagram_colours definitions. (@KelSolaar, @sobotka)

colour.utilities

  • The colour.utilities.filter_warnings definition was not behaving properly and has been fixed. (@KelSolaar)

Examples

  • colour.plotting.plot_RGB_colourspaces_gamuts definition was using an incorrect style argument. (@sianyi)

Changes

colour.adaptation

Object Name Author
colour.CMCCAT2000_VIEWING_CONDITIONS VIEWING_CONDITIONS_CMCCAT2000 @KelSolaar
colour.adaptation.BRADFORD_CAT CAT_BRADFORD ...
colour.adaptation.BS_CAT CAT_BIANCO2010 ...
colour.adaptation.BS_PC_CAT CAT_PC_BIANCO2010 ...
colour.adaptation.CAT02_BRILL_CAT CAT_CAT02_BRILL2008 ...
colour.adaptation.CAT02_CAT CAT_CAT02 ...
colour.adaptation.CMCCAT2000_CAT CAT_CMCCAT2000 ...
colour.adaptation.CMCCAT2000_InductionFactors InductionFactors_CMCCAT2000 ...
colour.adaptation.CMCCAT97_CAT CAT_CMCCAT97 ...
colour.adaptation.FAIRCHILD_CAT CAT_FAIRCHILD ...
colour.adaptation.SHARP_CAT CAT_SHARP ...
colour.adaptation.VON_KRIES_CAT CAT_VON_KRIES ...
colour.adaptation.XYZ_SCALING_CAT CAT_XYZ_SCALING ...

colour.algebra

  • The colour.algebra.cartesian_to_spherical and colour.algebra.spherical_to_cartesian definitions now use the ISO 31-11 parameterisation for consistency.
Object Signature Author
colour.KernelInterpolator.__init__ KernelInterpolator(self, x, y, window=3, kernel=kernel_lanczos, kernel_kwargs=None, padding_kwargs=None, dtype=DEFAULT_FLOAT_DTYPE) @KelSolaar
Object Name Author
colour.KernelInterpolator.kernel_args kernel_kwargs @KelSolaar
colour.KernelInterpolator.padding_args padding_kwargs ...

colour.appearance

Object Name Author
colour.ATD95_Specification CAM_Specification_ATD95 @KelSolaar
colour.CAM16_Specification CAM_Specification_CAM16 ...
colour.CAM16_VIEWING_CONDITIONS VIEWING_CONDITIONS_CAM16 ...
colour.CIECAM02_Specification CAM_Specification_CIECAM02 ...
colour.CIECAM02_VIEWING_CONDITIONS VIEWING_CONDITIONS_CIECAM02 ...
colour.HUNT_VIEWING_CONDITIONS VIEWING_CONDITIONS_HUNT ...
colour.Hunt_Specification CAM_Specification_Hunt ...
colour.LLAB_Specification CAM_Specification_LLAB ...
colour.LLAB_VIEWING_CONDITIONS VIEWING_CONDITIONS_LLAB ...
colour.Nayatani95_Specification CAM_Specification_Nayatani95 ...
colour.RLAB_Specification CAM_Specification_RLAB ...
colour.RLAB_VIEWING_CONDITIONS VIEWING_CONDITIONS_RLAB ...
colour.appearance.CAM16_InductionFactors InductionFactors_CAM16 ...
colour.appearance.CIECAM02_InductionFactors InductionFactors_CIECAM02 ...
colour.appearance.Hunt_InductionFactors InductionFactors_Hunt ...
colour.appearance.LLAB_InductionFactors InductionFactors_LLAB ...
colour.appearance.RLAB_D_FACTOR D_FACTOR_RLAB ...
colour.appearance.chromatic_adaptation_matrix_VonKries matrix_chromatic_adaptation_VonKries ...

colour.blindness

Object Name Author
colour.blindness.anomalous_trichromacy_cmfs_Machado2009 msds_cmfs_anomalous_trichromacy_Machado2009 @KelSolaar
colour.blindness.anomalous_trichromacy_matrix_Machado2009 matrix_anomalous_trichromacy_Machado2009 ...
colour.blindness.cvd_matrix_Machado2009 matrix_cvd_Machado2009 ...

colour.characterisation

Object Name Author
colour.CAMERA_RGB_SPECTRAL_SENSITIVITIES MSDS_CAMERA_SENSITIVITIES @KelSolaar
colour.COLOURCHECKERS CCS_COLOURCHECKERS ...
colour.COLOURCHECKER_SDS SDS_COLOURCHECKERS ...
colour.COLOUR_CORRECTION_MATRIX_METHODS MATRIX_COLOUR_CORRECTION_METHODS ...
colour.DISPLAY_RGB_PRIMARIES MSDS_DISPLAY_PRIMARIES ...
colour.characterisation.augmented_matrix_Cheung2004 matrix_augmented_Cheung2004 ...
colour.characterisation.colour_correction_matrix_Cheung2004 matrix_colour_correction_Cheung2004 ...
colour.characterisation.colour_correction_matrix_Finlayson2015 matrix_colour_correction_Finlayson2015 ...
colour.characterisation.colour_correction_matrix_Vandermonde matrix_colour_correction_Vandermonde ...
colour.colour_correction_matrix matrix_colour_correction ...

colour.colorimetry

  • colour.sd_blackbody definition now returns values in W/sr/m^2/nm instead of W/sr/m^2/m. See #559 for more background information. (@KelSolaar, @Wagyx, @MichaelMauderer) colour.colorimetry
  • colour.colorimetry.sd_CIE_illuminant_D_series definition return a spectral distribution whose name includes the used chromaticity coordinates and whose interpolator is instantiated from colour.algebra.LinearInterpolator. (@KelSolaar)
Object Signature Author
colour.MultiSpectralDistributions.align align(self, shape, interpolator=None, interpolator_kwargs=None, extrapolator=None, extrapolator_kwargs=None, **kwargs) @KelSolaar
colour.MultiSpectralDistributions.extrapolate extrapolate(self, shape, extrapolator=None, extrapolator_kwargs=None, **kwargs) ...
colour.MultiSpectralDistributions.interpolate interpolate(self, shape, interpolator=None, interpolator_kwargs=None, **kwargs) ...
colour.SpectralDistribution.align align(self, shape, interpolator=None, interpolator_kwargs=None, extrapolator=None, extrapolator_kwargs=None, **kwargs) ...
colour.SpectralDistribution.extrapolate extrapolate(self, shape, extrapolator=None, extrapolator_kwargs=None, **kwargs) ...
colour.SpectralDistribution.interpolate interpolate(self, shape, interpolator=None, interpolator_kwargs=None, **kwargs) ...
Object Name Author
colour.ASTME308_PRACTISE_SHAPE SPECTRAL_SHAPE_ASTME308 @KelSolaar
colour.CMFS MSDS_CMFS ...
colour.DEFAULT_SPECTRAL_SHAPE SPECTRAL_SHAPE_DEFAULT ...
colour.HUNTERLAB_ILLUMINANTS TVS_ILLUMINANTS_HUNTERLAB ...
colour.ILLUMINANTS_SDS SDS_ILLUMINANTS ...
colour.ILLUMINANTS CCS_ILLUMINANTS ...
colour.LEFS SDS_LEFS ...
colour.LIGHT_SOURCES_SDS SDS_LIGHT_SOURCES ...
colour.LIGHT_SOURCES CCS_LIGHT_SOURCES ...
colour.MULTI_SD_TO_XYZ_METHODS MSDS_TO_XYZ_METHODS ...
colour.colorimetry.D_ILLUMINANTS_S_SDS SDS_BASIS_FUNCTIONS_CIE_ILLUMINANT_D_SERIES ...
colour.colorimetry.LMS_CMFS MSDS_CMFS_LMS ...
colour.colorimetry.PHOTOPIC_LEFS SDS_LEFS_PHOTOPIC ...
colour.colorimetry.RGB_CMFS MSDS_CMFS_RGB ...
colour.colorimetry.SCOTOPIC_LEFS SDS_LEFS_SCOTOPIC ...
colour.colorimetry.STANDARD_OBSERVERS_CMFS MSDS_CMFS_STANDARD_OBSERVER ...
colour.colorimetry.multi_sds_to_XYZ_ASTME308 msds_to_XYZ_ASTME308 ...
colour.colorimetry.multi_sds_to_XYZ_integration msds_to_XYZ_integration ...
colour.colorimetry.sds_and_multi_sds_to_multi_sds sds_and_msds_to_msds ...
colour.colorimetry.sds_and_multi_sds_to_sds sds_and_msds_to_sds ...
colour.multi_sds_to_XYZ msds_to_XYZ ...

colour.constants

Object Name Author
colour.constants.AVOGADRO_CONSTANT CONSTANT_AVOGADRO @KelSolaar
colour.constants.BOLTZMANN_CONSTANT CONSTANT_BOLTZMANN ...
colour.constants.K_M CONSTANT_K_M ...
colour.constants.KP_M CONSTANT_KP_M ...
colour.constants.PLANCK_CONSTANT CONSTANT_PLANCK ...
colour.constants.LIGHT_SPEED CONSTANT_LIGHT_SPEED ...

colour.continuous

Object Signature Author
colour.continuous.MultiSignals.extrapolator_args extrapolator_kwargs @KelSolaar
colour.continuous.MultiSignals.interpolator_args interpolator_kwargs ...
colour.continuous.Signal.extrapolator_args extrapolator_kwargs ...
colour.continuous.Signal.interpolator_args interpolator_kwargs ...

colour.corresponding

Object Name Author
colour.constants.BRENEMAN_EXPERIMENTS_PRIMARIES_CHROMATICITIES BRENEMAN_EXPERIMENT_PRIMARIES_CHROMATICITIES @KelSolaar

colour.geometry

Object Signature Author
colour.geometry.quad primitive_vertices_quad_mpl(width=1, height=1, depth=0, origin=np.array([0, 0]), axis='+z') @KelSolaar
colour.geometry.grid primitive_vertices_grid_mpl(width=1, height=1, depth=0, width_segments=1, height_segments=1, origin=np.array([0, 0]), axis='+z') ...
colour.geometry.cube primitive_vertices_cube_mpl(width=1, height=1, depth=1, width_segments=1, height_segments=1, depth_segments=1, origin=np.array([0, 0, 0]), planes=None) ...

colour.io

Object Signature Author
colour.LUT1D.apply apply(self, RGB, interpolator=LinearInterpolator, interpolator_kwargs=None, **kwargs) @KelSolaar
colour.LUT3x1D.apply apply(self, RGB, interpolator=LinearInterpolator, interpolator_kwargs=None, **kwargs) ...
colour.LUT3D.apply apply(self, RGB, interpolator=table_interpolation_trilinear, interpolator_kwargs=None, **kwargs) ...
colour.LutSequence.apply apply(self, RGB, interpolator_1D=LinearInterpolator, interpolator_1D_kwargs=None, interpolator_3D=table_interpolation_trilinear, interpolator_3D_kwargs=None, **kwargs) ...

colour.models

Object Signature Author
colour.OSA_UCS_to_XYZ OSA_UCS_to_XYZ(Ljg, optimisation_kwargs=None, **kwargs) @KelSolaar
colour.RGB_Colourspace RGB_Colourspace(self, name, primaries, whitepoint, whitepoint_name=None, matrix_RGB_to_XYZ=None, matrix_XYZ_to_RGB=None, cctf_encoding=None, cctf_decoding=None, use_derived_matrix_RGB_to_XYZ=False, use_derived_matrix_XYZ_to_RGB=False) ...
colour.RGB_to_XYZ RGB_to_XYZ(RGB, illuminant_RGB, illuminant_XYZ, matrix_RGB_to_XYZ, chromatic_adaptation_transform='CAT02', cctf_decoding=None, **kwargs) ...
colour.XYZ_to_RGB XYZ_to_RGB(XYZ, illuminant_XYZ, illuminant_RGB, matrix_XYZ_to_RGB, chromatic_adaptation_transform='CAT02', cctf_encoding=None, **kwargs) ...
Object Access Author
colour.models.ACES_RICD colour.characterisation.MSDS_ACES_RICD @KelSolaar
Object Name Author
colour.RGB_Colourspace.RGB_to_XYZ_matrix matrix_RGB_to_XYZ @KelSolaar
colour.RGB_Colourspace.XYZ_to_RGB_matrix matrix_XYZ_to_RGB ...
colour.RGB_Colourspace.use_derived_RGB_to_XYZ_matrix use_derived_matrix_RGB_to_XYZ ...
colour.RGB_Colourspace.use_derived_XYZ_to_RGB_matrix use_derived_matrix_XYZ_to_RGB ...
colour.RGB_to_RGB_matrix matrix_RGB_to_RGB ...
colour.YCBCR_WEIGHTS WEIGHTS_YCBCR ...
colour.models.ACES_2065_1_COLOURSPACE RGB_COLOURSPACE_ACES2065_1 ...
colour.models.ACES_CCT_COLOURSPACE RGB_COLOURSPACE_ACESCCT ...
colour.models.ACES_CC_COLOURSPACE RGB_COLOURSPACE_ACESCC ...
colour.models.ACES_CG_COLOURSPACE RGB_COLOURSPACE_ACESCG ...
colour.models.ACES_PROXY_COLOURSPACE RGB_COLOURSPACE_ACESPROXY ...
colour.models.ADOBE_RGB_1998_COLOURSPACE RGB_COLOURSPACE_ADOBE_RGB1998 ...
colour.models.ADOBE_WIDE_GAMUT_RGB_COLOURSPACE RGB_COLOURSPACE_ADOBE_WIDE_GAMUT_RGB ...
colour.models.ALEXA_WIDE_GAMUT_COLOURSPACE RGB_COLOURSPACE_ALEXA_WIDE_GAMUT ...
colour.models.APPLE_RGB_COLOURSPACE RGB_COLOURSPACE_APPLE_RGB ...
colour.models.BEST_RGB_COLOURSPACE RGB_COLOURSPACE_BEST_RGB ...
colour.models.BETA_RGB_COLOURSPACE RGB_COLOURSPACE_BETA_RGB ...
colour.models.BT2020_COLOURSPACE RGB_COLOURSPACE_BT2020 ...
colour.models.BT470_525_COLOURSPACE RGB_COLOURSPACE_BT470_525 ...
colour.models.BT470_625_COLOURSPACE RGB_COLOURSPACE_BT470_625 ...
colour.models.BT709_COLOURSPACE RGB_COLOURSPACE_BT709 ...
colour.models.CIE_RGB_COLOURSPACE RGB_COLOURSPACE_CIE_RGB ...
colour.models.CINEMA_GAMUT_COLOURSPACE RGB_COLOURSPACE_CINEMA_GAMUT ...
colour.models.COLOR_MATCH_RGB_COLOURSPACE RGB_COLOURSPACE_COLOR_MATCH_RGB ...
colour.models.DCDM_XYZ_COLOURSPACE RGB_COLOURSPACE_DCDM_XYZ ...
colour.models.DCI_P3_COLOURSPACE RGB_COLOURSPACE_DCI_P3 ...
colour.models.DCI_P3_P_COLOURSPACE RGB_COLOURSPACE_DCI_P3_P ...
colour.models.DISPLAY_P3_COLOURSPACE RGB_COLOURSPACE_DISPLAY_P3 ...
colour.models.DJI_D_GAMUT_COLOURSPACE RGB_COLOURSPACE_DJI_D_GAMUT ...
colour.models.DON_RGB_4_COLOURSPACE RGB_COLOURSPACE_DON_RGB_4 ...
colour.models.DRAGON_COLOR_2_COLOURSPACE RGB_COLOURSPACE_DRAGON_COLOR_2 ...
colour.models.DRAGON_COLOR_COLOURSPACE RGB_COLOURSPACE_DRAGON_COLOR ...
colour.models.ECI_RGB_V2_COLOURSPACE RGB_COLOURSPACE_ECI_RGB_V2 ...
colour.models.EKTA_SPACE_PS_5_COLOURSPACE RGB_COLOURSPACE_EKTA_SPACE_PS_5 ...
colour.models.ERIMM_RGB_COLOURSPACE RGB_COLOURSPACE_ERIMM_RGB ...
colour.models.FILMLIGHT_E_GAMUT_COLOURSPACE RGB_COLOURSPACE_FILMLIGHT_E_GAMUT ...
colour.models.F_GAMUT_COLOURSPACE RGB_COLOURSPACE_F_GAMUT ...
colour.models.MAX_RGB_COLOURSPACE RGB_COLOURSPACE_MAX_RGB ...
colour.models.NTSC_1953_COLOURSPACE RGB_COLOURSPACE_NTSC1953 ...
colour.models.NTSC_1987_COLOURSPACE RGB_COLOURSPACE_NTSC1987 ...
colour.models.P3_D65_COLOURSPACE RGB_COLOURSPACE_P3_D65 ...
colour.models.PAL_SECAM_COLOURSPACE RGB_COLOURSPACE_PAL_SECAM ...
colour.models.POINTER_GAMUT_BOUNDARIES CCS_POINTER_GAMUT_BOUNDARY ...
colour.models.POINTER_GAMUT_DATA DATA_POINTER_GAMUT_VOLUME ...
colour.models.POINTER_GAMUT_ILLUMINANT CCS_ILLUMINANT_POINTER_GAMUT ...
colour.models.PROPHOTO_RGB_COLOURSPACE RGB_COLOURSPACE_PROPHOTO_RGB ...
colour.models.PROTUNE_NATIVE_COLOURSPACE RGB_COLOURSPACE_PROTUNE_NATIVE ...
colour.models.RED_COLOR_2_COLOURSPACE RGB_COLOURSPACE_RED_COLOR_2 ...
colour.models.RED_COLOR_3_COLOURSPACE RGB_COLOURSPACE_RED_COLOR_3 ...
colour.models.RED_COLOR_4_COLOURSPACE RGB_COLOURSPACE_RED_COLOR_4 ...
colour.models.RED_COLOR_COLOURSPACE RGB_COLOURSPACE_RED_COLOR ...
colour.models.RED_WIDE_GAMUT_RGB_COLOURSPACE RGB_COLOURSPACE_RED_WIDE_GAMUT_RGB ...
colour.models.RIMM_RGB_COLOURSPACE RGB_COLOURSPACE_RIMM_RGB ...
colour.models.ROMM_RGB_COLOURSPACE RGB_COLOURSPACE_ROMM_RGB ...
colour.models.RUSSELL_RGB_COLOURSPACE RGB_COLOURSPACE_RUSSELL_RGB ...
colour.models.SHARP_RGB_COLOURSPACE RGB_COLOURSPACE_SHARP_RGB ...
colour.models.SMPTE_240M_COLOURSPACE RGB_COLOURSPACE_SMPTE_240M ...
colour.models.SMPTE_C_COLOURSPACE RGB_COLOURSPACE_SMPTE_C ...
colour.models.S_GAMUT3_CINE_COLOURSPACE RGB_COLOURSPACE_S_GAMUT3_CINE ...
colour.models.S_GAMUT3_COLOURSPACE RGB_COLOURSPACE_S_GAMUT3 ...
colour.models.S_GAMUT_COLOURSPACE RGB_COLOURSPACE_S_GAMUT ...
colour.models.VENICE_S_GAMUT3_CINE_COLOURSPACE RGB_COLOURSPACE_VENICE_S_GAMUT3_CINE ...
colour.models.VENICE_S_GAMUT3_COLOURSPACE RGB_COLOURSPACE_VENICE_S_GAMUT3 ...
colour.models.V_GAMUT_COLOURSPACE RGB_COLOURSPACE_V_GAMUT ...
colour.models.XTREME_RGB_COLOURSPACE RGB_COLOURSPACE_XTREME_RGB ...
colour.models.oetf_BT2020 eotf_inverse_BT2020 ...
colour.models.sRGB_COLOURSPACE RGB_COLOURSPACE_sRGB ...

colour.notation

  • The colour.notation.RGB_to_HEX definition will now clip negative values and the whole input array will be normalised to the maximum value if values over 1 are encountered. (@KelSolaar)

colour.plotting

Object Signature Author
colour.plotting.plot_multi_colour_swatches plot_multi_colour_swatches(colour_swatches, width=1, height=1, spacing=0, columns=None, direction='+y', text_kwargs=None, background_colour=(1.0, 1.0, 1.0), compare_swatches=None, **kwargs) @KelSolaar
colour.plotting.plot_image plot_image(image, imshow_kwargs=None, text_kwargs=None, **kwargs) ...
colour.plotting.plot_sds_in_chromaticity_diagram_CIE1931 plot_sds_in_chromaticity_diagram_CIE1931(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_kwargs=None, chromaticity_diagram_callable_CIE1931=plot_chromaticity_diagram_CIE1931, **kwargs) ...
colour.plotting.plot_sds_in_chromaticity_diagram_CIE1960UCS plot_sds_in_chromaticity_diagram_CIE1960UCS(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_kwargs=None, chromaticity_diagram_callable_CIE1960UCS=plot_chromaticity_diagram_CIE1960UCS, **kwargs) ...
colour.plotting.plot_sds_in_chromaticity_diagram_CIE1976UCS plot_sds_in_chromaticity_diagram_CIE1976UCS(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_kwargs=None, chromaticity_diagram_callable_CIE1976UCS=plot_chromaticity_diagram_CIE1976UCS, **kwargs) ...
colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931 plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1931=plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931, scatter_kwargs=None, **kwargs) ...
colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1960UCS=plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS, scatter_kwargs=None, **kwargs) ...
colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1976UCS=plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS, scatter_kwargs=None, **kwargs) ...
colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931 plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931(chromaticity_diagram_callable_CIE1931=plot_chromaticity_diagram_CIE1931, chromaticity_diagram_clipping=False, ellipse_kwargs=None, **kwargs) ...
colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS(chromaticity_diagram_callable_CIE1960UCS=plot_chromaticity_diagram_CIE1960UCS, chromaticity_diagram_clipping=False, ellipse_kwargs=None, **kwargs) ...
colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS(chromaticity_diagram_callable_CIE1976UCS=plot_chromaticity_diagram_CIE1976UCS, chromaticity_diagram_clipping=False, ellipse_kwargs=None, **kwargs) ...
colour.plotting.plot_constant_hue_loci plot_constant_hue_loci(data, model, scatter_kwargs=None, **kwargs) ...
colour.plotting.plot_planckian_locus_in_chromaticity_diagram_CIE1931 plot_planckian_locus_in_chromaticity_diagram_CIE1931(illuminants=None, annotate_kwargs=None, chromaticity_diagram_callable_CIE1931=plot_chromaticity_diagram_CIE1931, planckian_locus_callable_CIE1931=plot_planckian_locus_CIE1931, **kwargs) ...
colour.plotting.plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(illuminants=None, annotate_kwargs=None, chromaticity_diagram_callable_CIE1960UCS=plot_chromaticity_diagram_CIE1960UCS, planckian_locus_callable_CIE1960UCS=plot_planckian_locus_CIE1960UCS, **kwargs) ...
Object Access Author
colour.plotting.quad colour.geometry.primitive_vertices_quad_mpl @KelSolaar
colour.plotting.grid colour.geometry.primitive_vertices_grid_mpl ...
colour.plotting.cube colour.geometry.primitive_vertices_cube_mpl ...
Object Name Author
colour.plotting.ASTMG173_DIRECT_CIRCUMSOLAR SD_ASTMG173_DIRECT_CIRCUMSOLAR @KelSolaar
colour.plotting.ASTMG173_ETR SD_ASTMG173_ETR ...
colour.plotting.ASTMG173_GLOBAL_TILT SD_ASTMG173_GLOBAL_TILT ...
colour.plotting.COLOUR_STYLE_CONSTANTS CONSTANTS_COLOUR_STYLE ...
colour.plotting.COLOUR_ARROW_STYLE CONSTANTS_ARROW_STYLE ...

colour.quality

Object Name Author
colour.quality.CQS_Specification ColourRendering_Specification_CQS @KelSolaar
colour.quality.CRI_Specification ColourRendering_Specification_CRI ...
colour.quality.TCS_SDS SDS_TCS ...
colour.quality.VS_SDS SDS_VS ...

colour.recovery

Object Signature Author
colour.recovery.XYZ_to_sd_Meng2015 XYZ_to_sd_Meng2015(XYZ, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].copy().align(DEFAULT_SPECTRAL_SHAPE_MENG_2015), illuminant=sd_ones(DEFAULT_SPECTRAL_SHAPE_MENG_2015), optimisation_kwargs=None, **kwargs) @KelSolaar
Object Name Author
colour.quality.SMITS_1999_SDS SDS_SMITS1999 @KelSolaar

colour.temperature

Object Signature Author
colour.temperature.CCT_to_xy_Hernandez1999 CCT_to_xy_Hernandez1999(CCT, optimisation_kwargs=None, **kwargs) @KelSolaar
colour.temperature.CCT_to_xy_McCamy1992 CCT_to_xy_McCamy1992(CCT, optimisation_kwargs=None, **kwargs) ...
colour.temperature.uv_to_CCT_Krystek1985 uv_to_CCT_Krystek1985(uv, optimisation_kwargs=None, **kwargs) ...
colour.temperature.xy_to_CCT_CIE_D xy_to_CCT_CIE_D(xy, optimisation_kwargs=None, **kwargs) ...
colour.temperature.xy_to_CCT_Kang2002 xy_to_CCT_Kang2002(xy, optimisation_kwargs=None, **kwargs) ...

colour.utilities

Object Signature Author
colour.utilities.as_float as_float(a, dtype=None) @KelSolaar
colour.utilities.as_float_array as_float_array(a, dtype=None) ...
colour.utilities.as_int as_int(a, dtype=None) ...
colour.utilities.as_int_array as_int_array(a, dtype=None) ...
colour.utilities.filter_warnings filter_warnings(colour_runtime_warnings=None, colour_usage_warnings=None, colour_warnings=None, python_warnings=None) ...
colour.utilities.metric_mse metric_mse(a, b, axis=None) ...
colour.utilities.metric_psnr metric_psnr(a, b, max_a=1, axis=None) ...
colour.utilities.suppress_warnings suppress_warnings(colour_runtime_warnings=None, colour_usage_warnings=None, colour_warnings=None, python_warnings=None) ...

colour.volume

Object Name Author
colour.ILLUMINANTS_OPTIMAL_COLOUR_STIMULI OPTIMAL_COLOUR_STIMULI_ILLUMINANTS @KelSolaar

v0.3.15

4 years ago

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_sds definition that converts given spectral and multi-spectral distributions to multi-spectral distributions. (@KelSolaar)

colour.models

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_Krystek1985 definition was incorrectly implemented. Incorrect reading of the reference publications ended up with exponentiations being different, e.g. 10**4 was replaced with 10e4. (@OlliNiemitalo)

Changes

colour.algebra

  • colour.algebra.cartesian_to_spherical and colour.algebra.spherical_to_cartesian use 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)
  • 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.

colour.plotting

  • ~colour.plotting.common.wrap_title~: (@KelSolaar)
    • Remove

v0.3.14

4 years ago

Colour 0.3.14 - Alpha Milestone

We would like to thanks all the contributors as usual!

With this release we are getting close to have a beta candidate in the coming months. It will likely be the last version to support Python 2.x.

NumFOCUS

Colour is now a NumFOCUS affiliated project:

image

Hacktoberfest - 2019

We had a few new contributors for the 2019 edition of the Hacktoberfest. Thanks to @Chinmayrane16, @evalevanto, @feralpoosum, @BPearlstine and, @pavithraes for their contributions!

Automatic Colour Conversion Graph

Colour now implements an automatic colour conversion graph based on NetworkX and enabling easier colour conversions:

>>> sd = colour.COLOURCHECKERS_SDS['ColorChecker N Ohta']['dark skin']
>>> convert(sd, 'Spectral Distribution', 'sRGB', verbose={'mode': 'Short'})

Image Input and Output

Imageio is now a requirement for reading and writing images, it will be used if OpenImageIO is not available. If you wish to read OpenEXR files or develop Colour, you will need to install the FreeImage plugin as follows:

$ python -c "import imageio;imageio.plugins.freeimage.download()"

Support for OpenImageIO 2.x has also been implemented.

Name and Signature Changes

Various colour component transfer functions objects have been either renamed or their signature changed, most notably the sRGB transfer functions and the colour.oetf definition.

All the reverse words have been replaced with inverse in object names, file names and, docstrings.

Coverage

Coverage was raised to 100%. It does not mean that all the possible code paths are covered but it certainly strengthen the API.

Dependency Management

We have adopted Poetry to manage the development dependencies, the setup.py file has been replaced with a standardized pyproject.toml file.

Continuous Integration

Travis-ci and Azure Pipelines have been replaced with Github Actions.

Documentation

The README and the Manual have been slightly reorganised to create a better separation between the tutorials, API reference and, the new How-To Guide.

Features

colour.colorimetry

  • Add colour.sds_and_multi_sds_to_sds definition that converts given spectral and multi-spectral distributions to a flat list of spectral distributions. (@KelSolaar)
  • Implement support for ICC D50 illuminant computed from the following CIE XYZ tristimulus values [96.42, 100.00, 82.49]. (@KelSolaar)
  • Add colour.colorimetry.multi_sds_to_XYZ_ASTME308 definition that converts given multi-spectral distributions to CIE XYZ tristimulus values according to to practise ASTM E308-15 method. (@KelSolaar)
  • Implement support for ICC D50 illuminant computed from the following CIE XYZ tristimulus values [96.42, 100.00, 82.49]. (@KelSolaar)

colour.corresponding

  • colour.corresponding_chromaticities_prediction definition can now use a colour.CorrespondingColourDataset class instance as argument. (@KelSolaar)

colour.io

  • The colour.read_image and colour.write_image definitions support Imageio and will fallback to it if OpenImageIO is not available.
  • OpenImageIO 2.x is now supported.

colour.graph

  • The new colour.convert definition leverages an automatic colour conversion graph enabling easier colour conversions:
>>> sd = colour.COLOURCHECKERS_SDS['ColorChecker N Ohta']['dark skin']
>>> convert(sd, 'Spectral Distribution', 'sRGB', verbose={'mode': 'Short'})
===============================================================================
*                                                                             *
*   [ Conversion Path ]                                                       *
*                                                                             *
*   "sd_to_XYZ" --> "XYZ_to_sRGB"                                             *
*                                                                             *
===============================================================================
array([ 0.45675795,  0.30986982,  0.24861924])
>>> illuminant = colour.ILLUMINANTS_SDS['FL2']
>>> convert(sd, 'Spectral Distribution', 'sRGB', sd_to_XYZ={'illuminant': illuminant})
array([ 0.47924575,  0.31676968,  0.17362725])

image

colour.models

  • Implement support for Recommendation ITU-R BT.2100-2 with the modified black lift handling of HLG EOTF. (@KelSolaar, @nick-shaw)
  • Implement support for Fujifilm F-Gamut RGB colourspace with colour.models.F_GAMUT_COLOURSPACE class and Fujifilm F-Log with colour.models.log_encoding_FLog and colour.models.log_decoding_FLog transfer functions. (@sobotka, @KelSolaar, @nick-shaw)
  • Re-implement support for SMPTE C RGB colourspace with colour.models.SMPTE_C_COLOURSPACE class and related NTSC (1987) RGB colourspace with colour.models.NTSC_1987_COLOURSPACE class. (@KelSolaar)

colour.plotting

  • Add colour.plotting.plot_constant_hue_loci definition plotting Constant Hue Loci as given by Hung and Berns (1995) or Ebner and Fairchild (1998). It is intended to be used with Colour - Datasets as follows:
from colour_datasets import load
from colour.plotting import plot_constant_hue_loci

plot_constant_hue_loci(load('3362536'), 'IPT')

image

colour.temperature

  • Add various optimization based correlated colour temperature computation definitions: (@KelSolaar)
    • colour.temperature.xy_to_CCT_CIE_D
    • colour.temperature.CCT_to_xy_Hernandez1999, this definition is not a bijective function and might produce unexpected results. It is given for consistency with other correlated colour temperature computation methods but should be avoided for practical applications.
    • colour.temperature.xy_to_CCT_Kang2002
    • colour.temperature.uv_to_CCT_Krystek1985
    • colour.temperature.CCT_to_xy_McCamy1992, this definition is not a bijective function and might produce unexpected results. It is given for consistency with other correlated colour temperature computation methods but should be avoided for practical applications.

Fixes

colour.quality

  • The individual colour scales returned by colour.colour_quality_scale definition when using the additional_data argument were incorrectly scaled and have been fixed. (@KelSolaar)

Changes

colour.adaptation

  • colour.adaptation.chromatic_adaptation_reverse_CMCCAT2000: (@KelSolaar)
    • Name: chromatic_adaptation_inverse_CMCCAT2000

colour.appearance

  • yield based tests dependent on nosetests have been replaced. (@MichaelMauderer)

colour.characterisation

  • The following colour checkers now use ICC D50 illuminant instead of D50: (@KelSolaar)
    • ColorChecker 2005
    • BabelColor Average
    • ColorChecker24 - Before November 2014
    • ColorChecker24 - After November 2014

colour.colorimetry

  • colour.ASTME30815_PRACTISE_SHAPE: (@KelSolaar)
    • Name: ASTME308_PRACTISE_SHAPE
  • colour.MultiSpectralDistribution: (@KelSolaar)
    • Name: MultiSpectralDistributions
  • colour.multi_sds_to_XYZ: (@KelSolaar)
    • Signature: multi_sds_to_XYZ(msds, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].copy().trim(DEFAULT_SPECTRAL_SHAPE), illuminant=sd_ones(), k=None, method='ASTM E308-15', **kwargs)
  • colour.colorimetry.multi_sds_to_XYZ_integration: (@KelSolaar)
    • Signature: multi_sds_to_XYZ_integration(msds, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer']. copy().trim(DEFAULT_SPECTRAL_SHAPE), illuminant=sd_ones(), k=None, shape=DEFAULT_SPECTRAL_SHAPE)
  • colour.colorimetry.adjust_tristimulus_weighting_factors_ASTME30815: (@KelSolaar)
    • Name: adjust_tristimulus_weighting_factors_ASTME308
  • colour.colorimetry.lagrange_coefficients_ASTME202211: (@KelSolaar)
    • Name: lagrange_coefficients_ASTME2022
  • colour.colorimetry.luminance_ASTMD153508: (@KelSolaar)
    • Name: luminance_ASTMD1535
  • colour.colorimetry.sd_to_XYZ_ASTME30815: (@KelSolaar)
    • Name: sd_to_XYZ_ASTME308
  • colour.colorimetry.sd_to_XYZ_tristimulus_weighting_factors_ASTME30815: (@KelSolaar)
    • Name: sd_to_XYZ_tristimulus_weighting_factors_ASTME308
  • colour.colorimetry.tristimulus_weighting_factors_ASTME202211: (@KelSolaar)
    • Name: tristimulus_weighting_factors_ASTME2022

colour.continuous

  • colour.continuous.MultiSignal: (@KelSolaar)
    • Name: MultiSignals

colour.io

  • colour.read_image: (@KelSolaar)
    • Signature: read_image(path, method='OpenImageIO', **kwargs)
  • colour.write_image: (@KelSolaar)
    • Signature: write_image(image, path, method='OpenImageIO', **kwargs)

colour.models

  • Various CCTF related objects, signatures and properties have been renamed for consistency purposes:
  • colour.ENCODING_CCTFS: (@KelSolaar)
    • Name: CCTF_ENCODINGS
  • colour.encoding_cctf: (@KelSolaar)
    • Name: cctf_encoding
  • colour.DECODING_CCTFS: (@KelSolaar)
    • Name: CCTF_DECODINGS
  • colour.decoding_cctf: (@KelSolaar)
    • Name: cctf_decoding
  • colour.RGB_Colourspace.encoding_cctf: (@KelSolaar)
    • Name: cctf_encoding
  • colour.RGB_Colourspace.decoding_cctf: (@KelSolaar)
    • Name: decoding_cctf
  • colour.XYZ_to_RGB: (@KelSolaar)
    • Signature: XYZ_to_RGB(XYZ, illuminant_XYZ, illuminant_RGB, XYZ_to_RGB_matrix, chromatic_adaptation_transform='CAT02', cctf_encoding=None, **kwargs)
  • colour.XYZ_to_RGB: (@KelSolaar)
    • Signature: RGB_to_XYZ(RGB, illuminant_RGB, illuminant_XYZ, RGB_to_XYZ_matrix, chromatic_adaptation_transform='CAT02', cctf_decoding=None, **kwargs)
  • colour.XYZ_to_sRGB: (@KelSolaar)
    • Signature: XYZ_to_sRGB(XYZ, illuminant=ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D65'], chromatic_adaptation_transform='CAT02', apply_cctf_encoding=True, **kwargs)
  • colour.XYZ_to_sRGB: (@KelSolaar)
    • Signature: sRGB_to_XYZ(RGB, illuminant=ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D65'], chromatic_adaptation_method='CAT02', apply_cctf_decoding=True, **kwargs)

The colour.RGB_to_RGB definition now accepts keyword arguments, they are filtered and passed accordingly to the decoding and encoding colour component transfer functions:

  • colour.RGB_to_RGB: (@KelSolaar)

    • Signature: RGB_to_RGB(RGB, input_colourspace, output_colourspace, chromatic_adaptation_transform='CAT02', apply_decoding_cctf=False, apply_encoding_cctf=False, **kwargs)
  • Various log related objects and signatures have been renamed for consistency purposes:

  • colour.log_decoding_curve: (@KelSolaar)

    • Name: colour.log_decoding
    • Signature: log_decoding(value, function='Cineon', **kwargs)
  • colour.LOG_DECODING_CURVES: (@KelSolaar)

    • Name: colour.LOG_DECODINGS
  • colour.log_encoding_curve: (@KelSolaar)

    • Name: colour.log_encoding
    • Signature: log_encoding(value, function='Cineon', **kwargs)
  • colour.LOG_ENCODING_CURVES: (@KelSolaar)

    • Name: colour.LOG_ENCODINGS

The IEC 61966-2-1:1999 standard does not actually define an OETF but and EOTF so the sRGB related definitions have been renamed accordingly:

  • colour.models.oetf_sRGB: (@KelSolaar)
    • Name: eotf_inverse_sRGB
  • colour.models.oetf_reverse_sRGB: (@KelSolaar)
    • Name: eotf_sRGB

Various other colour component transfer functions objects have been either renamed or their signature changed:

  • colour.eotf: (@KelSolaar)

    • Signature: eotf(value, function='ITU-R BT.1886', **kwargs)
  • colour.EOTFS_REVERSE: (@KelSolaar)

    • Name: EOTF_INVERSES
  • colour.eotf_reverse: (@KelSolaar)

    • Signature: eotf_inverse(value, function='ITU-R BT.1886', **kwargs)
  • colour.oetf: (@KelSolaar)

    • Signature: oetf(value, function='ITU-R BT.709', **kwargs)
  • colour.OETFS_REVERSE: (@KelSolaar)

    • Name: OETF_INVERSES
  • colour.oetf_reverse: (@KelSolaar)

    • Signature: oetf_inverse(value, function='ITU-R BT.709', **kwargs)
  • colour.OOTFS_REVERSE: (@KelSolaar)

    • Name: OOTF_INVERSES
  • colour.models.oetf_DICOMGSDF: (@KelSolaar)

    • Name: eotf_inverse_DICOMGSDF
  • colour.models.eotf_reverse_BT1886: (@KelSolaar)

    • Name: eotf_inverse_BT1886
  • colour.models.eotf_reverse_DCDM: (@KelSolaar)

    • Name: eotf_inverse_DCDM
  • colour.models.oetf_ST2084: (@KelSolaar)

    • Name: eotf_inverse_ST2084
  • colour.models.oetf_reverse_ARIBSTDB67: (@KelSolaar)

    • Name: oetf_inverse_ARIBSTDB67
  • colour.models.oetf_reverse_BT601: (@KelSolaar)

    • Name: oetf_inverse_BT601
  • colour.models.oetf_reverse_BT709: (@KelSolaar)

    • Name: oetf_inverse_BT709
  • colour.models.oetf_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: oetf_HLG_BT2100
    • Signature: oetf_HLG_BT2100(E, constants=BT2100_HLG_CONSTANTS)
  • colour.models.oetf_reverse_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: oetf_inverse_HLG_BT2100
    • Signature: oetf_inverse_HLG_BT2100(E_p, constants=BT2100_HLG_CONSTANTS)
  • colour.models.eotf_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: eotf_HLG_BT2100
    • Signature: eotf_HLG_BT2100(E_p, L_B=0, L_W=1000, gamma=None, constants=BT2100_HLG_CONSTANTS, method='ITU-R BT.2100-2')
  • colour.models.eotf_reverse_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: eotf_inverse_HLG_BT2100
    • Signature: eotf_inverse_HLG_BT2100(F_D, L_B=0, L_W=1000, gamma=None, constants=BT2100_HLG_CONSTANTS, method='ITU-R BT.2100-2')
  • colour.models.ootf_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: ootf_HLG_BT2100
    • Signature: ootf_HLG_BT2100(E, L_B=0, L_W=1000, gamma=None, method='ITU-R BT.2100-2')
  • colour.models.ootf_reverse_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: ootf_inverse_HLG_BT2100
    • Signature: ootf_inverse_HLG_BT2100(F_D, L_B=0, gamma=None, method='ITU-R BT.2100-2')
  • colour.models.oetf_BT2100_PQ: (@KelSolaar, @nick-shaw)

    • Name: oetf_PQ_BT2100
  • colour.models.oetf_reverse_BT2100_PQ: (@KelSolaar, @nick-shaw)

    • Name: oetf_inverse_PQ_BT2100
  • colour.models.eotf_BT2100_PQ: (@KelSolaar, @nick-shaw)

    • Name: eotf_PQ_BT2100
  • colour.models.eotf_reverse_BT2100_PQ: (@KelSolaar, @nick-shaw)

    • Name: eotf_inverse_PQ_BT2100
  • colour.models.ootf_BT2100_PQ: (@KelSolaar, @nick-shaw)

    • Name: ootf_PQ_BT2100
  • colour.models.ootf_reverse_BT2100_PQ: (@KelSolaar, @nick-shaw)

    • Name: ootf_inverse_PQ_BT2100
  • colour.models.log_encoding_Log3G10: (@KelSolaar)

    • Signature: log_encoding_Log3G10(x, method='v2', **kwargs)
  • colour.models.log_decoding_Log3G10: (@KelSolaar)

    • Signature: log_decoding_Log3G10(y, method='v2', **kwargs)
  • colour.models.log_encoding_CanonLog: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_encoding_CanonLog(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)
  • colour.models.log_decoding_CanonLog: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_decoding_CanonLog(clog, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)
  • colour.models.log_encoding_CanonLog2: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_encoding_CanonLog2(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)
  • colour.models.log_decoding_CanonLog2: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_decoding_CanonLog2(clog2, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)
  • colour.models.log_encoding_CanonLog3: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_encoding_CanonLog3(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)
  • colour.models.log_decoding_CanonLog3: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_decoding_CanonLog3(clog3, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)
  • colour.models.log_encoding_VLog: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_encoding_VLog(L_in, bit_depth=10, out_normalised_code_value=True, in_reflection=True, constants=VLOG_CONSTANTS, **kwargs)
  • colour.models.log_decoding_VLog: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_decoding_VLog(V_out, bit_depth=10, in_normalised_code_value=True, out_reflection=True, constants=VLOG_CONSTANTS, **kwargs)
  • colour.models.log_encoding_SLog: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_encoding_SLog(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)
  • colour.models.log_decoding_SLog: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_decoding_SLog(y, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)
  • colour.models.log_encoding_SLog2: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_encoding_SLog2(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)
  • colour.models.log_decoding_SLog2: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_decoding_SLog2(y, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)
  • colour.models.log_encoding_SLog3: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_encoding_SLog3(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)
  • colour.models.log_decoding_SLog3: (@KelSolaar, @nick-shaw, @KevinJW)

    • Signature: log_decoding_SLog3(y, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)
  • colour.models.oetf_ROMMRGB: (@KelSolaar)

    • Name: cctf_encoding_ROMMRGB
  • colour.models.eotf_ROMMRGB: (@KelSolaar)

    • Name: cctf_decoding_ROMMRGB
  • colour.models.oetf_ProPhotoRGB: (@KelSolaar)

    • Name: cctf_encoding_ProPhotoRGB
  • colour.models.eotf_ProPhotoRGB: (@KelSolaar)

    • Name: cctf_decoding_ProPhotoRGB
  • colour.models.oetf_RIMMRGB: (@KelSolaar)

    • Name: cctf_encoding_RIMMRGB
  • colour.models.eotf_RIMMRGB: (@KelSolaar)

    • Name: cctf_decoding_RIMMRGB
  • colour.models.XYZ_to_colourspace_model: (@feralpoosum)

    • Deprecated
  • colour.models.NTSC_COLOURSPACE: (@KelSolaar)

    • Name: NTSC_1953_COLOURSPACE

colour.notation

  • colour.notation.munsell_value_ASTMD153508: (@KelSolaar)
    • Name: munsell_value_ASTMD1535

colour.plotting

  • colour.plotting.ASTM_G_173_DIRECT_CIRCUMSOLAR: (@KelSolaar)
    • Name: ASTMG173_DIRECT_CIRCUMSOLAR
  • colour.plotting.ASTM_G_173_ETR: (@KelSolaar)
    • Name: ASTMG173_ETR
  • colour.plotting.ASTM_G_173_GLOBAL_TILT: (@KelSolaar)
    • Name: ASTMG173_GLOBAL_TILT
  • colour.plotting.plot_single_sd_colour_quality_scale_bars: (@KelSolaar)
    • Signature: plot_single_sd_colour_quality_scale_bars(sd, method='NIST CQS 9.0', **kwargs)
  • colour.plotting.plot_multi_sds_colour_quality_scales_bars: (@KelSolaar)
    • Signature: plot_multi_sds_colour_quality_scales_bars(sds, method='NIST CQS 9.0', **kwargs)
  • colour.plotting.plot_planckian_locus_in_chromaticity_diagram_CIE1931: (@KelSolaar)
    • Signature: plot_planckian_locus_in_chromaticity_diagram_CIE1931(illuminants=None, annotate_parameters=None, chromaticity_diagram_callable_CIE1931=plot_chromaticity_diagram_CIE1931, planckian_locus_callable_CIE1931=plot_planckian_locus_CIE1931, **kwargs)
  • colour.plotting.plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS: (@KelSolaar)
    • Signature: plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(illuminants=None, annotate_parameters=None, chromaticity_diagram_callable_CIE1960UCS=plot_chromaticity_diagram_CIE1960UCS, planckian_locus_callable_CIE1960UCS=plot_planckian_locus_CIE1960UCS, **kwargs)

colour.recovery

  • colour.recovery.XYZ_to_sd_Meng2015: (@KelSolaar)
    • Signature: XYZ_to_sd_Meng2015(XYZ, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].copy().align(DEFAULT_SPECTRAL_SHAPE_MENG_2015), illuminant=sd_ones(DEFAULT_SPECTRAL_SHAPE_MENG_2015), optimisation_parameters=None)

colour.temperature

  • colour.xy_to_CCT: (@KelSolaar)
    • Signature: xy_to_CCT(xy, method='CIE Illuminant D Series')
  • colour.CCT_to_xy: (@KelSolaar)
    • Signature: CCT_to_xy(CCT, method='CIE Illuminant D Series')

v0.3.13

4 years ago

Colour 0.3.13 - Alpha Milestone

This is mainly a maintenance release addressing regressions introduced in CIECAM02 and CAM16 implementations by Colour 0.3.12.

Features

colour.quality

  • Add colour.uv_to_Luv and colour.uv_to_UCS conversion definitions. (@kelsolaar)

colour.quality

  • Implement support for colour quality scale computation using NIST CQS 9.0 method based on the latest available spreadsheet from Yoshi Ohno. The results are typically very close to NIST CQS 7.4 method. The colour.COLOUR_QUALITY_SCALE_METHODS attribute was added to enumerate the available methods. (@kelsolaar)

colour.utilities

  • Implement colour.utilities.multiprocessing_pool context manager to support domain-range scale propagation when multiprocessing code on Windows. (@kelsolaar)

Fixes

colour.appearance

Changes

colour.colorimetry

  • colour.whiteness: (@kelsolaar)
    • Signature: whiteness(XYZ, XYZ_0, method='CIE 2004', **kwargs)

colour.notation

  • The colour.notation.munsell_specification_to_xyY, colour.notation.xyY_to_munsell_specification, colour.munsell_colour_to_xyY and colour.xyY_to_munsell_colour definitions have been updated to support n-dimensional arrays. (@kelsolaar)

colour.plotting

  • colour.plotting.plot_single_sd: (@kelsolaar)
    • Signature: plot_single_sd(sd, cmfs='CIE 1931 2 Degree Standard Observer', out_of_gamut_clipping=True, modulate_colours_with_sd_amplitude=False, equalize_sd_amplitude=False, **kwargs)
  • colour.plotting.plot_single_sd_colour_quality_scale_bars: (@kelsolaar)
    • Signature: plot_single_sd_colour_quality_scale_bars(sd, method='NIST CQS 7.4', **kwargs)
  • colour.plotting.plot_multi_sds_colour_quality_scales_bars: (@kelsolaar)
    • Signature: plot_multi_sds_colour_quality_scales_bars(sds, method='NIST CQS 7.4', **kwargs)

colour.quality

  • colour.colour_quality_scale: (@kelsolaar)
    • Signature: colour_quality_scale(sd_test, additional_data=False, method='NIST CQS 9.0')

colour.temperature

  • The colour.cct.uv_to_CCT_Ohno2013, colour.cct.CCT_to_uv_Ohno2013, colour.cct.uv_to_CCT_Robertson1968, colour.cct.CCT_to_uv_Robertson1968, colour.CCT_to_uv and colour.uv_to_CCT definitions have been updated to support n-dimensional arrays. The D_uv argument is now required to be passed horizontally stacked with the CCT argument. (@KelSolaar)

Colour 0.3.12

>>> CCT, D_uv = 6503.49254150, 0.00320598
>>> colour.CCT_to_uv(CCT, D_uv=D_uv)
>>> colour.temperature.CCT_to_uv_Ohno2013(CCT, D_uv)

Colour 0.3.13

>>> CCT_D_uv = [6503.49254150, 0.00320598]
>>> colour.CCT_to_uv(CCT_D_uv, cmfs=cmfs)
>>> colour.temperature.CCT_to_uv_Ohno2013(CCT_D_uv)
  • colour.temperature.CCT_to_uv_Ohno2013: (@kelsolaar)
    • Signature: `CCT_to_uv_Ohno2013(CCT_D_uv, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'])
  • colour.temperature.CCT_to_uv_Robertson1968: (@kelsolaar)
    • Signature: `CCT_to_uv_Robertson1968(CCT_D_uv)

colour.volume

  • colour.RGB_colourspace_volume_MonteCarlo: (@kelsolaar)
    • Signature: RGB_colourspace_volume_MonteCarlo(colourspace, samples=10e6, limits=np.array([[0, 100], [-150, 150], [-150, 150]], dtype=np.float), illuminant_Lab=ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D65'], chromatic_adaptation_method='CAT02', random_generator=random_triplet_generator, random_state=None)

v0.3.12

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.

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 np

import 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)

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)