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: LiteralChromaticAdaptationTransform | str | None = 'CAT02', additional_data: Literal[True] = True) Tuple[NDArrayFloat, NDArrayFloat, NDArrayFloat, NDArrayFloat][source]#
colour.matrix_idt(sensitivities: ..., illuminant: ..., training_data: MultiSpectralDistributions | None = None, cmfs: MultiSpectralDistributions | None = None, optimisation_factory: Callable = optimisation_factory_rawtoaces_v1, optimisation_kwargs: dict | None = None, chromatic_adaptation_transform: LiteralChromaticAdaptationTransform | str | None = 'CAT02', *, additional_data: Literal[False]) Tuple[NDArrayFloat, NDArrayFloat]
colour.matrix_idt(sensitivities: RGB_CameraSensitivities, illuminant: SpectralDistribution, training_data: MultiSpectralDistributions | None, cmfs: MultiSpectralDistributions | None, optimisation_factory: Callable, optimisation_kwargs: dict | None, chromatic_adaptation_transform: LiteralChromaticAdaptationTransform | str | None, additional_data: Literal[False]) Tuple[NDArrayFloat, NDArrayFloat, NDArrayFloat, NDArrayFloat]

Compute an Input Device Transform (IDT) matrix for 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 (LiteralChromaticAdaptationTransform | 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 specified 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...])