Source code for colour.models.rgb.common
"""
Common RGB Colour Models Utilities
==================================
Define various RGB colour models common utilities.
"""
from __future__ import annotations
from colour.colorimetry import CCS_ILLUMINANTS
from colour.hints import (
ArrayLike,
LiteralChromaticAdaptationTransform,
NDArrayFloat,
)
from colour.models.rgb import RGB_COLOURSPACES, RGB_to_XYZ, XYZ_to_RGB
__author__ = "Colour Developers"
__copyright__ = "Copyright 2013 Colour Developers"
__license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"
__maintainer__ = "Colour Developers"
__email__ = "colour-developers@colour-science.org"
__status__ = "Production"
__all__ = [
"XYZ_to_sRGB",
"sRGB_to_XYZ",
]
[docs]
def XYZ_to_sRGB(
XYZ: ArrayLike,
illuminant: ArrayLike = CCS_ILLUMINANTS["CIE 1931 2 Degree Standard Observer"][
"D65"
],
chromatic_adaptation_transform: (
LiteralChromaticAdaptationTransform | str | None
) = "CAT02",
apply_cctf_encoding: bool = True,
) -> NDArrayFloat:
"""
Convert from *CIE XYZ* tristimulus values to *sRGB* colourspace.
Parameters
----------
XYZ
*CIE XYZ* tristimulus values.
illuminant
Source illuminant chromaticity coordinates.
chromatic_adaptation_transform
*Chromatic adaptation* transform.
apply_cctf_encoding
Whether to apply the *sRGB* encoding colour component transfer function
/ inverse electro-optical transfer function.
Returns
-------
:class:`numpy.ndarray`
*sRGB* colour array.
Notes
-----
+------------+-----------------------+---------------+
| **Domain** | **Scale - Reference** | **Scale - 1** |
+============+=======================+===============+
| ``XYZ`` | [0, 1] | [0, 1] |
+------------+-----------------------+---------------+
+------------+-----------------------+---------------+
| **Range** | **Scale - Reference** | **Scale - 1** |
+============+=======================+===============+
| ``RGB`` | [0, 1] | [0, 1] |
+------------+-----------------------+---------------+
Examples
--------
>>> import numpy as np
>>> XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
>>> XYZ_to_sRGB(XYZ) # doctest: +ELLIPSIS
array([ 0.7057393..., 0.1924826..., 0.2235416...])
"""
return XYZ_to_RGB(
XYZ,
RGB_COLOURSPACES["sRGB"],
illuminant,
chromatic_adaptation_transform,
apply_cctf_encoding,
)
[docs]
def sRGB_to_XYZ(
RGB: ArrayLike,
illuminant: ArrayLike = CCS_ILLUMINANTS["CIE 1931 2 Degree Standard Observer"][
"D65"
],
chromatic_adaptation_transform: (
LiteralChromaticAdaptationTransform | str | None
) = "CAT02",
apply_cctf_decoding: bool = True,
) -> NDArrayFloat:
"""
Convert from *sRGB* colourspace to *CIE XYZ* tristimulus values.
Parameters
----------
RGB
*sRGB* colourspace array.
illuminant
Source illuminant chromaticity coordinates.
chromatic_adaptation_transform
*Chromatic adaptation* transform.
apply_cctf_decoding
Whether to apply the *sRGB* decoding colour component transfer function
/ electro-optical transfer function.
Returns
-------
:class:`numpy.ndarray`
*CIE XYZ* tristimulus values.
Notes
-----
+------------+-----------------------+---------------+
| **Domain** | **Scale - Reference** | **Scale - 1** |
+============+=======================+===============+
| ``RGB`` | [0, 1] | [0, 1] |
+------------+-----------------------+---------------+
+------------+-----------------------+---------------+
| **Range** | **Scale - Reference** | **Scale - 1** |
+============+=======================+===============+
| ``XYZ`` | [0, 1] | [0, 1] |
+------------+-----------------------+---------------+
Examples
--------
>>> import numpy as np
>>> RGB = np.array([0.70573936, 0.19248266, 0.22354169])
>>> sRGB_to_XYZ(RGB) # doctest: +ELLIPSIS
array([ 0.2065429..., 0.1219794..., 0.0513714...])
"""
return RGB_to_XYZ(
RGB,
RGB_COLOURSPACES["sRGB"],
illuminant,
chromatic_adaptation_transform,
apply_cctf_decoding,
)