Coverage for models/rgb/datasets/eci_rgb_v2.py: 7%
29 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-16 22:49 +1300
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-16 22:49 +1300
1"""
2ECI RGB v2 Colourspace
3======================
5Define the *ECI RGB v2* colourspace:
7- :attr:`colour.models.RGB_COLOURSPACE_ECI_RGB_V2`.
9References
10----------
11- :cite:`EuropeanColorInitiative2002a` : European Color Initiative. (2002).
12 ECI RGB v2.
13 http://www.eci.org/_media/downloads/icc_profiles_from_eci/ecirgbv20.zip
14"""
16from __future__ import annotations
18import typing
19from functools import partial
21import numpy as np
23from colour.colorimetry import CCS_ILLUMINANTS, lightness_CIE1976, luminance_CIE1976
25if typing.TYPE_CHECKING:
26 from colour.hints import (
27 ArrayLike,
28 Callable,
29 NDArrayFloat,
30 )
32from colour.models.rgb import RGB_Colourspace, normalised_primary_matrix
33from colour.utilities import as_float_array
35__author__ = "Colour Developers"
36__copyright__ = "Copyright 2013 Colour Developers"
37__license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"
38__maintainer__ = "Colour Developers"
39__email__ = "colour-developers@colour-science.org"
40__status__ = "Production"
42__all__ = [
43 "PRIMARIES_ECI_RGB_V2",
44 "WHITEPOINT_NAME_ECI_RGB_V",
45 "CCS_WHITEPOINT_ECI_RGB_V2",
46 "MATRIX_ECI_RGB_V2_TO_XYZ",
47 "MATRIX_XYZ_TO_ECI_RGB_V2",
48 "RGB_COLOURSPACE_ECI_RGB_V2",
49]
51PRIMARIES_ECI_RGB_V2: NDArrayFloat = np.array(
52 [
53 [0.670103092783505, 0.329896907216495],
54 [0.209905660377358, 0.709905660377358],
55 [0.140061791967044, 0.080329557157570],
56 ]
57)
58"""*ECI RGB v2* colourspace primaries."""
60WHITEPOINT_NAME_ECI_RGB_V: str = "D50"
61"""*ECI RGB v2* colourspace whitepoint name."""
63CCS_WHITEPOINT_ECI_RGB_V2: NDArrayFloat = CCS_ILLUMINANTS[
64 "CIE 1931 2 Degree Standard Observer"
65][WHITEPOINT_NAME_ECI_RGB_V]
66"""*ECI RGB v2* colourspace whitepoint chromaticity coordinates."""
68MATRIX_ECI_RGB_V2_TO_XYZ: NDArrayFloat = normalised_primary_matrix(
69 PRIMARIES_ECI_RGB_V2, CCS_WHITEPOINT_ECI_RGB_V2
70)
71"""*ECI RGB v2* colourspace to *CIE XYZ* tristimulus values matrix."""
73MATRIX_XYZ_TO_ECI_RGB_V2: NDArrayFloat = np.linalg.inv(MATRIX_ECI_RGB_V2_TO_XYZ)
74"""*CIE XYZ* tristimulus values to *ECI RGB v2* colourspace matrix."""
77def _scale_domain_0_100_range_0_1(a: ArrayLike, callable_: Callable) -> NDArrayFloat:
78 """
79 Scale the input domain of the specified *luminance* :math:`Y` or *Lightness*
80 :math:`L^*` array to [0, 100], call the specified callable, and
81 scales the output range to [0, 1].
83 Parameters
84 ----------
85 a
86 *Luminance* :math:`Y` or *Lightness* :math:`L^*` array.
87 callable_
88 *Luminance* :math:`Y` or *Lightness* :math:`L^*` computation
89 definition, i.e., :func:`colour.colorimetry.lightness_CIE1976` or
90 :func:`colour.colorimetry.luminance_CIE1976`. Reference white
91 *luminance* :math:`Y_n` has implicit value of :math:`100\\ cd/m^2`.
93 Returns
94 -------
95 :class:`numpy.ndarray`
96 Scaled *luminance* :math:`Y` or *Lightness* :math:`L^*` array.
97 """
99 a = as_float_array(a)
101 return callable_(a * 100, Y_n=100) / 100
104RGB_COLOURSPACE_ECI_RGB_V2: RGB_Colourspace = RGB_Colourspace(
105 "ECI RGB v2",
106 PRIMARIES_ECI_RGB_V2,
107 CCS_WHITEPOINT_ECI_RGB_V2,
108 WHITEPOINT_NAME_ECI_RGB_V,
109 MATRIX_ECI_RGB_V2_TO_XYZ,
110 MATRIX_XYZ_TO_ECI_RGB_V2,
111 partial(_scale_domain_0_100_range_0_1, callable_=lightness_CIE1976),
112 partial(_scale_domain_0_100_range_0_1, callable_=luminance_CIE1976),
113)
114RGB_COLOURSPACE_ECI_RGB_V2.__doc__ = """
115*ECI RGB v2* colourspace.
117References
118----------
119:cite:`EuropeanColorInitiative2002a`
120"""