def test_normalised_primary_matrix(self): """ Tests :func:`colour.models.rgb.derivation.normalised_primary_matrix` definition. """ np.testing.assert_almost_equal( normalised_primary_matrix( np.array([0.73470, 0.26530, 0.00000, 1.00000, 0.00010, -0.07700]), (0.32168, 0.33767)), np.array( [9.52552396e-01, 0.00000000e+00, 9.36786317e-05, 3.43966450e-01, 7.28166097e-01, -7.21325464e-02, 0.00000000e+00, 0.00000000e+00, 1.00882518e+00] ).reshape((3, 3)), decimal=7) np.testing.assert_almost_equal( normalised_primary_matrix( np.array([0.640, 0.330, 0.300, 0.600, 0.150, 0.060]), (0.3127, 0.3290)), np.array([0.4123908, 0.35758434, 0.18048079, 0.21263901, 0.71516868, 0.07219232, 0.01933082, 0.11919478, 0.95053215]).reshape((3, 3)), decimal=7)
def test_normalised_primary_matrix(self): """ Tests :func:`colour.models.rgb.derivation.normalised_primary_matrix` definition. """ np.testing.assert_almost_equal( normalised_primary_matrix( np.array( [0.73470, 0.26530, 0.00000, 1.00000, 0.00010, -0.07700]), np.array([0.32168, 0.33767])), np.array([ [0.95255240, 0.00000000, 0.00009368], [0.34396645, 0.72816610, -0.07213255], [0.00000000, 0.00000000, 1.00882518], ]), decimal=7) np.testing.assert_almost_equal( normalised_primary_matrix( np.array([0.640, 0.330, 0.300, 0.600, 0.150, 0.060]), np.array([0.3127, 0.3290])), np.array([ [0.41239080, 0.35758434, 0.18048079], [0.21263901, 0.71516868, 0.07219232], [0.01933082, 0.11919478, 0.95053215], ]), decimal=7)
def test_chromatically_adapt(self): """ Test :func:`colour.models.rgb.rgb_colourspace.RGB_Colourspace.\ chromatically_adapt` method. """ whitepoint_t = np.array([0.31270, 0.32900]) colourspace = self._colourspace.chromatically_adapt( whitepoint_t, "D50", "Bradford") np.testing.assert_array_almost_equal( colourspace.primaries, np.array([ [0.73485524, 0.26422533], [-0.00617091, 1.01131496], [0.01596756, -0.06423550], ]), decimal=7, ) np.testing.assert_array_almost_equal(colourspace.whitepoint, whitepoint_t, decimal=7) self.assertEqual(colourspace.whitepoint_name, "D50") np.testing.assert_array_almost_equal( colourspace.primaries, chromatically_adapted_primaries( self._colourspace.primaries, self._colourspace.whitepoint, whitepoint_t, "Bradford", ), decimal=7, ) np.testing.assert_array_almost_equal( colourspace.matrix_RGB_to_XYZ, normalised_primary_matrix(colourspace.primaries, colourspace.whitepoint), decimal=7, ) np.testing.assert_array_almost_equal( colourspace.matrix_XYZ_to_RGB, np.linalg.inv( normalised_primary_matrix(colourspace.primaries, colourspace.whitepoint)), decimal=7, )
def test_nan_normalised_primary_matrix(self): """ Tests :func:`colour.models.rgb.derivation.normalised_primary_matrix` definition nan support. """ cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan] cases = set(permutations(cases * 3, r=2)) for case in cases: P = np.array(np.vstack([case, case, case])) W = np.array(case) try: normalised_primary_matrix(P, W) except np.linalg.linalg.LinAlgError: pass
def test_transformation_matrices(self): """ Tests the transformations matrices from the :attr:`colour.models.rgb.rgb_colourspace.RGB_COLOURSPACES` attribute colourspace models. """ XYZ_r = np.array([0.5, 0.5, 0.5]).reshape((3, 1)) for colourspace in RGB_COLOURSPACES.values(): if colourspace.name in ( 'ProPhoto RGB', 'ERIMM RGB', 'RIMM RGB', 'ROMM RGB'): tolerance = 1e-3 elif colourspace.name in ('sRGB',): tolerance = 1e-4 elif colourspace.name in ('Adobe RGB (1998)',): tolerance = 1e-5 elif colourspace.name in ('ALEXA Wide Gamut RGB', 'V-Gamut'): tolerance = 1e-6 else: tolerance = 1e-7 M = normalised_primary_matrix(colourspace.primaries, colourspace.whitepoint) np.testing.assert_allclose(colourspace.RGB_to_XYZ_matrix, M, rtol=tolerance, atol=tolerance, verbose=False) RGB = np.dot(colourspace.XYZ_to_RGB_matrix, XYZ_r) XYZ = np.dot(colourspace.RGB_to_XYZ_matrix, RGB) np.testing.assert_almost_equal(XYZ_r, XYZ, decimal=7)
def test_nan_normalised_primary_matrix(self): """ Tests :func:`colour.models.rgb.derivation.normalised_primary_matrix` definition nan support. """ cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan] cases = set(permutations(cases * 3, r=2)) for case in cases: P = np.array(np.vstack((case, case, case))) W = np.array(case) try: normalised_primary_matrix(P, W) except np.linalg.linalg.LinAlgError: import traceback from colour.utilities import warning warning(traceback.format_exc())
def test_chromatically_adapt(self): """ Tests :func:`colour.models.rgb.rgb_colourspace.RGB_Colourspace.\ chromatically_adapt` method. """ whitepoint_t = np.array([0.31270, 0.32900]) colourspace = self._colourspace.chromatically_adapt( whitepoint_t, 'D50', 'Bradford') np.testing.assert_array_almost_equal( colourspace.primaries, np.array([ [0.73485524, 0.26422533], [-0.00617091, 1.01131496], [0.01596756, -0.06423550], ]), decimal=7) np.testing.assert_array_almost_equal( colourspace.whitepoint, whitepoint_t, decimal=7) self.assertEqual(colourspace.whitepoint_name, 'D50') np.testing.assert_array_almost_equal( colourspace.primaries, chromatically_adapted_primaries(self._colourspace.primaries, self._colourspace.whitepoint, whitepoint_t, 'Bradford'), decimal=7) np.testing.assert_array_almost_equal( colourspace.RGB_to_XYZ_matrix, normalised_primary_matrix(colourspace.primaries, colourspace.whitepoint), decimal=7) np.testing.assert_array_almost_equal( colourspace.XYZ_to_RGB_matrix, np.linalg.inv( normalised_primary_matrix(colourspace.primaries, colourspace.whitepoint)), decimal=7)
def test_transformation_matrices(self): """ Tests the transformations matrices from the :attr:`colour.models.RGB_COLOURSPACES` attribute colourspace models. """ XYZ_r = np.array([0.5, 0.5, 0.5]).reshape((3, 1)) for colourspace in RGB_COLOURSPACES.values(): M = normalised_primary_matrix(colourspace.primaries, colourspace.whitepoint) np.testing.assert_allclose(colourspace.RGB_to_XYZ_matrix, M, rtol=0.0001, atol=0.0001, verbose=False) RGB = np.dot(colourspace.XYZ_to_RGB_matrix, XYZ_r) XYZ = np.dot(colourspace.RGB_to_XYZ_matrix, RGB) np.testing.assert_almost_equal(XYZ_r, XYZ, decimal=7)
def test_transformation_matrices(self): """ Test the transformations matrices from the :attr:`colour.models.rgb.datasets.RGB_COLOURSPACES` attribute colourspace models. """ tolerances = { "Adobe RGB (1998)": 1e-5, "ALEXA Wide Gamut": 1e-6, "DJI D-Gamut": 1e-4, "ERIMM RGB": 1e-3, "ProPhoto RGB": 1e-3, "REDWideGamutRGB": 1e-6, "RIMM RGB": 1e-3, "ROMM RGB": 1e-3, "sRGB": 1e-4, "V-Gamut": 1e-6, } XYZ_r = np.array([0.5, 0.5, 0.5]).reshape([3, 1]) for colourspace in RGB_COLOURSPACES.values(): M = normalised_primary_matrix(colourspace.primaries, colourspace.whitepoint) tolerance = tolerances.get(colourspace.name, 1e-7) np.testing.assert_allclose( colourspace.matrix_RGB_to_XYZ, M, rtol=tolerance, atol=tolerance, verbose=False, ) RGB = np.dot(colourspace.matrix_XYZ_to_RGB, XYZ_r) XYZ = np.dot(colourspace.matrix_RGB_to_XYZ, RGB) np.testing.assert_allclose(XYZ_r, XYZ, rtol=tolerance, atol=tolerance, verbose=False) # Derived transformation matrices. colourspace = deepcopy(colourspace) colourspace.use_derived_transformation_matrices(True) RGB = np.dot(colourspace.matrix_XYZ_to_RGB, XYZ_r) XYZ = np.dot(colourspace.matrix_RGB_to_XYZ, RGB) np.testing.assert_almost_equal(XYZ_r, XYZ, decimal=7)
Notes ----- *CIE Illuminant D Series* *D63* illuminant is used for *DCI-P3* whitepoint at 48 :math:`cd/m^2`. """ 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(
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* colourspace 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* colourspace to *SMPTE-C RGB* colourspace matrix. XYZ_TO_SMPTE_C_RGB_MATRIX : array_like, (3, 3) """ def _smpte_c_rgb_transfer_function(value):
[0.1550, 0.0700]]) """ *Apple RGB* colourspace primaries. APPLE_RGB_PRIMARIES : ndarray, (3, 2) """ APPLE_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D65') """ *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* colourspace 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* colourspace to *Apple RGB* colourspace matrix. XYZ_TO_APPLE_RGB_MATRIX : array_like, (3, 3) """ APPLE_RGB_TRANSFER_FUNCTION = lambda x: x**(1 / 1.8) """
EKTA_SPACE_PS_5_V_ILLUMINANT = 'D50' """ *Ekta Space PS 5* colourspace whitepoint name as illuminant. EKTA_SPACE_PS_5_V_ILLUMINANT : unicode """ EKTA_SPACE_PS_5_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(EKTA_SPACE_PS_5_V_ILLUMINANT) """ *Ekta Space PS 5* colourspace whitepoint. EKTA_SPACE_PS_5_WHITEPOINT : tuple """ 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) """ def _ekta_space_ps_5_OECF(value):
XTREME_RGB_ILLUMINANT = 'D50' """ *Xtreme RGB* colourspace whitepoint name as illuminant. XTREME_RGB_WHITEPOINT : unicode """ XTREME_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(XTREME_RGB_ILLUMINANT) """ *Xtreme RGB* colourspace whitepoint. XTREME_RGB_WHITEPOINT : tuple """ 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) """ def _xtreme_rgb_OECF(value):
[3.43966450e-01, 7.28166097e-01, -7.21325464e-02], [0.00000000e+00, 0.00000000e+00, 1.00882518e+00]]) """ *ACES Primaries 0* to *CIE XYZ* tristimulus values matrix. AP0_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_AP0_MATRIX = np.linalg.inv(AP0_TO_XYZ_MATRIX) """ *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) """ def _aces_2065_1_OECF(value):
[0, 0]]) """ *Xtreme RGB* colourspace primaries. XTREME_RGB_PRIMARIES : ndarray, (3, 2) """ XTREME_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D50') """ *Xtreme RGB* colourspace whitepoint. XTREME_RGB_WHITEPOINT : tuple """ XTREME_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(XTREME_RGB_PRIMARIES, XTREME_RGB_WHITEPOINT) """ *Xtreme RGB* colourspace to *CIE XYZ* colourspace 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* colourspace to *Xtreme RGB* colourspace matrix. XYZ_TO_XTREME_RGB_MATRIX : array_like, (3, 3) """ XTREME_RGB_TRANSFER_FUNCTION = lambda x: x ** (1 / 2.2) """
S_GAMUT_ILLUMINANT = 'D65' """ *S-Gamut* colourspace whitepoint name as illuminant. S_GAMUT_ILLUMINANT : unicode """ S_GAMUT_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(S_GAMUT_ILLUMINANT) """ *S-Gamut* colourspace whitepoint. S_GAMUT_WHITEPOINT : tuple """ S_GAMUT_TO_XYZ_MATRIX = normalised_primary_matrix(S_GAMUT_PRIMARIES, S_GAMUT_WHITEPOINT) """ *S-Gamut* colourspace to *CIE XYZ* colourspace matrix. S_GAMUT_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_S_GAMUT_MATRIX = np.linalg.inv(S_GAMUT_TO_XYZ_MATRIX) """ *CIE XYZ* colourspace to *S-Gamut* colourspace matrix. XYZ_TO_S_GAMUT_MATRIX : array_like, (3, 3) """ def _s_log_transfer_function(value):
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_CONSTANTS = Structure(alpha=lambda x: 1.099 if x else 1.0993, beta=lambda x: 0.018 if x else 0.0181)
"CCS_WHITEPOINT_SMITS1999", "MATRIX_XYZ_TO_RGB_SMITS1999", "XYZ_to_RGB_Smits1999", "RGB_to_sd_Smits1999", ] PRIMARIES_SMITS1999: NDArray = RGB_COLOURSPACE_sRGB.primaries """Current *Smits (1999)* method implementation colourspace primaries.""" CCS_WHITEPOINT_SMITS1999: NDArray = CCS_ILLUMINANTS[ "CIE 1931 2 Degree Standard Observer" ]["E"] """Current *Smits (1999)* method implementation colourspace whitepoint.""" MATRIX_XYZ_TO_RGB_SMITS1999: NDArray = np.linalg.inv( normalised_primary_matrix(PRIMARIES_SMITS1999, CCS_WHITEPOINT_SMITS1999) ) """ Current *Smits (1999)* method implementation *RGB* colourspace to *CIE XYZ* tristimulus values matrix. """ def XYZ_to_RGB_Smits1999(XYZ: ArrayLike) -> NDArray: """ Convert from *CIE XYZ* tristimulus values to *RGB* colourspace with conditions required by the current *Smits (1999)* method implementation. Parameters ---------- XYZ
RED_COLOR_ILLUMINANT = 'D65' """ *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) """ def _linear_to_red_log_film(
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) """ def _cinema_gamut_OECF(value):
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) """ def _linear_to_red_log_film(
[0.13012295081967212, 0.034836065573770496]]) """ *Best RGB* colourspace primaries. BEST_RGB_PRIMARIES : ndarray, (3, 2) """ BEST_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D50') """ *Best RGB* colourspace whitepoint. BEST_RGB_WHITEPOINT : tuple """ BEST_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(BEST_RGB_PRIMARIES, BEST_RGB_WHITEPOINT) """ *Best RGB* colourspace to *CIE XYZ* colourspace 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* colourspace to *Best RGB* colourspace matrix. XYZ_TO_BEST_RGB_MATRIX : array_like, (3, 3) """ BEST_RGB_TRANSFER_FUNCTION = lambda x: x**(1 / 2.2) """
[0.131, 0.046]]) """ *Rec. 2020* colourspace primaries. REC_2020_PRIMARIES : ndarray, (3, 2) """ REC_2020_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D65') """ *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* colourspace 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* colourspace to *Rec. 2020* colourspace matrix. XYZ_TO_REC_2020_MATRIX : array_like, (3, 3) """ REC_2020_CONSTANTS = Structure(alpha=lambda x: 1.099 if x else 1.0993, beta=lambda x: 0.018 if x else 0.0181)
*Adobe Wide Gamut RGB* colourspace whitepoint name as illuminant. ADOBE_WIDE_GAMUT_RGB_ILLUMINANT : unicode """ ADOBE_WIDE_GAMUT_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get( ADOBE_WIDE_GAMUT_RGB_ILLUMINANT) """ *Adobe Wide Gamut RGB* colourspace whitepoint. ADOBE_WIDE_GAMUT_RGB_WHITEPOINT : tuple """ 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) """
S_GAMUT_ILLUMINANT = 'D65' """ *S-Gamut* colourspace whitepoint name as illuminant. S_GAMUT_ILLUMINANT : unicode """ S_GAMUT_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(S_GAMUT_ILLUMINANT) """ *S-Gamut* colourspace whitepoint. S_GAMUT_WHITEPOINT : tuple """ S_GAMUT_TO_XYZ_MATRIX = normalised_primary_matrix(S_GAMUT_PRIMARIES, S_GAMUT_WHITEPOINT) """ *S-Gamut* colourspace to *CIE XYZ* tristimulus values matrix. S_GAMUT_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_S_GAMUT_MATRIX = np.linalg.inv(S_GAMUT_TO_XYZ_MATRIX) """ *CIE XYZ* tristimulus values to *S-Gamut* colourspace matrix. XYZ_TO_S_GAMUT_MATRIX : array_like, (3, 3) """ def _linear_to_s_log(value):
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 _eci_rgb_v2_transfer_function(value):
[0.10, -0.05]]) """ *S-Log* colourspace primaries. S_LOG_PRIMARIES : ndarray, (3, 2) """ S_LOG_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D65') """ *S-Log* colourspace whitepoint. S_LOG_WHITEPOINT : tuple """ S_LOG_TO_XYZ_MATRIX = normalised_primary_matrix(S_LOG_PRIMARIES, S_LOG_WHITEPOINT) """ *S-Log* colourspace to *CIE XYZ* colourspace matrix. S_LOG_TO_XYZ_MATRIX : array_like, (3, 3) """ XYZ_TO_S_LOG_MATRIX = np.linalg.inv(S_LOG_TO_XYZ_MATRIX) """ *CIE XYZ* colourspace to *S-Log* colourspace matrix. XYZ_TO_S_LOG_MATRIX : array_like, (3, 3) """ S_LOG_TRANSFER_FUNCTION = lambda x: ( (0.432699 * math.log10(x + 0.037584) + 0.616596) + 0.03)
BEST_RGB_ILLUMINANT = 'D50' """ *Best RGB* colourspace whitepoint name as illuminant. BEST_RGB_ILLUMINANT : unicode """ BEST_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(BEST_RGB_ILLUMINANT) """ *Best RGB* colourspace whitepoint. BEST_RGB_WHITEPOINT : tuple """ BEST_RGB_TO_XYZ_MATRIX = normalised_primary_matrix(BEST_RGB_PRIMARIES, BEST_RGB_WHITEPOINT) """ *Best RGB* colourspace to *CIE XYZ* colourspace 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* colourspace to *Best RGB* colourspace matrix. XYZ_TO_BEST_RGB_MATRIX : array_like, (3, 3) """ def _best_rgb_transfer_function(value):
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) """ def _pal_secam_rgb_transfer_function(value):
DON_RGB_4_ILLUMINANT = 'D50' """ *Don RGB 4* colourspace whitepoint name as illuminant. DON_RGB_4_ILLUMINANT : unicode """ DON_RGB_4_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(DON_RGB_4_ILLUMINANT) """ *Don RGB 4* colourspace whitepoint. DON_RGB_4_WHITEPOINT : tuple """ 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) """ def _don_rgb_4_OECF(value):
[0.12993762993762992, 0.035343035343035345]]) """ *Don RGB 4* colourspace primaries. DON_RGB_4_PRIMARIES : ndarray, (3, 2) """ DON_RGB_4_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D50') """ *Don RGB 4* colourspace whitepoint. DON_RGB_4_WHITEPOINT : tuple """ DON_RGB_4_TO_XYZ_MATRIX = normalised_primary_matrix(DON_RGB_4_PRIMARIES, DON_RGB_4_WHITEPOINT) """ *Don RGB 4* colourspace to *CIE XYZ* colourspace 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* colourspace to *Don RGB 4* colourspace matrix. XYZ_TO_DON_RGB_4_MATRIX : array_like, (3, 3) """ DON_RGB_4_TRANSFER_FUNCTION = lambda x: x ** (1 / 2.2) """
""" Current Smits (1999) method implementation colourspace primaries. SMITS1999_PRIMARIES : ndarray, (3, 2) """ SMITS1999_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('E') """ Current Smits (1999) method implementation colourspace whitepoint. SMITS1999_WHITEPOINT : tuple """ SMITS1999_XYZ_TO_RGB_MATRIX = np.linalg.inv( normalised_primary_matrix(SMITS1999_PRIMARIES, SMITS1999_WHITEPOINT)) """ Current Smits (1999) method implementation *RGB* colourspace to *CIE XYZ* tristimulus values matrix. SMITS1999_XYZ_TO_RGB_MATRIX : array_like, (3, 3) """ def XYZ_to_RGB_Smits1999(XYZ, chromatic_adaptation_transform='Bradford'): """ Convenient object to convert from *CIE XYZ* tristimulus values to *RGB* colourspace in conditions required by the current Smits (1999) method implementation. Parameters
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* colourspace 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* colourspace to *Russell RGB* colourspace matrix. XYZ_TO_RUSSELL_RGB_MATRIX : array_like, (3, 3) """ def _russell_rgb_transfer_function(value):
[0.155, 0.070]]) """ *SMPTE-C RGB* colourspace primaries. SMPTE_C_RGB_PRIMARIES : ndarray, (3, 2) """ SMPTE_C_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D65') """ *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* colourspace 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* colourspace to *SMPTE-C RGB* colourspace matrix. XYZ_TO_SMPTE_C_RGB_MATRIX : array_like, (3, 3) """ SMPTE_C_RGB_TRANSFER_FUNCTION = lambda x: x**(1 / 2.2) """
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) """ def _apple_rgb_OECF(value):
[0.1000, 0.0200]]) """ *Russell RGB* colourspace primaries. RUSSELL_RGB_PRIMARIES : ndarray, (3, 2) """ RUSSELL_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D55') """ *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* colourspace 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* colourspace to *Russell RGB* colourspace matrix. XYZ_TO_RUSSELL_RGB_MATRIX : array_like, (3, 3) """ RUSSELL_RGB_TRANSFER_FUNCTION = lambda x: x**(1 / 2.2) """
PAL_SECAM_RGB_PRIMARIES = np.array([[0.64, 0.33], [0.29, 0.60], [0.15, 0.06]]) """ *Pal/Secam RGB* colourspace primaries. PAL_SECAM_RGB_PRIMARIES : ndarray, (3, 2) """ PAL_SECAM_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D65') """ *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* colourspace 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* colourspace to *Pal/Secam RGB* colourspace matrix. XYZ_TO_PAL_SECAM_RGB_MATRIX : array_like, (3, 3) """ PAL_SECAM_RGB_TRANSFER_FUNCTION = lambda x: x**(1 / 2.8) """
""" *ColorMatch RGB* colourspace whitepoint name as illuminant. COLOR_MATCH_RGB_ILLUMINANT : unicode """ COLOR_MATCH_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get(COLOR_MATCH_RGB_ILLUMINANT) """ *ColorMatch RGB* colourspace whitepoint. COLOR_MATCH_RGB_WHITEPOINT : tuple """ COLOR_MATCH_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( COLOR_MATCH_RGB_PRIMARIES, COLOR_MATCH_RGB_WHITEPOINT) """ *ColorMatch RGB* colourspace to *CIE XYZ* colourspace 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* colourspace to *ColorMatch RGB* colourspace matrix. XYZ_TO_COLOR_MATCH_RGB_MATRIX : array_like, (3, 3) """
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 _eci_rgb_v2_OECF(value):
[0.1500, 0.0750]]) """ *ColorMatch RGB* colourspace primaries. COLOR_MATCH_RGB_PRIMARIES : ndarray, (3, 2) """ COLOR_MATCH_RGB_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('D50') """ *ColorMatch RGB* colourspace whitepoint. COLOR_MATCH_RGB_WHITEPOINT : tuple """ COLOR_MATCH_RGB_TO_XYZ_MATRIX = normalised_primary_matrix( COLOR_MATCH_RGB_PRIMARIES, COLOR_MATCH_RGB_WHITEPOINT) """ *ColorMatch RGB* colourspace to *CIE XYZ* colourspace 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* colourspace to *ColorMatch RGB* colourspace matrix. XYZ_TO_COLOR_MATCH_RGB_MATRIX : array_like, (3, 3) """ COLOR_MATCH_RGB_TRANSFER_FUNCTION = lambda x: x**(1 / 1.8) """
""" Current Smits (1999) method implementation colourspace primaries. SMITS1999_PRIMARIES : ndarray, (3, 2) """ SMITS1999_WHITEPOINT = ILLUMINANTS.get( 'CIE 1931 2 Degree Standard Observer').get('E') """ Current Smits (1999) method implementation colourspace whitepoint. SMITS1999_WHITEPOINT : tuple """ SMITS1999_XYZ_TO_RGB_MATRIX = np.linalg.inv( normalised_primary_matrix(SMITS1999_PRIMARIES, SMITS1999_WHITEPOINT)) """ Current Smits (1999) method implementation *RGB* colourspace to *CIE XYZ* colourspace matrix. SMITS1999_XYZ_TO_RGB_MATRIX : array_like, (3, 3) """ def XYZ_to_RGB_smits1999(XYZ, chromatic_adaptation_transform='Bradford'): """ Convenient object to convert from *CIE XYZ* colourspace to *RGB* colourspace in conditions required by the current Smits (1999) method implementation. Parameters