def _derive_transformation_matrices(self): """ Computes the derived transformations matrices, the normalised primary matrix and its inverse. """ if hasattr(self, '_primaries') and hasattr(self, '_whitepoint'): if self._primaries is not None and self._whitepoint is not None: npm = normalised_primary_matrix(self._primaries, self._whitepoint) self._derived_RGB_to_XYZ_matrix = npm self._derived_XYZ_to_RGB_matrix = np.linalg.inv(npm)
def _derive_transformation_matrices(self): """ Computes the derived transformations matrices, the normalised primary matrix and its inverse. """ if hasattr(self, '_primaries') and hasattr(self, '_whitepoint'): if self._primaries is not None and self._whitepoint is not None: npm = normalised_primary_matrix(self._primaries, self._whitepoint) self._derived_RGB_to_XYZ_matrix = npm self._derived_XYZ_to_RGB_matrix = np.linalg.inv(npm)
""" *Ekta Space PS 5* colourspace whitepoint name. WHITEPOINT_NAME_EKTA_SPACE_PS_5_V : unicode """ CCS_WHITEPOINT_EKTA_SPACE_PS_5 = ( CCS_ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [WHITEPOINT_NAME_EKTA_SPACE_PS_5_V]) """ *Ekta Space PS 5* colourspace whitepoint chromaticity coordinates. CCS_WHITEPOINT_EKTA_SPACE_PS_5 : ndarray """ MATRIX_EKTA_SPACE_PS_5_TO_XYZ = normalised_primary_matrix( PRIMARIES_EKTA_SPACE_PS_5, CCS_WHITEPOINT_EKTA_SPACE_PS_5) """ *Ekta Space PS 5* colourspace to *CIE XYZ* tristimulus values matrix. MATRIX_EKTA_SPACE_PS_5_TO_XYZ : array_like, (3, 3) """ MATRIX_XYZ_TO_EKTA_SPACE_PS_5 = np.linalg.inv(MATRIX_EKTA_SPACE_PS_5_TO_XYZ) """ *CIE XYZ* tristimulus values to *Ekta Space PS 5* colourspace matrix. MATRIX_XYZ_TO_EKTA_SPACE_PS_5 : array_like, (3, 3) """ RGB_COLOURSPACE_EKTA_SPACE_PS_5 = RGB_Colourspace( 'Ekta Space PS 5',
""" *FilmLight E-Gamut* colourspace whitepoint name. FILMLIGHT_E_GAMUT_WHITEPOINT : unicode """ FILMLIGHT_E_GAMUT_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [FILMLIGHT_E_GAMUT_WHITEPOINT_NAME]) """ *FilmLight E-Gamut* colourspace whitepoint. FILMLIGHT_E_GAMUT_WHITEPOINT : ndarray """ FILMLIGHT_E_GAMUT_TO_XYZ_MATRIX = (normalised_primary_matrix( FILMLIGHT_E_GAMUT_PRIMARIES, FILMLIGHT_E_GAMUT_WHITEPOINT)) """ *FilmLight E-Gamut* colourspace to *CIE XYZ* tristimulus values matrix. FILMLIGHT_E_GAMUT_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_FILMLIGHT_E_GAMUT_MATRIX = ( np.linalg.inv(FILMLIGHT_E_GAMUT_TO_XYZ_MATRIX)) """ *CIE XYZ* tristimulus values to *FilmLight E-Gamut* colourspace matrix. XYZ_TO_FILMLIGHT_E_GAMUT_MATRIX : array_like, (3, 3) """ FILMLIGHT_E_GAMUT_COLOURSPACE = RGB_Colourspace(
*ACES Primaries 0* to *CIE XYZ* tristimulus values matrix defined as per [2]. MATRIX_AP0_TO_XYZ : array_like, (3, 3) """ MATRIX_XYZ_TO_AP0 = np.array([ [1.0498110175, 0.0000000000, -0.0000974845], [-0.4959030231, 1.3733130458, 0.0982400361], [0.0000000000, 0.0000000000, 0.9912520182], ]) """ *CIE XYZ* tristimulus values to *ACES Primaries 0* matrix. MATRIX_XYZ_TO_AP0 : array_like, (3, 3) """ MATRIX_AP1_TO_XYZ = normalised_primary_matrix(AP1, CCS_WHITEPOINT_ACES) """ *ACES Primaries 1* to *CIE XYZ* tristimulus values matrix. MATRIX_AP1_TO_XYZ : array_like, (3, 3) """ MATRIX_XYZ_TO_AP1 = np.linalg.inv(MATRIX_AP1_TO_XYZ) """ *CIE XYZ* tristimulus values to *ACES Primaries 1* matrix. MATRIX_XYZ_TO_AP1 : array_like, (3, 3) """ RGB_COLOURSPACE_ACES2065_1 = RGB_Colourspace( 'ACES2065-1',
CINEMA_GAMUT_ILLUMINANT = 'D65' """ *Cinema Gamut* colourspace whitepoint name as illuminant. CINEMA_GAMUT_ILLUMINANT : unicode """ CINEMA_GAMUT_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(CINEMA_GAMUT_ILLUMINANT) """ *Cinema Gamut* colourspace whitepoint. CINEMA_GAMUT_WHITEPOINT : tuple """ CINEMA_GAMUT_TO_XYZ_MATRIX = normalised_primary_matrix(CINEMA_GAMUT_PRIMARIES, CINEMA_GAMUT_WHITEPOINT) """ *Cinema Gamut* colourspace to *CIE XYZ* tristimulus values matrix. CINEMA_GAMUT_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_CINEMA_GAMUT_MATRIX = np.linalg.inv(CINEMA_GAMUT_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Cinema Gamut* colourspace matrix. XYZ_TO_CINEMA_GAMUT_MATRIX : array_like, (3, 3) """ CINEMA_GAMUT_COLOURSPACE = RGB_Colourspace( 'Cinema Gamut',
SMPTE_240M_WHITEPOINT_NAME = 'D65' """ *SMPTE 240M* colourspace whitepoint name. SMPTE_240M_WHITEPOINT_NAME : unicode """ SMPTE_240M_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [SMPTE_240M_WHITEPOINT_NAME]) """ *SMPTE 240M* colourspace whitepoint. SMPTE_240M_WHITEPOINT : ndarray """ SMPTE_240M_TO_XYZ_MATRIX = normalised_primary_matrix(SMPTE_240M_PRIMARIES, SMPTE_240M_WHITEPOINT) """ *SMPTE 240M* colourspace to *CIE XYZ* tristimulus values matrix. SMPTE_240M_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_SMPTE_240M_MATRIX = np.linalg.inv(SMPTE_240M_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *SMPTE 240M* colourspace matrix. XYZ_TO_SMPTE_240M_MATRIX : array_like, (3, 3) """ SMPTE_240M_COLOURSPACE = RGB_Colourspace( 'SMPTE 240M',
""" *Adobe Wide Gamut RGB* colourspace whitepoint name. WHITEPOINT_NAME_ADOBE_WIDE_GAMUT_RGB : unicode """ CCS_WHITEPOINT_ADOBE_WIDE_GAMUT_RGB = ( CCS_ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [WHITEPOINT_NAME_ADOBE_WIDE_GAMUT_RGB]) """ *Adobe Wide Gamut RGB* colourspace whitepoint chromaticity coordinates. CCS_WHITEPOINT_ADOBE_WIDE_GAMUT_RGB : ndarray """ MATRIX_ADOBE_WIDE_GAMUT_RGB_TO_XYZ = normalised_primary_matrix( PRIMARIES_ADOBE_WIDE_GAMUT_RGB, CCS_WHITEPOINT_ADOBE_WIDE_GAMUT_RGB) """ *Adobe Wide Gamut RGB* colourspace to *CIE XYZ* tristimulus values matrix. MATRIX_ADOBE_WIDE_GAMUT_RGB_TO_XYZ : array_like, (3, 3) """ MATRIX_XYZ_TO_ADOBE_WIDE_GAMUT_RGB = np.linalg.inv( MATRIX_ADOBE_WIDE_GAMUT_RGB_TO_XYZ) """ *CIE XYZ* tristimulus values to *Adobe Wide Gamut RGB* colourspace matrix. MATRIX_XYZ_TO_ADOBE_WIDE_GAMUT_RGB : array_like, (3, 3) """ RGB_COLOURSPACE_ADOBE_WIDE_GAMUT_RGB = RGB_Colourspace(
EKTA_SPACE_PS_5_V_WHITEPOINT_NAME = 'D50' """ *Ekta Space PS 5* colourspace whitepoint name. EKTA_SPACE_PS_5_V_WHITEPOINT_NAME : unicode """ EKTA_SPACE_PS_5_WHITEPOINT = (ILLUMINANTS[ 'CIE 1931 2 Degree Standard Observer'][EKTA_SPACE_PS_5_V_WHITEPOINT_NAME]) """ *Ekta Space PS 5* colourspace whitepoint. EKTA_SPACE_PS_5_WHITEPOINT : ndarray """ EKTA_SPACE_PS_5_TO_XYZ_MATRIX = normalised_primary_matrix( EKTA_SPACE_PS_5_PRIMARIES, EKTA_SPACE_PS_5_WHITEPOINT) """ *Ekta Space PS 5* colourspace to *CIE XYZ* tristimulus values matrix. EKTA_SPACE_PS_5_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_EKTA_SPACE_PS_5_MATRIX = np.linalg.inv(EKTA_SPACE_PS_5_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Ekta Space PS 5* colourspace matrix. XYZ_TO_EKTA_SPACE_PS_5_MATRIX : array_like, (3, 3) """ EKTA_SPACE_PS_5_COLOURSPACE = RGB_Colourspace( 'Ekta Space PS 5',
PROTUNE_NATIVE_WHITEPOINT_NAME = 'D65' """ *Protune Native* colourspace whitepoint name. PROTUNE_NATIVE_WHITEPOINT_NAME : unicode """ PROTUNE_NATIVE_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [PROTUNE_NATIVE_WHITEPOINT_NAME]) """ *Protune Native* colourspace whitepoint. PROTUNE_NATIVE_WHITEPOINT : ndarray """ PROTUNE_NATIVE_TO_XYZ_MATRIX = normalised_primary_matrix( PROTUNE_NATIVE_PRIMARIES, PROTUNE_NATIVE_WHITEPOINT) """ *Protune Native* colourspace to *CIE XYZ* tristimulus values matrix. PROTUNE_NATIVE_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_PROTUNE_NATIVE_MATRIX = np.linalg.inv(PROTUNE_NATIVE_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Protune Native* colourspace matrix. XYZ_TO_PROTUNE_NATIVE_MATRIX : array_like, (3, 3) """ PROTUNE_NATIVE_COLOURSPACE = RGB_Colourspace( 'Protune Native',
BT709_WHITEPOINT_NAME = 'D65' """ *ITU-R BT.709* colourspace whitepoint name. BT709_WHITEPOINT_NAME : unicode """ BT709_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][BT709_WHITEPOINT_NAME]) """ *ITU-R BT.709* colourspace whitepoint. BT709_WHITEPOINT : ndarray """ BT709_TO_XYZ_MATRIX = normalised_primary_matrix(BT709_PRIMARIES, BT709_WHITEPOINT) """ *ITU-R BT.709* colourspace to *CIE XYZ* tristimulus values matrix. BT709_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_BT709_MATRIX = np.linalg.inv(BT709_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ITU-R BT.709* colourspace matrix. XYZ_TO_BT709_MATRIX : array_like, (3, 3) """ BT709_COLOURSPACE = RGB_Colourspace( 'ITU-R BT.709',
BT470_525_WHITEPOINT_NAME = 'C' """ *ITU-R BT.470 - 525* colourspace whitepoint name. BT470_525_WHITEPOINT_NAME : unicode """ BT470_525_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ BT470_525_WHITEPOINT_NAME]) """ *ITU-R BT.470 - 525* colourspace whitepoint. BT470_525_WHITEPOINT : ndarray """ BT470_525_TO_XYZ_MATRIX = normalised_primary_matrix(BT470_525_PRIMARIES, BT470_525_WHITEPOINT) """ *ITU-R BT.470 - 525* colourspace to *CIE XYZ* tristimulus values matrix. BT470_525_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_BT470_525_MATRIX = np.linalg.inv(BT470_525_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ITU-R BT.470 - 525* colourspace matrix. XYZ_TO_BT470_525_MATRIX : array_like, (3, 3) """ BT470_525_COLOURSPACE = RGB_Colourspace( 'ITU-R BT.470 - 525',
P3_D65_WHITEPOINT_NAME = 'D65' """ *P3-D65* colourspace whitepoint name. P3_D65_WHITEPOINT_NAME : unicode """ P3_D65_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][P3_D65_WHITEPOINT_NAME]) """ *P3-D65* colourspace whitepoint. P3_D65_WHITEPOINT : ndarray """ P3_D65_TO_XYZ_MATRIX = normalised_primary_matrix(P3_D65_PRIMARIES, P3_D65_WHITEPOINT) """ *P3-D65* colourspace to *CIE XYZ* tristimulus values matrix. P3_D65_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_P3_D65_MATRIX = np.linalg.inv(P3_D65_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *P3-D65* colourspace matrix. XYZ_TO_P3_D65_MATRIX : array_like, (3, 3) """ P3_D65_COLOURSPACE = RGB_Colourspace( 'P3-D65',
def sd_to_aces_relative_exposure_values( sd, illuminant=ILLUMINANTS_SDS['D65'], apply_chromatic_adaptation=False, chromatic_adaptation_transform='CAT02'): """ Converts given spectral distribution to *ACES2065-1* colourspace relative exposure values. Parameters ---------- sd : SpectralDistribution Spectral distribution. illuminant : SpectralDistribution, optional *Illuminant* spectral distribution. apply_chromatic_adaptation : bool, optional Whether to apply chromatic adaptation using given transform. chromatic_adaptation_transform : unicode, optional **{'CAT02', 'XYZ Scaling', 'Von Kries', 'Bradford', 'Sharp', 'Fairchild', 'CMCCAT97', 'CMCCAT2000', 'CAT02_BRILL_CAT', 'Bianco', 'Bianco PC'}**, *Chromatic adaptation* transform. Returns ------- ndarray, (3,) *ACES2065-1* colourspace relative exposure values array. Notes ----- +------------+-----------------------+---------------+ | **Range** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``XYZ`` | [0, 100] | [0, 1] | +------------+-----------------------+---------------+ - The chromatic adaptation method implemented here is a bit unusual as it involves building a new colourspace based on *ACES2065-1* colourspace primaries but using the whitepoint of the illuminant that the spectral distribution was measured under. References ---------- :cite:`Forsythe2018`, :cite:`TheAcademyofMotionPictureArtsandSciences2014q`, :cite:`TheAcademyofMotionPictureArtsandSciences2014r`, :cite:`TheAcademyofMotionPictureArtsandSciencese` Examples -------- >>> from colour import COLOURCHECKERS_SDS >>> sd = COLOURCHECKERS_SDS['ColorChecker N Ohta']['dark skin'] >>> sd_to_aces_relative_exposure_values(sd) # doctest: +ELLIPSIS array([ 0.1171785..., 0.0866347..., 0.0589707...]) >>> sd_to_aces_relative_exposure_values(sd, ... apply_chromatic_adaptation=True) # doctest: +ELLIPSIS array([ 0.1180766..., 0.0869023..., 0.0589104...]) """ shape = ACES_RICD.shape if sd.shape != ACES_RICD.shape: sd = sd.copy().align(shape) if illuminant.shape != ACES_RICD.shape: illuminant = illuminant.copy().align(shape) s_v = sd.values i_v = illuminant.values r_bar, g_bar, b_bar = tsplit(ACES_RICD.values) def k(x, y): """ Computes the :math:`K_r`, :math:`K_g` or :math:`K_b` scale factors. """ return 1 / np.sum(x * y) k_r = k(i_v, r_bar) k_g = k(i_v, g_bar) k_b = k(i_v, b_bar) E_r = k_r * np.sum(i_v * s_v * r_bar) E_g = k_g * np.sum(i_v * s_v * g_bar) E_b = k_b * np.sum(i_v * s_v * b_bar) E_rgb = np.array([E_r, E_g, E_b]) # Accounting for flare. E_rgb += FLARE_PERCENTAGE E_rgb *= S_FLARE_FACTOR if apply_chromatic_adaptation: xy = XYZ_to_xy(sd_to_XYZ(illuminant) / 100) NPM = normalised_primary_matrix(ACES_2065_1_COLOURSPACE.primaries, xy) XYZ = RGB_to_XYZ(E_rgb, xy, ACES_2065_1_COLOURSPACE.whitepoint, NPM, chromatic_adaptation_transform) E_rgb = XYZ_to_RGB(XYZ, ACES_2065_1_COLOURSPACE.whitepoint, ACES_2065_1_COLOURSPACE.whitepoint, ACES_2065_1_COLOURSPACE.XYZ_to_RGB_matrix) return from_range_1(E_rgb)
""" *Adobe Wide Gamut RGB* colourspace whitepoint name. ADOBE_WIDE_GAMUT_RGB_WHITEPOINT_NAME : unicode """ ADOBE_WIDE_GAMUT_RGB_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ ADOBE_WIDE_GAMUT_RGB_WHITEPOINT_NAME]) """ *Adobe Wide Gamut RGB* colourspace whitepoint. ADOBE_WIDE_GAMUT_RGB_WHITEPOINT : ndarray """ ADOBE_WIDE_GAMUT_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( ADOBE_WIDE_GAMUT_RGB_PRIMARIES, ADOBE_WIDE_GAMUT_RGB_WHITEPOINT) """ *Adobe Wide Gamut RGB* colourspace to *CIE XYZ* tristimulus values matrix. ADOBE_WIDE_GAMUT_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_ADOBE_WIDE_GAMUT_RGB_MATRIX = np.linalg.inv( ADOBE_WIDE_GAMUT_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Adobe Wide Gamut RGB* colourspace matrix. XYZ_TO_ADOBE_WIDE_GAMUT_RGB_MATRIX : array_like, (3, 3) """ ADOBE_WIDE_GAMUT_RGB_COLOURSPACE = RGB_Colourspace(
BT709_ILLUMINANT = 'D65' """ *ITU-R BT.709* colourspace whitepoint name as illuminant. BT709_ILLUMINANT : unicode """ BT709_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][BT709_ILLUMINANT]) """ *ITU-R BT.709* colourspace whitepoint. BT709_WHITEPOINT : ndarray """ BT709_TO_XYZ_MATRIX = normalised_primary_matrix(BT709_PRIMARIES, BT709_WHITEPOINT) """ *ITU-R BT.709* colourspace to *CIE XYZ* tristimulus values matrix. BT709_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_BT709_MATRIX = np.linalg.inv(BT709_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ITU-R BT.709* colourspace matrix. XYZ_TO_BT709_MATRIX : array_like, (3, 3) """ BT709_COLOURSPACE = RGB_Colourspace( 'ITU-R BT.709',
SMPTE_C_RGB_ILLUMINANT = 'D65' """ *SMPTE-C RGB* colourspace whitepoint name as illuminant. SMPTE_C_RGB_ILLUMINANT : unicode """ SMPTE_C_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(SMPTE_C_RGB_ILLUMINANT) """ *SMPTE-C RGB* colourspace whitepoint. SMPTE_C_RGB_WHITEPOINT : tuple """ SMPTE_C_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( SMPTE_C_RGB_PRIMARIES, SMPTE_C_RGB_WHITEPOINT) """ *SMPTE-C RGB* colourspace to *CIE XYZ* tristimulus values matrix. SMPTE_C_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_SMPTE_C_RGB_MATRIX = np.linalg.inv(SMPTE_C_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *SMPTE-C RGB* colourspace matrix. XYZ_TO_SMPTE_C_RGB_MATRIX : array_like, (3, 3) """ SMPTE_C_RGB_COLOURSPACE = RGB_Colourspace( 'SMPTE-C RGB',
ECI_RGB_V_ILLUMINANT = 'D50' """ *ECI RGB v2* colourspace whitepoint name as illuminant. ECI_RGB_V_ILLUMINANT : unicode """ ECI_RGB_V2_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ECI_RGB_V_ILLUMINANT]) """ *ECI RGB v2* colourspace whitepoint. ECI_RGB_V2_WHITEPOINT : ndarray """ ECI_RGB_V2_TO_XYZ_MATRIX = normalised_primary_matrix(ECI_RGB_V2_PRIMARIES, ECI_RGB_V2_WHITEPOINT) """ *ECI RGB v2* colourspace to *CIE XYZ* tristimulus values matrix. ECI_RGB_V2_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_ECI_RGB_V2_MATRIX = np.linalg.inv(ECI_RGB_V2_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ECI RGB v2* colourspace matrix. XYZ_TO_ECI_RGB_V2_MATRIX : array_like, (3, 3) """ def _scale_domain_0_100_range_0_1(a, callable_):
FILMLIGHT_E_GAMUT_WHITEPOINT_NAME = 'D65' """ *FilmLight E-Gamut* colourspace whitepoint name. FILMLIGHT_E_GAMUT_WHITEPOINT : unicode """ FILMLIGHT_E_GAMUT_WHITEPOINT = (ILLUMINANTS[ 'CIE 1931 2 Degree Standard Observer'][FILMLIGHT_E_GAMUT_WHITEPOINT_NAME]) """ *FilmLight E-Gamut* colourspace whitepoint. FILMLIGHT_E_GAMUT_WHITEPOINT : ndarray """ FILMLIGHT_E_GAMUT_TO_XYZ_MATRIX = (normalised_primary_matrix( FILMLIGHT_E_GAMUT_PRIMARIES, FILMLIGHT_E_GAMUT_WHITEPOINT)) """ *FilmLight E-Gamut* colourspace to *CIE XYZ* tristimulus values matrix. FILMLIGHT_E_GAMUT_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_FILMLIGHT_E_GAMUT_MATRIX = ( np.linalg.inv(FILMLIGHT_E_GAMUT_TO_XYZ_MATRIX)) """ *CIE XYZ* tristimulus values to *FilmLight E-Gamut* colourspace matrix. XYZ_TO_FILMLIGHT_E_GAMUT_MATRIX : array_like, (3, 3) """ FILMLIGHT_E_GAMUT_COLOURSPACE = RGB_Colourspace(
[0.214682981090100, 0.765294771968854], [0.129937629937630, 0.035343035343035], ] ) """*Don RGB 4* colourspace primaries.""" WHITEPOINT_NAME_DON_RGB_4: str = "D50" """*Don RGB 4* colourspace whitepoint name.""" CCS_WHITEPOINT_DON_RGB_4: NDArray = CCS_ILLUMINANTS[ "CIE 1931 2 Degree Standard Observer" ][WHITEPOINT_NAME_DON_RGB_4] """*Don RGB 4* colourspace whitepoint chromaticity coordinates.""" MATRIX_DON_RGB_4_TO_XYZ: NDArray = normalised_primary_matrix( PRIMARIES_DON_RGB_4, CCS_WHITEPOINT_DON_RGB_4 ) """*Don RGB 4* colourspace to *CIE XYZ* tristimulus values matrix.""" MATRIX_XYZ_TO_DON_RGB_4: NDArray = np.linalg.inv(MATRIX_DON_RGB_4_TO_XYZ) """*CIE XYZ* tristimulus values to *Don RGB 4* colourspace matrix.""" RGB_COLOURSPACE_DON_RGB_4: RGB_Colourspace = RGB_Colourspace( "Don RGB 4", PRIMARIES_DON_RGB_4, CCS_WHITEPOINT_DON_RGB_4, WHITEPOINT_NAME_DON_RGB_4, MATRIX_DON_RGB_4_TO_XYZ, MATRIX_XYZ_TO_DON_RGB_4, partial(gamma_function, exponent=1 / 2.2), partial(gamma_function, exponent=2.2),
COLOR_MATCH_RGB_WHITEPOINT_NAME = 'D50' """ *ColorMatch RGB* colourspace whitepoint name. COLOR_MATCH_RGB_WHITEPOINT_NAME : unicode """ COLOR_MATCH_RGB_WHITEPOINT = (ILLUMINANTS[ 'CIE 1931 2 Degree Standard Observer'][COLOR_MATCH_RGB_WHITEPOINT_NAME]) """ *ColorMatch RGB* colourspace whitepoint. COLOR_MATCH_RGB_WHITEPOINT : ndarray """ COLOR_MATCH_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( COLOR_MATCH_RGB_PRIMARIES, COLOR_MATCH_RGB_WHITEPOINT) """ *ColorMatch RGB* colourspace to *CIE XYZ* tristimulus values matrix. COLOR_MATCH_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_COLOR_MATCH_RGB_MATRIX = np.linalg.inv(COLOR_MATCH_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ColorMatch RGB* colourspace matrix. XYZ_TO_COLOR_MATCH_RGB_MATRIX : array_like, (3, 3) """ COLOR_MATCH_RGB_COLOURSPACE = RGB_Colourspace( 'ColorMatch RGB',
""" *Adobe Wide Gamut RGB* colourspace whitepoint name. ADOBE_WIDE_GAMUT_RGB_WHITEPOINT_NAME : unicode """ ADOBE_WIDE_GAMUT_RGB_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [ADOBE_WIDE_GAMUT_RGB_WHITEPOINT_NAME]) """ *Adobe Wide Gamut RGB* colourspace whitepoint. ADOBE_WIDE_GAMUT_RGB_WHITEPOINT : ndarray """ ADOBE_WIDE_GAMUT_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( ADOBE_WIDE_GAMUT_RGB_PRIMARIES, ADOBE_WIDE_GAMUT_RGB_WHITEPOINT) """ *Adobe Wide Gamut RGB* colourspace to *CIE XYZ* tristimulus values matrix. ADOBE_WIDE_GAMUT_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_ADOBE_WIDE_GAMUT_RGB_MATRIX = np.linalg.inv( ADOBE_WIDE_GAMUT_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Adobe Wide Gamut RGB* colourspace matrix. XYZ_TO_ADOBE_WIDE_GAMUT_RGB_MATRIX : array_like, (3, 3) """ ADOBE_WIDE_GAMUT_RGB_COLOURSPACE = RGB_Colourspace(
DON_RGB_4_WHITEPOINT_NAME = 'D50' """ *Don RGB 4* colourspace whitepoint name. DON_RGB_4_WHITEPOINT_NAME : unicode """ DON_RGB_4_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ DON_RGB_4_WHITEPOINT_NAME]) """ *Don RGB 4* colourspace whitepoint. DON_RGB_4_WHITEPOINT : ndarray """ DON_RGB_4_TO_XYZ_MATRIX = normalised_primary_matrix(DON_RGB_4_PRIMARIES, DON_RGB_4_WHITEPOINT) """ *Don RGB 4* colourspace to *CIE XYZ* tristimulus values matrix. DON_RGB_4_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_DON_RGB_4_MATRIX = np.linalg.inv(DON_RGB_4_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Don RGB 4* colourspace matrix. XYZ_TO_DON_RGB_4_MATRIX : array_like, (3, 3) """ DON_RGB_4_COLOURSPACE = RGB_Colourspace( 'Don RGB 4',
RED_COLOR_ILLUMINANT = 'D60' """ *REDcolor* colourspace whitepoint name as illuminant. RED_COLOR_ILLUMINANT : unicode """ RED_COLOR_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][RED_COLOR_ILLUMINANT]) """ *REDcolor* colourspace whitepoint. RED_COLOR_WHITEPOINT : ndarray """ RED_COLOR_TO_XYZ_MATRIX = normalised_primary_matrix(RED_COLOR_PRIMARIES, RED_COLOR_WHITEPOINT) """ *REDcolor* colourspace to *CIE XYZ* tristimulus values matrix. RED_COLOR_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_RED_COLOR_MATRIX = np.linalg.inv(RED_COLOR_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *REDcolor* colourspace matrix. XYZ_TO_RED_COLOR_MATRIX : array_like, (3, 3) """ RED_COLOR_COLOURSPACE = RGB_Colourspace( 'REDcolor', RED_COLOR_PRIMARIES, RED_COLOR_WHITEPOINT,
APPLE_RGB_ILLUMINANT = 'D65' """ *Apple RGB* colourspace whitepoint name as illuminant. APPLE_RGB_ILLUMINANT : unicode """ APPLE_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(APPLE_RGB_ILLUMINANT) """ *Apple RGB* colourspace whitepoint. APPLE_RGB_WHITEPOINT : tuple """ APPLE_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(APPLE_RGB_PRIMARIES, APPLE_RGB_WHITEPOINT) """ *Apple RGB* colourspace to *CIE XYZ* tristimulus values matrix. APPLE_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_APPLE_RGB_MATRIX = np.linalg.inv(APPLE_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Apple RGB* colourspace matrix. XYZ_TO_APPLE_RGB_MATRIX : array_like, (3, 3) """ APPLE_RGB_COLOURSPACE = RGB_Colourspace( 'Apple RGB',
DCDM_XYZ_WHITEPOINT_NAME = 'E' """ *DCDM XYZ* colourspace whitepoint name. DCDM_XYZ_WHITEPOINT_NAME : unicode """ DCDM_XYZ_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ DCDM_XYZ_WHITEPOINT_NAME]) """ *DCDM XYZ* colourspace whitepoint. DCDM_XYZ_WHITEPOINT : ndarray """ DCDM_XYZ_TO_XYZ_MATRIX = normalised_primary_matrix(DCDM_XYZ_PRIMARIES, DCDM_XYZ_WHITEPOINT) """ *DCDM XYZ* colourspace to *CIE XYZ* tristimulus values matrix. DCDM_XYZ_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_DCDM_XYZ_MATRIX = np.linalg.inv(DCDM_XYZ_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *DCDM XYZ* colourspace matrix. XYZ_TO_DCDM_XYZ_MATRIX : array_like, (3, 3) """ DCDM_XYZ_COLOURSPACE = RGB_Colourspace( 'DCDM XYZ',
*ACES Primaries 0* to *CIE XYZ* tristimulus values matrix defined as per [2]. AP0_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_AP0_MATRIX = np.array([ [1.0498110175, 0.0000000000, -0.0000974845], [-0.4959030231, 1.3733130458, 0.0982400361], [0.0000000000, 0.0000000000, 0.9912520182], ]) """ *CIE XYZ* tristimulus values to *ACES Primaries 0* matrix. XYZ_TO_AP0_MATRIX : array_like, (3, 3) """ AP1_TO_XYZ_MATRIX = normalised_primary_matrix(AP1, ACES_WHITEPOINT) """ *ACES Primaries 1* to *CIE XYZ* tristimulus values matrix. AP1_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_AP1_MATRIX = np.linalg.inv(AP1_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ACES Primaries 1* matrix. XYZ_TO_AP1_MATRIX : array_like, (3, 3) """ ACES_2065_1_COLOURSPACE = RGB_Colourspace( 'ACES2065-1',
RUSSELL_RGB_ILLUMINANT = 'D55' """ *Russell RGB* colourspace whitepoint name as illuminant. RUSSELL_RGB_ILLUMINANT : unicode """ RUSSELL_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(RUSSELL_RGB_ILLUMINANT) """ *Russell RGB* colourspace whitepoint. RUSSELL_RGB_WHITEPOINT : tuple """ RUSSELL_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( RUSSELL_RGB_PRIMARIES, RUSSELL_RGB_WHITEPOINT) """ *Russell RGB* colourspace to *CIE XYZ* tristimulus values matrix. RUSSELL_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_RUSSELL_RGB_MATRIX = np.linalg.inv(RUSSELL_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Russell RGB* colourspace matrix. XYZ_TO_RUSSELL_RGB_MATRIX : array_like, (3, 3) """ RUSSELL_RGB_COLOURSPACE = RGB_Colourspace( 'Russell RGB',
PROTUNE_NATIVE_WHITEPOINT_NAME = 'D65' """ *Protune Native* colourspace whitepoint name. PROTUNE_NATIVE_WHITEPOINT_NAME : unicode """ PROTUNE_NATIVE_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [PROTUNE_NATIVE_WHITEPOINT_NAME]) """ *Protune Native* colourspace whitepoint. PROTUNE_NATIVE_WHITEPOINT : ndarray """ PROTUNE_NATIVE_TO_XYZ_MATRIX = normalised_primary_matrix( PROTUNE_NATIVE_PRIMARIES, PROTUNE_NATIVE_WHITEPOINT) """ *Protune Native* colourspace to *CIE XYZ* tristimulus values matrix. PROTUNE_NATIVE_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_PROTUNE_NATIVE_MATRIX = np.linalg.inv(PROTUNE_NATIVE_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Protune Native* colourspace matrix. XYZ_TO_PROTUNE_NATIVE_MATRIX : array_like, (3, 3) """ PROTUNE_NATIVE_COLOURSPACE = RGB_Colourspace( 'Protune Native',
XTREME_RGB_WHITEPOINT_NAME = 'D50' """ *Xtreme RGB* colourspace whitepoint name. XTREME_RGB_WHITEPOINT : unicode """ XTREME_RGB_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ XTREME_RGB_WHITEPOINT_NAME]) """ *Xtreme RGB* colourspace whitepoint. XTREME_RGB_WHITEPOINT : ndarray """ XTREME_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(XTREME_RGB_PRIMARIES, XTREME_RGB_WHITEPOINT) """ *Xtreme RGB* colourspace to *CIE XYZ* tristimulus values matrix. XTREME_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_XTREME_RGB_MATRIX = np.linalg.inv(XTREME_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Xtreme RGB* colourspace matrix. XYZ_TO_XTREME_RGB_MATRIX : array_like, (3, 3) """ XTREME_RGB_COLOURSPACE = RGB_Colourspace( 'Xtreme RGB',
------- DCI-P3 illuminant has no associated spectral power distribution. DCI has no official reference spectral measurement for this whitepoint. The closest matching spectral power distribution is Kinoton 75P projector. """ DCI_P3_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(DCI_P3_ILLUMINANT) """ *DCI-P3* colourspace whitepoint. DCI_P3_WHITEPOINT : tuple """ DCI_P3_TO_XYZ_MATRIX = normalised_primary_matrix( DCI_P3_PRIMARIES, DCI_P3_WHITEPOINT) """ *DCI-P3* colourspace to *CIE XYZ* tristimulus values matrix. DCI_P3_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_DCI_P3_MATRIX = np.linalg.inv(DCI_P3_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *DCI-P3* colourspace matrix. XYZ_TO_DCI_P3_MATRIX : array_like, (3, 3) """ DCI_P3_P_TO_XYZ_MATRIX = normalised_primary_matrix(
WHITEPOINT_NAME_BEST_RGB = 'D50' """ *Best RGB* colourspace whitepoint name. WHITEPOINT_NAME_BEST_RGB : unicode """ CCS_WHITEPOINT_BEST_RGB = (CCS_ILLUMINANTS[ 'CIE 1931 2 Degree Standard Observer'][WHITEPOINT_NAME_BEST_RGB]) """ *Best RGB* colourspace whitepoint chromaticity coordinates. CCS_WHITEPOINT_BEST_RGB : ndarray """ MATRIX_BEST_RGB_TO_XYZ = normalised_primary_matrix(PRIMARIES_BEST_RGB, CCS_WHITEPOINT_BEST_RGB) """ *Best RGB* colourspace to *CIE XYZ* tristimulus values matrix. MATRIX_BEST_RGB_TO_XYZ : array_like, (3, 3) """ MATRIX_XYZ_TO_BEST_RGB = np.linalg.inv(MATRIX_BEST_RGB_TO_XYZ) """ *CIE XYZ* tristimulus values to *Best RGB* colourspace matrix. MATRIX_XYZ_TO_BEST_RGB : array_like, (3, 3) """ RGB_COLOURSPACE_BEST_RGB = RGB_Colourspace( 'Best RGB',
SMPTE_240M_WHITEPOINT_NAME = 'D65' """ *SMPTE 240M* colourspace whitepoint name. SMPTE_240M_WHITEPOINT_NAME : unicode """ SMPTE_240M_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ SMPTE_240M_WHITEPOINT_NAME]) """ *SMPTE 240M* colourspace whitepoint. SMPTE_240M_WHITEPOINT : ndarray """ SMPTE_240M_TO_XYZ_MATRIX = normalised_primary_matrix(SMPTE_240M_PRIMARIES, SMPTE_240M_WHITEPOINT) """ *SMPTE 240M* colourspace to *CIE XYZ* tristimulus values matrix. SMPTE_240M_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_SMPTE_240M_MATRIX = np.linalg.inv(SMPTE_240M_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *SMPTE 240M* colourspace matrix. XYZ_TO_SMPTE_240M_MATRIX : array_like, (3, 3) """ SMPTE_240M_COLOURSPACE = RGB_Colourspace( 'SMPTE 240M',
DCDM_XYZ_WHITEPOINT_NAME = 'E' """ *DCDM XYZ* colourspace whitepoint name. DCDM_XYZ_WHITEPOINT_NAME : unicode """ DCDM_XYZ_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [DCDM_XYZ_WHITEPOINT_NAME]) """ *DCDM XYZ* colourspace whitepoint. DCDM_XYZ_WHITEPOINT : ndarray """ DCDM_XYZ_TO_XYZ_MATRIX = normalised_primary_matrix(DCDM_XYZ_PRIMARIES, DCDM_XYZ_WHITEPOINT) """ *DCDM XYZ* colourspace to *CIE XYZ* tristimulus values matrix. DCDM_XYZ_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_DCDM_XYZ_MATRIX = np.linalg.inv(DCDM_XYZ_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *DCDM XYZ* colourspace matrix. XYZ_TO_DCDM_XYZ_MATRIX : array_like, (3, 3) """ DCDM_XYZ_COLOURSPACE = RGB_Colourspace( 'DCDM XYZ',
ECI_RGB_V_ILLUMINANT = 'D50' """ *ECI RGB v2* colourspace whitepoint name as illuminant. ECI_RGB_V_ILLUMINANT : unicode """ ECI_RGB_V2_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(ECI_RGB_V_ILLUMINANT) """ *ECI RGB v2* colourspace whitepoint. ECI_RGB_V2_WHITEPOINT : tuple """ ECI_RGB_V2_TO_XYZ_MATRIX = normalised_primary_matrix(ECI_RGB_V2_PRIMARIES, ECI_RGB_V2_WHITEPOINT) """ *ECI RGB v2* colourspace to *CIE XYZ* tristimulus values matrix. ECI_RGB_V2_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_ECI_RGB_V2_MATRIX = np.linalg.inv(ECI_RGB_V2_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ECI RGB v2* colourspace matrix. XYZ_TO_ECI_RGB_V2_MATRIX : array_like, (3, 3) """ def _scale_domain_0_100_range_0_1(a, callable_):
""" *Ekta Space PS 5* colourspace whitepoint name. EKTA_SPACE_PS_5_V_WHITEPOINT_NAME : unicode """ EKTA_SPACE_PS_5_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [EKTA_SPACE_PS_5_V_WHITEPOINT_NAME]) """ *Ekta Space PS 5* colourspace whitepoint. EKTA_SPACE_PS_5_WHITEPOINT : ndarray """ EKTA_SPACE_PS_5_TO_XYZ_MATRIX = normalised_primary_matrix( EKTA_SPACE_PS_5_PRIMARIES, EKTA_SPACE_PS_5_WHITEPOINT) """ *Ekta Space PS 5* colourspace to *CIE XYZ* tristimulus values matrix. EKTA_SPACE_PS_5_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_EKTA_SPACE_PS_5_MATRIX = np.linalg.inv(EKTA_SPACE_PS_5_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Ekta Space PS 5* colourspace matrix. XYZ_TO_EKTA_SPACE_PS_5_MATRIX : array_like, (3, 3) """ EKTA_SPACE_PS_5_COLOURSPACE = RGB_Colourspace( 'Ekta Space PS 5',
PRIMARIES_SMPTE_240M: NDArray = np.array([ [0.6300, 0.3400], [0.3100, 0.5950], [0.1550, 0.0700], ]) """*SMPTE 240M* colourspace primaries.""" WHITEPOINT_NAME_SMPTE_240M: str = "D65" """*SMPTE 240M* colourspace whitepoint name.""" CCS_WHITEPOINT_SMPTE_240M: NDArray = CCS_ILLUMINANTS[ "CIE 1931 2 Degree Standard Observer"][WHITEPOINT_NAME_SMPTE_240M] """*SMPTE 240M* colourspace whitepoint chromaticity coordinates.""" MATRIX_SMPTE_240M_TO_XYZ: NDArray = normalised_primary_matrix( PRIMARIES_SMPTE_240M, CCS_WHITEPOINT_SMPTE_240M) """*SMPTE 240M* colourspace to *CIE XYZ* tristimulus values matrix.""" MATRIX_XYZ_TO_SMPTE_240M: NDArray = np.linalg.inv(MATRIX_SMPTE_240M_TO_XYZ) """*CIE XYZ* tristimulus values to *SMPTE 240M* colourspace matrix.""" RGB_COLOURSPACE_SMPTE_240M: RGB_Colourspace = RGB_Colourspace( "SMPTE 240M", PRIMARIES_SMPTE_240M, CCS_WHITEPOINT_SMPTE_240M, WHITEPOINT_NAME_SMPTE_240M, MATRIX_SMPTE_240M_TO_XYZ, MATRIX_XYZ_TO_SMPTE_240M, oetf_SMPTE240M, eotf_SMPTE240M, )
CINEMA_GAMUT_ILLUMINANT = 'D65' """ *Cinema Gamut* colourspace whitepoint name as illuminant. CINEMA_GAMUT_ILLUMINANT : unicode """ CINEMA_GAMUT_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [CINEMA_GAMUT_ILLUMINANT]) """ *Cinema Gamut* colourspace whitepoint. CINEMA_GAMUT_WHITEPOINT : ndarray """ CINEMA_GAMUT_TO_XYZ_MATRIX = normalised_primary_matrix( CINEMA_GAMUT_PRIMARIES, CINEMA_GAMUT_WHITEPOINT) """ *Cinema Gamut* colourspace to *CIE XYZ* tristimulus values matrix. CINEMA_GAMUT_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_CINEMA_GAMUT_MATRIX = np.linalg.inv(CINEMA_GAMUT_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Cinema Gamut* colourspace matrix. XYZ_TO_CINEMA_GAMUT_MATRIX : array_like, (3, 3) """ CINEMA_GAMUT_COLOURSPACE = RGB_Colourspace( 'Cinema Gamut',
BETA_RGB_WHITEPOINT_NAME = 'D50' """ *Beta RGB* colourspace whitepoint name. BETA_RGB_WHITEPOINT_NAME : unicode """ BETA_RGB_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ BETA_RGB_WHITEPOINT_NAME]) """ *Beta RGB* colourspace whitepoint. BETA_RGB_WHITEPOINT : ndarray """ BETA_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(BETA_RGB_PRIMARIES, BETA_RGB_WHITEPOINT) """ *Beta RGB* colourspace to *CIE XYZ* tristimulus values matrix. BETA_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_BETA_RGB_MATRIX = np.linalg.inv(BETA_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Beta RGB* colourspace matrix. XYZ_TO_BETA_RGB_MATRIX : array_like, (3, 3) """ BETA_RGB_COLOURSPACE = RGB_Colourspace( 'Beta RGB',
BEST_RGB_ILLUMINANT = 'D50' """ *Best RGB* colourspace whitepoint name as illuminant. BEST_RGB_ILLUMINANT : unicode """ BEST_RGB_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][BEST_RGB_ILLUMINANT]) """ *Best RGB* colourspace whitepoint. BEST_RGB_WHITEPOINT : ndarray """ BEST_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(BEST_RGB_PRIMARIES, BEST_RGB_WHITEPOINT) """ *Best RGB* colourspace to *CIE XYZ* tristimulus values matrix. BEST_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_BEST_RGB_MATRIX = np.linalg.inv(BEST_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Best RGB* colourspace matrix. XYZ_TO_BEST_RGB_MATRIX : array_like, (3, 3) """ BEST_RGB_COLOURSPACE = RGB_Colourspace( 'Best RGB',
def sd_to_aces_relative_exposure_values( sd, illuminant=ILLUMINANTS_SDS['D65'], apply_chromatic_adaptation=False, chromatic_adaptation_transform='CAT02'): """ Converts given spectral distribution to *ACES2065-1* colourspace relative exposure values. Parameters ---------- sd : SpectralDistribution Spectral distribution. illuminant : SpectralDistribution, optional *Illuminant* spectral distribution. apply_chromatic_adaptation : bool, optional Whether to apply chromatic adaptation using given transform. chromatic_adaptation_transform : unicode, optional **{'CAT02', 'XYZ Scaling', 'Von Kries', 'Bradford', 'Sharp', 'Fairchild', 'CMCCAT97', 'CMCCAT2000', 'CAT02_BRILL_CAT', 'Bianco', 'Bianco PC'}**, *Chromatic adaptation* transform. Returns ------- ndarray, (3,) *ACES2065-1* colourspace relative exposure values array. Notes ----- +------------+-----------------------+---------------+ | **Range** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``XYZ`` | [0, 100] | [0, 1] | +------------+-----------------------+---------------+ - The chromatic adaptation method implemented here is a bit unusual as it involves building a new colourspace based on *ACES2065-1* colourspace primaries but using the whitepoint of the illuminant that the spectral distribution was measured under. References ---------- :cite:`Forsythe2018`, :cite:`TheAcademyofMotionPictureArtsandSciences2014q`, :cite:`TheAcademyofMotionPictureArtsandSciences2014r`, :cite:`TheAcademyofMotionPictureArtsandSciencese` Examples -------- >>> from colour import COLOURCHECKERS_SDS >>> sd = COLOURCHECKERS_SDS['ColorChecker N Ohta']['dark skin'] >>> sd_to_aces_relative_exposure_values(sd) # doctest: +ELLIPSIS array([ 0.1171785..., 0.0866347..., 0.0589707...]) >>> sd_to_aces_relative_exposure_values(sd, ... apply_chromatic_adaptation=True) # doctest: +ELLIPSIS array([ 0.1180766..., 0.0869023..., 0.0589104...]) """ shape = ACES_RICD.shape if sd.shape != ACES_RICD.shape: sd = sd.copy().align(shape) if illuminant.shape != ACES_RICD.shape: illuminant = illuminant.copy().align(shape) s_v = sd.values i_v = illuminant.values r_bar, g_bar, b_bar = tsplit(ACES_RICD.values) def k(x, y): """ Computes the :math:`K_r`, :math:`K_g` or :math:`K_b` scale factors. """ return 1 / np.sum(x * y) k_r = k(i_v, r_bar) k_g = k(i_v, g_bar) k_b = k(i_v, b_bar) E_r = k_r * np.sum(i_v * s_v * r_bar) E_g = k_g * np.sum(i_v * s_v * g_bar) E_b = k_b * np.sum(i_v * s_v * b_bar) E_rgb = np.array([E_r, E_g, E_b]) # Accounting for flare. E_rgb += FLARE_PERCENTAGE E_rgb *= S_FLARE_FACTOR if apply_chromatic_adaptation: xy = XYZ_to_xy(sd_to_XYZ(illuminant) / 100) NPM = normalised_primary_matrix(ACES_2065_1_COLOURSPACE.primaries, xy) XYZ = RGB_to_XYZ(E_rgb, xy, ACES_2065_1_COLOURSPACE.whitepoint, NPM, chromatic_adaptation_transform) E_rgb = XYZ_to_RGB(XYZ, ACES_2065_1_COLOURSPACE.whitepoint, ACES_2065_1_COLOURSPACE.whitepoint, ACES_2065_1_COLOURSPACE.XYZ_to_RGB_matrix) return from_range_1(E_rgb)
WHITEPOINT_NAME_XTREME_RGB = 'D50' """ *Xtreme RGB* colourspace whitepoint name. CCS_WHITEPOINT_XTREME_RGB : unicode """ CCS_WHITEPOINT_XTREME_RGB = (CCS_ILLUMINANTS[ 'CIE 1931 2 Degree Standard Observer'][WHITEPOINT_NAME_XTREME_RGB]) """ *Xtreme RGB* colourspace whitepoint chromaticity coordinates. CCS_WHITEPOINT_XTREME_RGB : ndarray """ MATRIX_XTREME_RGB_TO_XYZ = normalised_primary_matrix( PRIMARIES_XTREME_RGB, CCS_WHITEPOINT_XTREME_RGB) """ *Xtreme RGB* colourspace to *CIE XYZ* tristimulus values matrix. MATRIX_XTREME_RGB_TO_XYZ : array_like, (3, 3) """ MATRIX_XYZ_TO_XTREME_RGB = np.linalg.inv(MATRIX_XTREME_RGB_TO_XYZ) """ *CIE XYZ* tristimulus values to *Xtreme RGB* colourspace matrix. MATRIX_XYZ_TO_XTREME_RGB : array_like, (3, 3) """ RGB_COLOURSPACE_XTREME_RGB = RGB_Colourspace( 'Xtreme RGB',
BT470_525_WHITEPOINT_NAME = 'C' """ *ITU-R BT.470 - 525* colourspace whitepoint name. BT470_525_WHITEPOINT_NAME : unicode """ BT470_525_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][ BT470_525_WHITEPOINT_NAME]) """ *ITU-R BT.470 - 525* colourspace whitepoint. BT470_525_WHITEPOINT : ndarray """ BT470_525_TO_XYZ_MATRIX = normalised_primary_matrix(BT470_525_PRIMARIES, BT470_525_WHITEPOINT) """ *ITU-R BT.470 - 525* colourspace to *CIE XYZ* tristimulus values matrix. BT470_525_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_BT470_525_MATRIX = np.linalg.inv(BT470_525_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ITU-R BT.470 - 525* colourspace matrix. XYZ_TO_BT470_525_MATRIX : array_like, (3, 3) """ BT470_525_COLOURSPACE = RGB_Colourspace( 'ITU-R BT.470 - 525',
PRIMARIES_APPLE_RGB: NDArray = np.array([ [0.6250, 0.3400], [0.2800, 0.5950], [0.1550, 0.0700], ]) """*Apple RGB* colourspace primaries.""" WHITEPOINT_NAME_APPLE_RGB: str = "D65" """*Apple RGB* colourspace whitepoint name.""" CCS_WHITEPOINT_APPLE_RGB: NDArray = CCS_ILLUMINANTS[ "CIE 1931 2 Degree Standard Observer"][WHITEPOINT_NAME_APPLE_RGB] """*Apple RGB* colourspace whitepoint chromaticity coordinates.""" MATRIX_APPLE_RGB_TO_XYZ: NDArray = normalised_primary_matrix( PRIMARIES_APPLE_RGB, CCS_WHITEPOINT_APPLE_RGB) """*Apple RGB* colourspace to *CIE XYZ* tristimulus values matrix.""" MATRIX_XYZ_TO_APPLE_RGB: NDArray = np.linalg.inv(MATRIX_APPLE_RGB_TO_XYZ) """*CIE XYZ* tristimulus values to *Apple RGB* colourspace matrix.""" RGB_COLOURSPACE_APPLE_RGB: RGB_Colourspace = RGB_Colourspace( "Apple RGB", PRIMARIES_APPLE_RGB, CCS_WHITEPOINT_APPLE_RGB, WHITEPOINT_NAME_APPLE_RGB, MATRIX_APPLE_RGB_TO_XYZ, MATRIX_XYZ_TO_APPLE_RGB, partial(gamma_function, exponent=1 / 1.8), partial(gamma_function, exponent=1.8), )
PRIMARIES_DCDM_XYZ: NDArray = np.array([ [1.0, 0.0], [0.0, 1.0], [0.0, 0.0], ]) """*DCDM XYZ* colourspace primaries.""" WHITEPOINT_NAME_DCDM_XYZ: str = "E" """*DCDM XYZ* colourspace whitepoint name.""" CCS_WHITEPOINT_DCDM_XYZ: NDArray = CCS_ILLUMINANTS[ "CIE 1931 2 Degree Standard Observer"][WHITEPOINT_NAME_DCDM_XYZ] """*DCDM XYZ* colourspace whitepoint chromaticity coordinates.""" MATRIX_DCDM_XYZ_TO_XYZ: NDArray = normalised_primary_matrix( PRIMARIES_DCDM_XYZ, CCS_WHITEPOINT_DCDM_XYZ) """*DCDM XYZ* colourspace to *CIE XYZ* tristimulus values matrix.""" MATRIX_XYZ_TO_DCDM_XYZ: NDArray = np.linalg.inv(MATRIX_DCDM_XYZ_TO_XYZ) """*CIE XYZ* tristimulus values to *DCDM XYZ* colourspace matrix.""" RGB_COLOURSPACE_DCDM_XYZ: RGB_Colourspace = RGB_Colourspace( "DCDM XYZ", PRIMARIES_DCDM_XYZ, CCS_WHITEPOINT_DCDM_XYZ, WHITEPOINT_NAME_DCDM_XYZ, MATRIX_DCDM_XYZ_TO_XYZ, MATRIX_XYZ_TO_DCDM_XYZ, eotf_inverse_DCDM, eotf_DCDM, )
RUSSELL_RGB_WHITEPOINT_NAME = 'D55' """ *Russell RGB* colourspace whitepoint name. RUSSELL_RGB_WHITEPOINT_NAME : unicode """ RUSSELL_RGB_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [RUSSELL_RGB_WHITEPOINT_NAME]) """ *Russell RGB* colourspace whitepoint. RUSSELL_RGB_WHITEPOINT : ndarray """ RUSSELL_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(RUSSELL_RGB_PRIMARIES, RUSSELL_RGB_WHITEPOINT) """ *Russell RGB* colourspace to *CIE XYZ* tristimulus values matrix. RUSSELL_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_RUSSELL_RGB_MATRIX = np.linalg.inv(RUSSELL_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Russell RGB* colourspace matrix. XYZ_TO_RUSSELL_RGB_MATRIX : array_like, (3, 3) """ RUSSELL_RGB_COLOURSPACE = RGB_Colourspace( 'Russell RGB',
*ACES Primaries 0* to *CIE XYZ* tristimulus values matrix defined as per [2]. AP0_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_AP0_MATRIX = np.array([ [1.0498110175, 0.0000000000, -0.0000974845], [-0.4959030231, 1.3733130458, 0.0982400361], [0.0000000000, 0.0000000000, 0.9912520182], ]) """ *CIE XYZ* tristimulus values to *ACES Primaries 0* matrix. XYZ_TO_AP0_MATRIX : array_like, (3, 3) """ AP1_TO_XYZ_MATRIX = normalised_primary_matrix(AP1, ACES_WHITEPOINT) """ *ACES Primaries 1* to *CIE XYZ* tristimulus values matrix. AP1_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_AP1_MATRIX = np.linalg.inv(AP1_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *ACES Primaries 1* matrix. XYZ_TO_AP1_MATRIX : array_like, (3, 3) """ ACES_2065_1_COLOURSPACE = RGB_Colourspace( 'ACES2065-1',
XTREME_RGB_WHITEPOINT_NAME = 'D50' """ *Xtreme RGB* colourspace whitepoint name. XTREME_RGB_WHITEPOINT : unicode """ XTREME_RGB_WHITEPOINT = (ILLUMINANTS['CIE 1931 2 Degree Standard Observer'] [XTREME_RGB_WHITEPOINT_NAME]) """ *Xtreme RGB* colourspace whitepoint. XTREME_RGB_WHITEPOINT : ndarray """ XTREME_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(XTREME_RGB_PRIMARIES, XTREME_RGB_WHITEPOINT) """ *Xtreme RGB* colourspace to *CIE XYZ* tristimulus values matrix. XTREME_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_XTREME_RGB_MATRIX = np.linalg.inv(XTREME_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Xtreme RGB* colourspace matrix. XYZ_TO_XTREME_RGB_MATRIX : array_like, (3, 3) """ XTREME_RGB_COLOURSPACE = RGB_Colourspace( 'Xtreme RGB',
PRIMARIES_ECI_RGB_V2: NDArray = np.array([ [0.670103092783505, 0.329896907216495], [0.209905660377358, 0.709905660377358], [0.140061791967044, 0.080329557157570], ]) """*ECI RGB v2* colourspace primaries.""" WHITEPOINT_NAME_ECI_RGB_V: str = "D50" """*ECI RGB v2* colourspace whitepoint name.""" CCS_WHITEPOINT_ECI_RGB_V2: NDArray = CCS_ILLUMINANTS[ "CIE 1931 2 Degree Standard Observer"][WHITEPOINT_NAME_ECI_RGB_V] """*ECI RGB v2* colourspace whitepoint chromaticity coordinates.""" MATRIX_ECI_RGB_V2_TO_XYZ: NDArray = normalised_primary_matrix( PRIMARIES_ECI_RGB_V2, CCS_WHITEPOINT_ECI_RGB_V2) """*ECI RGB v2* colourspace to *CIE XYZ* tristimulus values matrix.""" MATRIX_XYZ_TO_ECI_RGB_V2: NDArray = np.linalg.inv(MATRIX_ECI_RGB_V2_TO_XYZ) """*CIE XYZ* tristimulus values to *ECI RGB v2* colourspace matrix.""" def _scale_domain_0_100_range_0_1(a: FloatingOrArrayLike, callable_: Callable) -> FloatingOrNDArray: """ Scale the input domain of given *luminance* :math:`Y` or *Lightness* :math:`L^*` array to [0, 100], call the given callable, and scales the output range to [0, 1]. Parameters ----------
PAL_SECAM_RGB_ILLUMINANT = 'D65' """ *Pal/Secam RGB* colourspace whitepoint name as illuminant. PAL_SECAM_RGB_ILLUMINANT : unicode """ PAL_SECAM_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(PAL_SECAM_RGB_ILLUMINANT) """ *Pal/Secam RGB* colourspace whitepoint. PAL_SECAM_RGB_WHITEPOINT : tuple """ PAL_SECAM_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( PAL_SECAM_RGB_PRIMARIES, PAL_SECAM_RGB_WHITEPOINT) """ *Pal/Secam RGB* colourspace to *CIE XYZ* tristimulus values matrix. PAL_SECAM_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_PAL_SECAM_RGB_MATRIX = np.linalg.inv(PAL_SECAM_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Pal/Secam RGB* colourspace matrix. XYZ_TO_PAL_SECAM_RGB_MATRIX : array_like, (3, 3) """ PAL_SECAM_RGB_COLOURSPACE = RGB_Colourspace( 'Pal/Secam RGB',
REC_2020_ILLUMINANT = 'D65' """ *Rec. 2020* colourspace whitepoint name as illuminant. REC_2020_ILLUMINANT : unicode """ REC_2020_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(REC_2020_ILLUMINANT) """ *Rec. 2020* colourspace whitepoint. REC_2020_WHITEPOINT : tuple """ REC_2020_TO_XYZ_MATRIX = normalised_primary_matrix(REC_2020_PRIMARIES, REC_2020_WHITEPOINT) """ *Rec. 2020* colourspace to *CIE XYZ* tristimulus values matrix. REC_2020_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_REC_2020_MATRIX = np.linalg.inv(REC_2020_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Rec. 2020* colourspace matrix. XYZ_TO_REC_2020_MATRIX : array_like, (3, 3) """ REC_2020_COLOURSPACE = RGB_Colourspace( 'Rec. 2020',
Warning ------- DCI-P3 illuminant has no associated spectral distribution. DCI has no official reference spectral measurement for this whitepoint. The closest matching spectral distribution is Kinoton 75P projector. """ DCI_P3_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][DCI_P3_WHITEPOINT_NAME]) """ *DCI-P3* colourspace whitepoint. DCI_P3_WHITEPOINT : ndarray """ DCI_P3_TO_XYZ_MATRIX = normalised_primary_matrix(DCI_P3_PRIMARIES, DCI_P3_WHITEPOINT) """ *DCI-P3* colourspace to *CIE XYZ* tristimulus values matrix. DCI_P3_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_DCI_P3_MATRIX = np.linalg.inv(DCI_P3_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *DCI-P3* colourspace matrix. XYZ_TO_DCI_P3_MATRIX : array_like, (3, 3) """ DCI_P3_P_TO_XYZ_MATRIX = normalised_primary_matrix(DCI_P3_P_PRIMARIES, DCI_P3_WHITEPOINT)
RED_COLOR_ILLUMINANT = 'D60' """ *REDcolor* colourspace whitepoint name as illuminant. RED_COLOR_ILLUMINANT : unicode """ RED_COLOR_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(RED_COLOR_ILLUMINANT) """ *REDcolor* colourspace whitepoint. RED_COLOR_WHITEPOINT : tuple """ RED_COLOR_TO_XYZ_MATRIX = normalised_primary_matrix( RED_COLOR_PRIMARIES, RED_COLOR_WHITEPOINT) """ *REDcolor* colourspace to *CIE XYZ* tristimulus values matrix. RED_COLOR_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_RED_COLOR_MATRIX = np.linalg.inv(RED_COLOR_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *REDcolor* colourspace matrix. XYZ_TO_RED_COLOR_MATRIX : array_like, (3, 3) """ RED_COLOR_COLOURSPACE = RGB_Colourspace( 'REDcolor',
APPLE_RGB_ILLUMINANT = 'D65' """ *Apple RGB* colourspace whitepoint name as illuminant. APPLE_RGB_ILLUMINANT : unicode """ APPLE_RGB_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][APPLE_RGB_ILLUMINANT]) """ *Apple RGB* colourspace whitepoint. APPLE_RGB_WHITEPOINT : ndarray """ APPLE_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( APPLE_RGB_PRIMARIES, APPLE_RGB_WHITEPOINT) """ *Apple RGB* colourspace to *CIE XYZ* tristimulus values matrix. APPLE_RGB_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_APPLE_RGB_MATRIX = np.linalg.inv(APPLE_RGB_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Apple RGB* colourspace matrix. XYZ_TO_APPLE_RGB_MATRIX : array_like, (3, 3) """ APPLE_RGB_COLOURSPACE = RGB_Colourspace( 'Apple RGB',
DON_RGB_4_ILLUMINANT = 'D50' """ *Don RGB 4* colourspace whitepoint name as illuminant. DON_RGB_4_ILLUMINANT : unicode """ DON_RGB_4_WHITEPOINT = ( ILLUMINANTS['CIE 1931 2 Degree Standard Observer'][DON_RGB_4_ILLUMINANT]) """ *Don RGB 4* colourspace whitepoint. DON_RGB_4_WHITEPOINT : ndarray """ DON_RGB_4_TO_XYZ_MATRIX = normalised_primary_matrix(DON_RGB_4_PRIMARIES, DON_RGB_4_WHITEPOINT) """ *Don RGB 4* colourspace to *CIE XYZ* tristimulus values matrix. DON_RGB_4_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_DON_RGB_4_MATRIX = np.linalg.inv(DON_RGB_4_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *Don RGB 4* colourspace matrix. XYZ_TO_DON_RGB_4_MATRIX : array_like, (3, 3) """ DON_RGB_4_COLOURSPACE = RGB_Colourspace( 'Don RGB 4', DON_RGB_4_PRIMARIES, DON_RGB_4_WHITEPOINT,