def test_nan_lightness_CIE1976(self): """ Tests :func:`colour.colorimetry.lightness.lightness_CIE1976` definition nan support. """ lightness_CIE1976(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
def test_n_dimensional_lightness_CIE1976(self): """ Tests :func:`colour.colorimetry.lightness.lightness_CIE1976` definition n-dimensional arrays support. """ Y = 10.08 Lstar = 37.98562910 np.testing.assert_almost_equal( lightness_CIE1976(Y), Lstar, decimal=7) Y = np.tile(Y, 6) Lstar = np.tile(Lstar, 6) np.testing.assert_almost_equal( lightness_CIE1976(Y), Lstar, decimal=7) Y = np.reshape(Y, (2, 3)) Lstar = np.reshape(Lstar, (2, 3)) np.testing.assert_almost_equal( lightness_CIE1976(Y), Lstar, decimal=7) Y = np.reshape(Y, (2, 3, 1)) Lstar = np.reshape(Lstar, (2, 3, 1)) np.testing.assert_almost_equal( lightness_CIE1976(Y), Lstar, decimal=7)
def test_domain_range_scale_lightness_CIE1976(self): """ Tests :func:`colour.colorimetry.lightness.lightness_CIE1976` definition domain and range scale support. """ L_star = lightness_CIE1976(12.19722535, 100) d_r = (('reference', 1), (1, 0.01), (100, 1)) for scale, factor in d_r: with domain_range_scale(scale): np.testing.assert_almost_equal( lightness_CIE1976(12.19722535 * factor, 100), L_star * factor, decimal=7)
def test_n_dimensional_lightness_CIE1976(self): """ Tests :func:`colour.colorimetry.lightness.lightness_CIE1976` definition n-dimensional arrays support. """ Y = 12.19722535 L_star = 41.527875844653451 np.testing.assert_almost_equal(lightness_CIE1976(Y), L_star, decimal=7) Y = np.tile(Y, 6) L_star = np.tile(L_star, 6) np.testing.assert_almost_equal(lightness_CIE1976(Y), L_star, decimal=7) Y = np.reshape(Y, (2, 3)) L_star = np.reshape(L_star, (2, 3)) np.testing.assert_almost_equal(lightness_CIE1976(Y), L_star, decimal=7) Y = np.reshape(Y, (2, 3, 1)) L_star = np.reshape(L_star, (2, 3, 1)) np.testing.assert_almost_equal(lightness_CIE1976(Y), L_star, decimal=7)
def test_lightness_CIE1976(self): """ Test :func:`colour.colorimetry.lightness.lightness_CIE1976` definition. """ self.assertAlmostEqual(lightness_CIE1976(12.19722535), 41.527875844653451, places=7) self.assertAlmostEqual(lightness_CIE1976(23.04276781), 55.116362849525402, places=7) self.assertAlmostEqual(lightness_CIE1976(6.15720079), 29.805654680097106, places=7) self.assertAlmostEqual(lightness_CIE1976(12.19722535, 50), 56.480581732417676, places=7) self.assertAlmostEqual(lightness_CIE1976(12.19722535, 75), 47.317620274162735, places=7) self.assertAlmostEqual(lightness_CIE1976(12.19722535, 95), 42.519930728120940, places=7)
def test_lightness_CIE1976(self): """ Tests :func:`colour.colorimetry.lightness.lightness_CIE1976` definition. """ self.assertAlmostEqual( lightness_CIE1976(10.08), 37.98562910, places=7) self.assertAlmostEqual( lightness_CIE1976(56.76), 80.04441556, places=7) self.assertAlmostEqual( lightness_CIE1976(98.32), 99.34672790, places=7) self.assertAlmostEqual( lightness_CIE1976(10.08, 50), 52.01763049, places=7) self.assertAlmostEqual( lightness_CIE1976(10.08, 75), 43.41887326, places=7) self.assertAlmostEqual( lightness_CIE1976(10.08, 95), 38.91659876, places=7)
def test_lightness_CIE1976(self): """ Tests :func:`colour.colorimetry.lightness.lightness_CIE1976` definition. """ self.assertAlmostEqual( lightness_CIE1976(12.19722535), 41.527875844653451, places=7) self.assertAlmostEqual( lightness_CIE1976(23.04276781), 55.116362849525402, places=7) self.assertAlmostEqual( lightness_CIE1976(6.15720079), 29.805654680097106, places=7) self.assertAlmostEqual( lightness_CIE1976(12.19722535, 50), 56.480581732417676, places=7) self.assertAlmostEqual( lightness_CIE1976(12.19722535, 75), 47.317620274162735, places=7) self.assertAlmostEqual( lightness_CIE1976(12.19722535, 95), 42.519930728120940, places=7)
def XYZ_to_Luv( XYZ, illuminant=ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D65']): """ Converts from *CIE XYZ* tristimulus values to *CIE L\\*u\\*v\\** colourspace. Parameters ---------- XYZ : array_like *CIE XYZ* tristimulus values. illuminant : array_like, optional Reference *illuminant* *xy* chromaticity coordinates or *CIE xyY* colourspace array. Returns ------- ndarray *CIE L\\*u\\*v\\** colourspace array. Notes ----- +----------------+-----------------------+-----------------+ | **Domain** | **Scale - Reference** | **Scale - 1** | +================+=======================+=================+ | ``XYZ`` | [0, 1] | [0, 1] | +----------------+-----------------------+-----------------+ | ``illuminant`` | [0, 1] | [0, 1] | +----------------+-----------------------+-----------------+ +----------------+-----------------------+-----------------+ | **Range** | **Scale - Reference** | **Scale - 1** | +================+=======================+=================+ | ``Luv`` | ``L`` : [0, 100] | ``L`` : [0, 1] | | | | | | | ``u`` : [-100, 100] | ``u`` : [-1, 1] | | | | | | | ``v`` : [-100, 100] | ``v`` : [-1, 1] | +----------------+-----------------------+-----------------+ References ---------- :cite:`CIETC1-482004m`, :cite:`Wikipedia2007b` Examples -------- >>> XYZ = np.array([0.20654008, 0.12197225, 0.05136952]) >>> XYZ_to_Luv(XYZ) # doctest: +ELLIPSIS array([ 41.5278752..., 96.8362605..., 17.7521014...]) """ X, Y, Z = tsplit(to_domain_1(XYZ)) X_r, Y_r, Z_r = tsplit(xyY_to_XYZ(xy_to_xyY(illuminant))) with domain_range_scale('100'): L = lightness_CIE1976(Y, Y_r) u = (13 * L * ((4 * X / (X + 15 * Y + 3 * Z)) - (4 * X_r / (X_r + 15 * Y_r + 3 * Z_r)))) v = (13 * L * ((9 * Y / (X + 15 * Y + 3 * Z)) - (9 * Y_r / (X_r + 15 * Y_r + 3 * Z_r)))) Luv = tstack([L, u, v]) return from_range_100(Luv)
def XYZ_to_Luv( XYZ: ArrayLike, illuminant: ArrayLike = CCS_ILLUMINANTS[ "CIE 1931 2 Degree Standard Observer"]["D65"], ) -> NDArray: """ Convert from *CIE XYZ* tristimulus values to *CIE L\\*u\\*v\\** colourspace. Parameters ---------- XYZ *CIE XYZ* tristimulus values. illuminant Reference *illuminant* *CIE xy* chromaticity coordinates or *CIE xyY* colourspace array. Returns ------- :class:`numpy.ndarray` *CIE L\\*u\\*v\\** colourspace array. Notes ----- +----------------+-----------------------+-----------------+ | **Domain** | **Scale - Reference** | **Scale - 1** | +================+=======================+=================+ | ``XYZ`` | [0, 1] | [0, 1] | +----------------+-----------------------+-----------------+ | ``illuminant`` | [0, 1] | [0, 1] | +----------------+-----------------------+-----------------+ +----------------+-----------------------+-----------------+ | **Range** | **Scale - Reference** | **Scale - 1** | +================+=======================+=================+ | ``Luv`` | ``L`` : [0, 100] | ``L`` : [0, 1] | | | | | | | ``u`` : [-100, 100] | ``u`` : [-1, 1] | | | | | | | ``v`` : [-100, 100] | ``v`` : [-1, 1] | +----------------+-----------------------+-----------------+ References ---------- :cite:`CIETC1-482004m`, :cite:`Wikipedia2007b` Examples -------- >>> import numpy as np >>> XYZ = np.array([0.20654008, 0.12197225, 0.05136952]) >>> XYZ_to_Luv(XYZ) # doctest: +ELLIPSIS array([ 41.5278752..., 96.8362605..., 17.7521014...]) """ X, Y, Z = tsplit(to_domain_1(XYZ)) X_r, Y_r, Z_r = tsplit(xyY_to_XYZ(xy_to_xyY(illuminant))) with domain_range_scale("100"): L = lightness_CIE1976(Y, Y_r) X_Y_Z = X + 15 * Y + 3 * Z X_r_Y_r_Z_r = X_r + 15 * Y_r + 3 * Z_r u = 13 * L * ((4 * X / X_Y_Z) - (4 * X_r / X_r_Y_r_Z_r)) v = 13 * L * ((9 * Y / X_Y_Z) - (9 * Y_r / X_r_Y_r_Z_r)) Luv = tstack([L, u, v]) return from_range_100(Luv)