colour.recovery.XYZ_to_sd_Jakob2019#

colour.recovery.XYZ_to_sd_Jakob2019(XYZ: ArrayLike, cmfs: Optional[MultiSpectralDistributions] = None, illuminant: Optional[SpectralDistribution] = None, optimisation_kwargs: Optional[Dict] = None, additional_data: bool = False) Union[Tuple[SpectralDistribution, float], SpectralDistribution][source]#

Recover the spectral distribution of given RGB colourspace array using Jakob and Hanika (2019) method.

Parameters:
Returns:

Tuple of recovered spectral distribution and \(\Delta E_{76}\) between the target colour and the colour corresponding to the computed coefficients or recovered spectral distribution.

Return type:

tuple or colour.SpectralDistribution

References

[JH19]

Examples

>>> from colour import (
...     CCS_ILLUMINANTS, MSDS_CMFS, SDS_ILLUMINANTS, XYZ_to_sRGB)
>>> from colour.colorimetry import sd_to_XYZ_integration
>>> from colour.utilities import numpy_print_options
>>> XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
>>> cmfs = (
...     MSDS_CMFS['CIE 1931 2 Degree Standard Observer'].
...     copy().align(SpectralShape(360, 780, 10))
... )
>>> illuminant = SDS_ILLUMINANTS['D65'].copy().align(cmfs.shape)
>>> sd = XYZ_to_sd_Jakob2019(XYZ, cmfs, illuminant)
>>> with numpy_print_options(suppress=True):
...     sd  
SpectralDistribution([[ 360.        ,    0.4893773...],
                      [ 370.        ,    0.3258214...],
                      [ 380.        ,    0.2147792...],
                      [ 390.        ,    0.1482413...],
                      [ 400.        ,    0.1086169...],
                      [ 410.        ,    0.0841255...],
                      [ 420.        ,    0.0683114...],
                      [ 430.        ,    0.0577144...],
                      [ 440.        ,    0.0504267...],
                      [ 450.        ,    0.0453552...],
                      [ 460.        ,    0.0418520...],
                      [ 470.        ,    0.0395259...],
                      [ 480.        ,    0.0381430...],
                      [ 490.        ,    0.0375741...],
                      [ 500.        ,    0.0377685...],
                      [ 510.        ,    0.0387432...],
                      [ 520.        ,    0.0405871...],
                      [ 530.        ,    0.0434783...],
                      [ 540.        ,    0.0477225...],
                      [ 550.        ,    0.0538256...],
                      [ 560.        ,    0.0626314...],
                      [ 570.        ,    0.0755869...],
                      [ 580.        ,    0.0952675...],
                      [ 590.        ,    0.1264265...],
                      [ 600.        ,    0.1779272...],
                      [ 610.        ,    0.2649393...],
                      [ 620.        ,    0.4039779...],
                      [ 630.        ,    0.5832105...],
                      [ 640.        ,    0.7445440...],
                      [ 650.        ,    0.8499970...],
                      [ 660.        ,    0.9094792...],
                      [ 670.        ,    0.9425378...],
                      [ 680.        ,    0.9616376...],
                      [ 690.        ,    0.9732481...],
                      [ 700.        ,    0.9806562...],
                      [ 710.        ,    0.9855873...],
                      [ 720.        ,    0.9889903...],
                      [ 730.        ,    0.9914117...],
                      [ 740.        ,    0.9931801...],
                      [ 750.        ,    0.9945009...],
                      [ 760.        ,    0.9955066...],
                      [ 770.        ,    0.9962855...],
                      [ 780.        ,    0.9968976...]],
                     SpragueInterpolator,
                     {},
                     Extrapolator,
                     {'method': 'Constant', 'left': None, 'right': None})
>>> sd_to_XYZ_integration(sd, cmfs, illuminant) / 100  
array([ 0.2066217...,  0.1220128...,  0.0513958...])