colour.matrix_idt#

colour.matrix_idt(sensitivities: RGB_CameraSensitivities, illuminant: SpectralDistribution, training_data: MultiSpectralDistributions | None = None, cmfs: MultiSpectralDistributions | None = None, optimisation_factory: Callable = optimisation_factory_rawtoaces_v1, optimisation_kwargs: dict | None = None, chromatic_adaptation_transform: Literal['Bianco 2010', 'Bianco PC 2010', 'Bradford', 'CAT02', 'CAT02 Brill 2008', 'CAT16', 'CMCCAT2000', 'CMCCAT97', 'Fairchild', 'Sharp', 'Von Kries', 'XYZ Scaling'] | str | None = 'CAT02', additional_data: bool = False) Tuple[NDArrayFloat, NDArrayFloat, NDArrayFloat, NDArrayFloat] | Tuple[NDArrayFloat, NDArrayFloat][source]#

Compute an Input Device Transform (IDT) matrix for given camera RGB spectral sensitivities, illuminant, training data, standard observer colour matching functions and optimisation settings according to RAW to ACES v1 and P-2013-001 procedures.

Parameters:
  • sensitivities (RGB_CameraSensitivities) – Camera RGB spectral sensitivities.

  • illuminant (SpectralDistribution) – Illuminant spectral distribution.

  • training_data (MultiSpectralDistributions | None) – Training data multi-spectral distributions, defaults to using the RAW to ACES v1 190 patches.

  • cmfs (MultiSpectralDistributions | None) – Standard observer colour matching functions, default to the CIE 1931 2 Degree Standard Observer.

  • optimisation_factory (Callable) – Callable producing the objective function and the CIE XYZ to optimisation colour model function.

  • optimisation_kwargs (dict | None) – Parameters for scipy.optimize.minimize() definition.

  • chromatic_adaptation_transform (Literal['Bianco 2010', 'Bianco PC 2010', 'Bradford', 'CAT02', 'CAT02 Brill 2008', 'CAT16', 'CMCCAT2000', 'CMCCAT97', 'Fairchild', 'Sharp', 'Von Kries', 'XYZ Scaling'] | str | None) – Chromatic adaptation transform, if None no chromatic adaptation is performed.

  • additional_data (bool) – If True, the XYZ and RGB tristimulus values are also returned.

Returns:

Tuple of IDT matrix and white balance multipliers or tuple of IDT matrix, white balance multipliers, XYZ and RGB tristimulus values.

Return type:

tuple

References

[DFI+17], [TheAoMPAaSciencesScienceaTCouncilAcademyCESACESPSubcommittee15]

Examples

Computing the IDT matrix for a CANON EOS 5DMark II and CIE Illuminant D Series D55 using the method given in RAW to ACES v1:

>>> path = os.path.join(
...     ROOT_RESOURCES_RAWTOACES,
...     "CANON_EOS_5DMark_II_RGB_Sensitivities.csv",
... )
>>> sensitivities = sds_and_msds_to_msds(read_sds_from_csv_file(path).values())
>>> illuminant = SDS_ILLUMINANTS["D55"]
>>> M, RGB_w = matrix_idt(sensitivities, illuminant)
>>> np.around(M, 3)
array([[ 0.865, -0.026,  0.161],
       [ 0.057,  1.123, -0.18 ],
       [ 0.024, -0.203,  1.179]])
>>> RGB_w  
array([ 2.3414154...,  1.        ,  1.5163375...])

The RAW to ACES v1 matrix for the same camera and optimized by Ceres Solver is as follows:

0.864994 -0.026302 0.161308
0.056527 1.122997 -0.179524
0.023683 -0.202547 1.178864
>>> M, RGB_w = matrix_idt(
...     sensitivities,
...     illuminant,
...     optimisation_factory=optimisation_factory_Jzazbz,
... )
>>> np.around(M, 3)
array([[ 0.852, -0.009,  0.158],
       [ 0.054,  1.122, -0.176],
       [ 0.023, -0.224,  1.2  ]])
>>> RGB_w  
array([ 2.3414154...,  1.        ,  1.5163375...])
>>> M, RGB_w = matrix_idt(
...     sensitivities,
...     illuminant,
...     optimisation_factory=optimisation_factory_Oklab_15,
... )
>>> np.around(M, 3)
array([[ 0.645, -0.611,  0.107,  0.736,  0.398, -0.275],
       [-0.159,  0.728, -0.091,  0.651,  0.01 , -0.139],
       [-0.172, -0.403,  1.394,  0.51 , -0.295, -0.034]])
>>> RGB_w  
array([ 2.3414154...,  1.        ,  1.5163375...])