Ejemplo n.º 1
0
    def test_get_domain_range_scale(self):
        """
        Tests :func:`colour.utilities.common.get_domain_range_scale`
        definition.
        """

        with domain_range_scale('Reference'):
            self.assertEqual(get_domain_range_scale(), 'reference')

        with domain_range_scale('1'):
            self.assertEqual(get_domain_range_scale(), '1')

        with domain_range_scale('100'):
            self.assertEqual(get_domain_range_scale(), '100')
Ejemplo n.º 2
0
    def test_domain_range_scale_XYZ_to_LLAB(self):
        """
        Tests :func:`colour.appearance.llab.XYZ_to_LLAB` definition domain
        and range scale support.
        """

        XYZ = np.array([19.01, 20.00, 21.78])
        XYZ_0 = np.array([95.05, 100.00, 108.88])
        Y_b = 20.0
        L = 318.31
        surround = LLAB_VIEWING_CONDITIONS['ref_average_4_minus']
        specification = XYZ_to_LLAB(XYZ, XYZ_0, Y_b, L, surround)[:5]

        d_r = (
            ('reference', 1, 1),
            (1, 0.01, np.array([1, 1, 1 / 360, 1, 1])),
            (100, 1, np.array([1, 1, 100 / 360, 1, 1])),
        )
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    XYZ_to_LLAB(XYZ * factor_a, XYZ_0 * factor_a, Y_b, L,
                                surround)[:5],
                    specification * factor_b,
                    decimal=7)
Ejemplo n.º 3
0
    def test_domain_range_scale_XYZ_to_Nayatani95(self):
        """
        Tests :func:`colour.appearance.nayatani95.XYZ_to_Nayatani95` definition
        domain and range scale support.
        """

        XYZ = np.array([19.01, 20.00, 21.78])
        XYZ_n = np.array([95.05, 100.00, 108.88])
        Y_o = 20.0
        E_o = 5000.0
        E_or = 1000.0
        specification = XYZ_to_Nayatani95(XYZ, XYZ_n, Y_o, E_o, E_or)[:6]

        d_r = (
            ('reference', 1, 1),
            (1, 0.01, np.array([1, 1, 1 / 360, 1, 1, 1])),
            (100, 1, np.array([1, 1, 100 / 360, 1, 1, 1])),
        )
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    XYZ_to_Nayatani95(XYZ * factor_a, XYZ_n * factor_a, Y_o,
                                      E_o, E_or)[:6],
                    specification * factor_b,
                    decimal=7)
Ejemplo n.º 4
0
    def test_from_range_100(self):
        """
        Tests :func:`colour.utilities.common.from_range_100` definition.
        """

        with domain_range_scale('Reference'):
            self.assertEqual(from_range_100(1), 1)

        with domain_range_scale('1'):
            self.assertEqual(from_range_100(1), 0.01)

        with domain_range_scale('100'):
            self.assertEqual(from_range_100(1), 1)

        with domain_range_scale('1'):
            self.assertEqual(from_range_100(1, np.pi), 1 / np.pi)
Ejemplo n.º 5
0
    def test_domain_range_scale_XYZ_to_ATD95(self):
        """
        Tests :func:`colour.appearance.atd95.XYZ_to_ATD95` definition domain
        and range scale support.
        """

        XYZ = np.array([19.01, 20.00, 21.78])
        XYZ_0 = np.array([95.05, 100.00, 108.88])
        Y_0 = 318.31
        k_1 = 0.0
        k_2 = 50.0
        specification = XYZ_to_ATD95(XYZ, XYZ_0, Y_0, k_1, k_2)

        d_r = (
            ('reference', 1, 1),
            (1, 0.01, np.array([1 / 360, 1, 1, 1, 1, 1, 1, 1, 1])),
            (100, 1, np.array([100 / 360, 1, 1, 1, 1, 1, 1, 1, 1])),
        )
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    XYZ_to_ATD95(XYZ * factor_a, XYZ_0 * factor_a, Y_0, k_1,
                                 k_2),
                    specification * factor_b,
                    decimal=7)
Ejemplo n.º 6
0
    def test_from_range_degrees(self):
        """
        Tests :func:`colour.utilities.common.from_range_degrees` definition.
        """

        with domain_range_scale('Reference'):
            self.assertEqual(from_range_degrees(1), 1)

        with domain_range_scale('1'):
            self.assertEqual(from_range_degrees(1), 1 / 360)

        with domain_range_scale('100'):
            self.assertEqual(from_range_degrees(1), 1 / 3.6)

        with domain_range_scale('100'):
            self.assertEqual(from_range_degrees(1, np.pi), 1 / (np.pi / 100))
Ejemplo n.º 7
0
def oetf_reverse_ARIBSTDB67(E_p, r=0.5, constants=ARIBSTDB67_CONSTANTS):
    """
    Defines *ARIB STD-B67 (Hybrid Log-Gamma)* reverse opto-electrical transfer
    function (OETF / OECF).

    Parameters
    ----------
    E_p : numeric or array_like
        Non-linear signal :math:`E'`.
    r : numeric, optional
        Video level corresponding to reference white level.
    constants : Structure, optional
        *ARIB STD-B67 (Hybrid Log-Gamma)* constants.

    Returns
    -------
    numeric or ndarray
        Voltage :math:`E` normalised by the reference white level and
        proportional to the implicit light intensity that would be detected
        with a reference camera color channel R, G, B.

    Notes
    -----

    +------------+-----------------------+---------------+
    | **Domain** | **Scale - Reference** | **Scale - 1** |
    +============+=======================+===============+
    | ``E_p``    | [0, 1]                | [0, 1]        |
    +------------+-----------------------+---------------+

    +------------+-----------------------+---------------+
    | **Range**  | **Scale - Reference** | **Scale - 1** |
    +============+=======================+===============+
    | ``E``      | [0, 1]                | [0, 1]        |
    +------------+-----------------------+---------------+

    References
    ----------
    :cite:`AssociationofRadioIndustriesandBusinesses2015a`

    Examples
    --------
    >>> oetf_reverse_ARIBSTDB67(0.212132034355964)  # doctest: +ELLIPSIS
    0.1799999...
    """

    E_p = to_domain_1(E_p)

    a = constants.a
    b = constants.b
    c = constants.c

    with domain_range_scale('ignore'):
        E = np.where(
            E_p <= oetf_ARIBSTDB67(1),
            (E_p / r) ** 2,
            np.exp((E_p - c) / a) + b,
        )

    return as_float(from_range_1(E))
Ejemplo n.º 8
0
    def test_domain_range_scale_XYZ_to_RLAB(self):
        """
        Tests :func:`colour.appearance.rlab.XYZ_to_RLAB` definition domain and
        range scale support.
        """

        XYZ = np.array([19.01, 20.00, 21.78])
        XYZ_n = np.array([109.85, 100, 35.58])
        Y_n = 31.83
        sigma = RLAB_VIEWING_CONDITIONS['Average']
        D = RLAB_D_FACTOR['Hard Copy Images']
        specification = XYZ_to_RLAB(XYZ, XYZ_n, Y_n, sigma, D)[:4]

        d_r = (
            ('reference', 1, 1),
            (1, 0.01, np.array([1, 1, 1 / 360, 1])),
            (100, 1, np.array([1, 1, 100 / 360, 1])),
        )
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    XYZ_to_RLAB(XYZ * factor_a, XYZ_n * factor_a, Y_n, sigma,
                                D)[:4],
                    specification * factor_b,
                    decimal=7)
Ejemplo n.º 9
0
    def test_domain_range_scale_XYZ_to_CAM16(self):
        """
        Tests :func:`colour.appearance.cam16.XYZ_to_CAM16` definition domain
        and range scale support.
        """

        XYZ = np.array([19.01, 20.00, 21.78])
        XYZ_w = np.array([95.05, 100.00, 108.88])
        L_A = 318.31
        Y_b = 20.0
        surround = CAM16_VIEWING_CONDITIONS['Average']
        specification = XYZ_to_CAM16(XYZ, XYZ_w, L_A, Y_b, surround)[:-1]

        d_r = (
            ('reference', 1, 1),
            (1, 0.01, np.array([1, 1, 1 / 360, 1, 1, 1, 1 / 360])),
            (100, 1, np.array([1, 1, 100 / 360, 1, 1, 1, 100 / 360])),
        )
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    XYZ_to_CAM16(XYZ * factor_a, XYZ_w * factor_a, L_A, Y_b,
                                 surround)[:-1],
                    specification * factor_b,
                    decimal=7)
Ejemplo n.º 10
0
    def error_function(XYZ, Ljg):
        """
        Error function.
        """

        # Error must be computed in "reference" domain and range.
        with domain_range_scale('ignore'):
            error = np.linalg.norm(XYZ_to_OSA_UCS(XYZ) - Ljg)

        return error
Ejemplo n.º 11
0
    def test_to_domain_10(self):
        """
        Tests :func:`colour.utilities.common.to_domain_10` definition.
        """

        with domain_range_scale('Reference'):
            self.assertEqual(to_domain_10(1), 1)

        with domain_range_scale('1'):
            self.assertEqual(to_domain_10(1), 10)

        with domain_range_scale('100'):
            self.assertEqual(to_domain_10(1), 0.1)

        with domain_range_scale('100'):
            self.assertEqual(to_domain_10(1, np.pi), 1 / np.pi)

        with domain_range_scale('100'):
            self.assertEqual(
                to_domain_10(1, dtype=np.float16).dtype, np.float16)
Ejemplo n.º 12
0
    def test_to_domain_int(self):
        """
        Tests :func:`colour.utilities.common.to_domain_int` definition.
        """

        with domain_range_scale('Reference'):
            self.assertEqual(to_domain_int(1), 1)

        with domain_range_scale('1'):
            self.assertEqual(to_domain_int(1), 255)

        with domain_range_scale('100'):
            self.assertEqual(to_domain_int(1), 2.55)

        with domain_range_scale('100'):
            self.assertEqual(to_domain_int(1, 10), 10.23)

        with domain_range_scale('100'):
            self.assertEqual(
                to_domain_int(1, dtype=np.float16).dtype, np.float16)
Ejemplo n.º 13
0
    def test_to_domain_degrees(self):
        """
        Tests :func:`colour.utilities.common.to_domain_degrees` definition.
        """

        with domain_range_scale('Reference'):
            self.assertEqual(to_domain_degrees(1), 1)

        with domain_range_scale('1'):
            self.assertEqual(to_domain_degrees(1), 360)

        with domain_range_scale('100'):
            self.assertEqual(to_domain_degrees(1), 3.6)

        with domain_range_scale('100'):
            self.assertEqual(to_domain_degrees(1, np.pi), np.pi / 100)

        with domain_range_scale('100'):
            self.assertEqual(
                to_domain_degrees(1, dtype=np.float16).dtype, np.float16)
Ejemplo n.º 14
0
    def test_from_range_int(self):
        """
        Tests :func:`colour.utilities.common.from_range_int` definition.
        """

        with domain_range_scale('Reference'):
            self.assertEqual(from_range_int(1), 1)

        with domain_range_scale('1'):
            self.assertEqual(from_range_int(1), 1 / 255)

        with domain_range_scale('100'):
            self.assertEqual(from_range_int(1), 1 / 2.55)

        with domain_range_scale('100'):
            self.assertEqual(from_range_int(1, 10), 1 / (1023 / 100))

        with domain_range_scale('100'):
            self.assertEqual(
                from_range_int(1, dtype=np.float16).dtype, np.float16)
Ejemplo n.º 15
0
    def test_set_domain_range_scale(self):
        """
        Tests :func:`colour.utilities.common.set_domain_range_scale`
        definition.
        """

        with domain_range_scale('Reference'):
            set_domain_range_scale('1')
            self.assertEqual(get_domain_range_scale(), '1')

        with domain_range_scale('Reference'):
            set_domain_range_scale('100')
            self.assertEqual(get_domain_range_scale(), '100')

        with domain_range_scale('1'):
            set_domain_range_scale('Reference')
            self.assertEqual(get_domain_range_scale(), 'reference')

        self.assertRaises(AssertionError,
                          lambda: set_domain_range_scale('Invalid'))
Ejemplo n.º 16
0
def plot_multi_cctfs(cctfs=None, decoding_cctf=False, **kwargs):
    """
    Plots given colour component transfer functions.

    Parameters
    ----------
    cctfs : array_like, optional
        Colour component transfer function to plot.
    decoding_cctf : bool
        Plot the decoding colour component transfer function instead.

    Other Parameters
    ----------------
    \\**kwargs : dict, optional
        {:func:`colour.plotting.artist`,
        :func:`colour.plotting.plot_multi_functions`,
        :func:`colour.plotting.render`},
        Please refer to the documentation of the previously listed definitions.

    Returns
    -------
    tuple
        Current figure and axes.

    Examples
    --------
    >>> plot_multi_cctfs(['ITU-R BT.709', 'sRGB'])  # doctest: +SKIP

    .. image:: ../_static/Plotting_Plot_Multi_CCTFs.png
        :align: center
        :alt: plot_multi_cctfs
    """

    if cctfs is None:
        cctfs = ('ITU-R BT.709', 'sRGB')

    cctfs = filter_passthrough(
        DECODING_CCTFS if decoding_cctf else ENCODING_CCTFS, cctfs)

    mode = 'Decoding' if decoding_cctf else 'Encoding'
    title = '{0} - {1} CCTFs'.format(', '.join([cctf for cctf in cctfs]), mode)

    settings = {
        'bounding_box': (0, 1, 0, 1),
        'legend': True,
        'title': title,
        'x_label': 'Signal Value' if decoding_cctf else 'Tristimulus Value',
        'y_label': 'Tristimulus Value' if decoding_cctf else 'Signal Value',
    }
    settings.update(kwargs)

    with domain_range_scale(1):
        return plot_multi_functions(cctfs, **settings)
Ejemplo n.º 17
0
def eotf_SMPTE240M(V_r):
    """
    Defines *SMPTE 240M* electro-optical transfer function (EOTF / EOCF).

    Parameters
    ----------
    V_r : numeric or array_like
        Video signal level :math:`V_r` driving the reference reproducer
        normalised to the system reference white.

    Returns
    -------
    numeric or ndarray
         Light output :math:`L_r` from the reference reproducer normalised to
         the system reference white.

    Notes
    -----

    +------------+-----------------------+---------------+
    | **Domain** | **Scale - Reference** | **Scale - 1** |
    +============+=======================+===============+
    | ``V_c``    | [0, 1]                | [0, 1]        |
    +------------+-----------------------+---------------+

    +------------+-----------------------+---------------+
    | **Range**  | **Scale - Reference** | **Scale - 1** |
    +============+=======================+===============+
    | ``L_c``    | [0, 1]                | [0, 1]        |
    +------------+-----------------------+---------------+

    References
    ----------
    :cite:`SocietyofMotionPictureandTelevisionEngineers1999b`

    Examples
    --------
    >>> eotf_SMPTE240M(0.402285796753870)  # doctest: +ELLIPSIS
    0.1...
    """

    V_r = to_domain_1(V_r)

    with domain_range_scale('ignore'):
        L_r = np.where(
            V_r < oetf_SMPTE240M(0.0228),
            V_r / 4,
            spow((V_r + 0.1115) / 1.1115, 1 / 0.45),
        )

    return as_float(from_range_1(L_r))
Ejemplo n.º 18
0
def oetf_reverse_sRGB(V):
    """
    Defines the *sRGB* colourspace reverse opto-electronic transfer function
    (OETF / OECF).

    Parameters
    ----------
    V : numeric or array_like
        Electrical signal :math:`V`.

    Returns
    -------
    numeric or ndarray
        Corresponding *luminance* :math:`L` of the image.

    Notes
    -----

    +------------+-----------------------+---------------+
    | **Domain** | **Scale - Reference** | **Scale - 1** |
    +============+=======================+===============+
    | ``V``      | [0, 1]                | [0, 1]        |
    +------------+-----------------------+---------------+

    +------------+-----------------------+---------------+
    | **Range**  | **Scale - Reference** | **Scale - 1** |
    +============+=======================+===============+
    | ``L``      | [0, 1]                | [0, 1]        |
    +------------+-----------------------+---------------+

    References
    ----------
    :cite:`InternationalElectrotechnicalCommission1999a`,
    :cite:`InternationalTelecommunicationUnion2015i`

    Examples
    --------
    >>> oetf_reverse_sRGB(0.461356129500442)  # doctest: +ELLIPSIS
    0.1...
    """

    V = to_domain_1(V)

    with domain_range_scale('ignore'):
        L = np.where(
            V <= oetf_sRGB(0.0031308),
            V / 12.92,
            spow((V + 0.055) / 1.055, 2.4),
        )

    return as_float(from_range_1(L))
Ejemplo n.º 19
0
    def test_domain_range_scale_log_decoding_ERIMMRGB(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\
log_decoding_ERIMMRGB` definition domain and range scale support.
        """

        X_p = 0.410052389492129
        X = log_decoding_ERIMMRGB(X_p)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    log_decoding_ERIMMRGB(X_p * factor), X * factor, decimal=7)
Ejemplo n.º 20
0
    def test_domain_range_scale_XYZ_to_IPT(self):
        """
        Tests :func:`colour.models.ipt.XYZ_to_IPT` definition domain and
        range scale support.
        """

        XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
        IPT = XYZ_to_IPT(XYZ)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    XYZ_to_IPT(XYZ * factor), IPT * factor, decimal=7)
Ejemplo n.º 21
0
    def test_domain_range_scale_oetf_ARIBSTDB67(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.arib_std_b67.\
oetf_ARIBSTDB67` definition domain and range scale support.
        """

        E = 0.18
        E_p = oetf_ARIBSTDB67(E)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    oetf_ARIBSTDB67(E * factor), E_p * factor, decimal=7)
Ejemplo n.º 22
0
    def test_domain_range_scale_yellowness_ASTMD1925(self):
        """
        Tests :func:`colour.colorimetry.yellowness.yellowness_ASTMD1925`
        definition domain and range scale support.
        """

        XYZ = np.array([95.00000000, 100.00000000, 105.00000000])
        YI = 10.299999999999997

        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(
                    yellowness_ASTMD1925(XYZ * factor), YI * factor, decimal=7)
Ejemplo n.º 23
0
    def test_domain_range_scale_oetf_ROMMRGB(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\
oetf_ROMMRGB` definition domain and range scale support.
        """

        X = 0.18
        X_p = oetf_ROMMRGB(X)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    oetf_ROMMRGB(X * factor), X_p * factor, decimal=7)
Ejemplo n.º 24
0
    def test_domain_range_scale_eotf_reverse_BT1886(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.itur_bt_1886.\
eotf_reverse_BT1886` definition domain and range scale support.
        """

        L = 0.18
        V = eotf_reverse_BT1886(L)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    eotf_reverse_BT1886(L * factor), V * factor, decimal=7)
Ejemplo n.º 25
0
    def test_domain_range_scale_log_decoding_PivotedLog(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.pivoted_log.\
log_decoding_PivotedLog` definition domain and range scale support.
        """

        y = 0.434995112414467
        x = log_decoding_PivotedLog(y)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    log_decoding_PivotedLog(y * factor), x * factor, decimal=7)
Ejemplo n.º 26
0
    def test_domain_range_scale_log_decoding_DLog(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.dji_dlog.\
log_decoding_DJIDLog` definition domain and range scale support.
        """

        y = 0.398764556189331
        x = log_decoding_DJIDLog(y)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    log_decoding_DJIDLog(y * factor), x * factor, decimal=7)
Ejemplo n.º 27
0
    def test_domain_range_scale_log_encoding_Protune(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.gopro.\
log_encoding_Protune` definition domain and range scale support.
        """

        x = 0.18
        y = log_encoding_Protune(x)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    log_encoding_Protune(x * factor), y * factor, decimal=7)
Ejemplo n.º 28
0
    def test_domain_range_scale_eotf_RIMMRGB(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\
eotf_RIMMRGB` definition domain and range scale support.
        """

        X_p = 0.291673732475746
        X = eotf_RIMMRGB(X_p)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    eotf_RIMMRGB(X_p * factor), X * factor, decimal=7)
Ejemplo n.º 29
0
    def test_domain_range_scale_IPT_hue_angle(self):
        """
        Tests :func:`colour.models.ipt.IPT_hue_angle` definition domain and
        range scale support.
        """

        IPT = np.array([0.20654008, 0.12197225, 0.05136952])
        hue = IPT_hue_angle(IPT)

        d_r = (('reference', 1, 1), (1, 1, 1 / 360), (100, 100, 1 / 3.6))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    IPT_hue_angle(IPT * factor_a), hue * factor_b, decimal=7)
Ejemplo n.º 30
0
    def test_domain_range_scale_oetf_BT601(self):
        """
        Tests :func:`colour.models.rgb.transfer_functions.itur_bt_601.\
oetf_BT601` definition domain and range scale support.
        """

        L = 0.18
        E = oetf_BT601(L)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    oetf_BT601(L * factor), E * factor, decimal=7)
Ejemplo n.º 31
0
    def test_domain_range_scale_Luv_to_uv(self):
        """
        Tests :func:`colour.models.cie_luv.Luv_to_uv` definition
        domain and range scale support.
        """

        Luv = np.array([41.52787529, 96.83626054, 17.75210149])
        illuminant = np.array([0.31270, 0.32900])
        uv = Luv_to_uv(Luv, illuminant)

        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(Luv_to_uv(
                    Luv * factor, illuminant),
                                               uv,
                                               decimal=7)
Ejemplo n.º 32
0
    def test_domain_range_scale_oetf_inverse_ARIBSTDB67(self):
        """
        Test :func:`colour.models.rgb.transfer_functions.arib_std_b67.\
oetf_inverse_ARIBSTDB67` definition domain and range scale support.
        """

        E_p = 0.212132034355964
        E = oetf_inverse_ARIBSTDB67(E_p)

        d_r = (("reference", 1), ("1", 1), ("100", 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    oetf_inverse_ARIBSTDB67(E_p * factor),
                    E * factor,
                    decimal=7,
                )
Ejemplo n.º 33
0
    def test_domain_range_scale_whiteness_Ganz1979(self):
        """
        Tests :func:`colour.colorimetry.whiteness.whiteness_Ganz1979`
        definition domain and range scale support.
        """

        xy = np.array([0.3167, 0.3334])
        Y = 100
        WT = whiteness_Ganz1979(xy, Y)

        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(whiteness_Ganz1979(
                    xy, Y * factor),
                                               WT * factor,
                                               decimal=7)
Ejemplo n.º 34
0
    def test_domain_range_scale_delta_E_CMC(self):
        """
        Tests :func:`colour.difference.delta_e.delta_E_CMC` definition
        domain and range scale support.
        """

        Lab_1 = np.array([100.00000000, 21.57210357, 272.22819350])
        Lab_2 = np.array([100.00000000, 426.67945353, 72.39590835])
        delta_E = delta_E_CMC(Lab_1, Lab_2)

        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(delta_E_CMC(
                    Lab_1 * factor, Lab_2 * factor),
                                               delta_E,
                                               decimal=7)
Ejemplo n.º 35
0
    def test_domain_range_scale_whiteness_Berger1959(self):
        """
        Tests :func:`colour.colorimetry.whiteness.whiteness_Berger1959`
        definition domain and range scale support.
        """

        XYZ = np.array([95.00000000, 100.00000000, 105.00000000])
        XYZ_0 = np.array([94.80966767, 100.00000000, 107.30513595])
        W = whiteness_Berger1959(XYZ, XYZ_0)

        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(
                    whiteness_Berger1959(XYZ * factor, XYZ_0 * factor),
                    W * factor,
                    decimal=7)
Ejemplo n.º 36
0
    def test_domain_range_scale_XYZ_to_Luv(self):
        """
        Tests :func:`colour.models.cie_luv.XYZ_to_Luv` definition
        domain and range scale support.
        """

        XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
        illuminant = np.array([0.31270, 0.32900])
        Luv = XYZ_to_Luv(XYZ, illuminant)

        d_r = (('reference', 1, 1), (1, 1, 0.01), (100, 100, 1))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(XYZ_to_Luv(
                    XYZ * factor_a, illuminant),
                                               Luv * factor_b,
                                               decimal=7)
Ejemplo n.º 37
0
    def test_domain_range_scale_chromatic_adaptation(self):
        """
        Tests :func:`colour.adaptation.chromatic_adaptation` definition domain
        and range scale support.
        """

        XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
        XYZ_w = np.array([0.95045593, 1.00000000, 1.08905775])
        XYZ_wr = np.array([0.96429568, 1.00000000, 0.82510460])
        Y_o = 0.2
        E_o = 1000
        L_A = 200
        Y_n = 200

        m = ('Von Kries', 'CIE 1994', 'CMCCAT2000', 'Fairchild 1990')
        v = [
            chromatic_adaptation(XYZ,
                                 XYZ_w,
                                 XYZ_wr,
                                 method=method,
                                 Y_o=Y_o,
                                 E_o1=E_o,
                                 E_o2=E_o,
                                 L_A1=L_A,
                                 L_A2=L_A,
                                 Y_n=Y_n) for method in m
        ]

        d_r = (('reference', 1), (1, 1), (100, 100))
        for method, value in zip(m, v):
            for scale, factor in d_r:
                with domain_range_scale(scale):
                    np.testing.assert_almost_equal(chromatic_adaptation(
                        XYZ * factor,
                        XYZ_w * factor,
                        XYZ_wr * factor,
                        method=method,
                        Y_o=Y_o * factor,
                        E_o1=E_o,
                        E_o2=E_o,
                        L_A1=L_A,
                        L_A2=L_A,
                        Y_n=Y_n),
                                                   value * factor,
                                                   decimal=7)
Ejemplo n.º 38
0
    def test_domain_range_scale_JMh_CIECAM02_to_UCS_Luo2006(self):
        """
        Tests :func:`colour.models.cam02_ucs.JMh_CIECAM02_to_UCS_Luo2006`
        definition domain and range scale support.
        """

        JMh = self._JMh
        Jpapbp = JMh_CIECAM02_to_UCS_Luo2006(
            JMh, COEFFICIENTS_UCS_LUO2006['CAM02-LCD'])

        d_r = (('reference', 1, 1), (1, np.array([0.01, 0.01, 1 / 360]), 0.01),
               (100, np.array([1, 1, 1 / 3.6]), 1))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(JMh_CIECAM02_to_UCS_Luo2006(
                    JMh * factor_a, COEFFICIENTS_UCS_LUO2006['CAM02-LCD']),
                                               Jpapbp * factor_b,
                                               decimal=7)
Ejemplo n.º 39
0
    def test_domain_range_scale_whiteness_Taube1960(self):
        """
        Test :func:`colour.colorimetry.whiteness.whiteness_Taube1960`
        definition domain and range scale support.
        """

        XYZ = np.array([95.00000000, 100.00000000, 105.00000000])
        XYZ_0 = np.array([94.80966767, 100.00000000, 107.30513595])
        WI = whiteness_Taube1960(XYZ, XYZ_0)

        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(
                    whiteness_Taube1960(XYZ * factor, XYZ_0 * factor),
                    WI * factor,
                    decimal=7,
                )
Ejemplo n.º 40
0
    def test_domain_range_scale_chromatic_adaptation_VonKries(self):
        """
        Tests :func:`colour.adaptation.vonkries.chromatic_adaptation_VonKries`
        definition domain and range scale support.
        """

        XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
        XYZ_w = np.array([0.95045593, 1.00000000, 1.08905775])
        XYZ_wr = np.array([0.96429568, 1.00000000, 0.82510460])
        XYZ_a = chromatic_adaptation_VonKries(XYZ, XYZ_w, XYZ_wr)

        d_r = (('reference', 1), (1, 1), (100, 0.01))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(chromatic_adaptation_VonKries(
                    XYZ * factor, XYZ_w * factor, XYZ_wr * factor),
                                               XYZ_a * factor,
                                               decimal=7)
Ejemplo n.º 41
0
    def test_domain_range_scale_Lab_to_XYZ(self):
        """
        Test :func:`colour.models.cie_lab.Lab_to_XYZ` definition
        domain and range scale support.
        """

        Lab = np.array([41.52787529, 52.63858304, 26.92317922])
        illuminant = np.array([0.31270, 0.32900])
        XYZ = Lab_to_XYZ(Lab, illuminant)

        d_r = (("reference", 1, 1), ("1", 0.01, 1), ("100", 1, 100))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    Lab_to_XYZ(Lab * factor_a, illuminant),
                    XYZ * factor_b,
                    decimal=7,
                )
Ejemplo n.º 42
0
    def test_domain_range_scale_lightness(self):
        """
        Tests :func:`colour.colorimetry.lightness.lightness` definition domain
        and range scale support.
        """

        m = ('Glasser 1958', 'Wyszecki 1963', 'CIE 1976', 'Fairchild 2010',
             'Fairchild 2011')
        v = [lightness(12.19722535, method, Y_n=100) for method in m]

        d_r = (('reference', 1), (1, 0.01), (100, 1))
        for method, value in zip(m, v):
            for scale, factor in d_r:
                with domain_range_scale(scale):
                    np.testing.assert_almost_equal(
                        lightness(12.19722535 * factor, method, Y_n=100),
                        value * factor,
                        decimal=7)
Ejemplo n.º 43
0
    def test_domain_range_scale_delta_E_DIN99(self):
        """
        Test :func:`colour.difference.din99.delta_E_DIN99` definition
        domain and range scale support.
        """

        Lab_1 = np.array([60.25740000, -34.00990000, 36.26770000])
        Lab_2 = np.array([60.46260000, -34.17510000, 39.43870000])
        delta_E = delta_E_DIN99(Lab_1, Lab_2)

        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(
                    delta_E_DIN99(Lab_1 * factor, Lab_2 * factor),
                    delta_E,
                    decimal=7,
                )
Ejemplo n.º 44
0
    def test_domain_range_scale_Oklab_to_XYZ(self):
        """
        Test :func:`colour.models.oklab.Oklab_to_XYZ` definition domain and
        range scale support.
        """

        Oklab = np.array([0.51634019, 0.15469500, 0.06289579])
        XYZ = Oklab_to_XYZ(Oklab)

        d_r = (("reference", 1), ("1", 1), ("100", 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_allclose(
                    Oklab_to_XYZ(Oklab * factor),
                    XYZ * factor,
                    rtol=0.000001,
                    atol=0.000001,
                )
Ejemplo n.º 45
0
    def test_domain_range_scale_hdr_IPT_to_XYZ(self):
        """
        Tests :func:`colour.models.hdr_ipt.hdr_IPT_to_XYZ` definition domain
        and range scale support.
        """

        IPT_hdr = np.array([24.88927680, -11.44574144, 1.63147707])
        Y_s = 0.2
        Y_abs = 100
        XYZ = hdr_IPT_to_XYZ(IPT_hdr, Y_s, Y_abs)

        d_r = (('reference', 1, 1, 1), (1, 0.01, 1, 1), (100, 1, 100, 100))
        for scale, factor_a, factor_b, factor_c in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(hdr_IPT_to_XYZ(
                    IPT_hdr * factor_a, Y_s * factor_b, Y_abs),
                                               XYZ * factor_c,
                                               decimal=7)
Ejemplo n.º 46
0
    def test_domain_range_scale_sd_to_XYZ_integration(self):
        """
        Test :func:`colour.colorimetry.tristimulus_values.\
sd_to_XYZ_integration` definition domain and range scale support.
        """

        cmfs = MSDS_CMFS["CIE 1931 2 Degree Standard Observer"]
        XYZ = sd_to_XYZ_integration(SD_SAMPLE, cmfs, SDS_ILLUMINANTS["A"])

        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(
                    sd_to_XYZ_integration(SD_SAMPLE, cmfs,
                                          SDS_ILLUMINANTS["A"]),
                    XYZ * factor,
                    decimal=7,
                )
Ejemplo n.º 47
0
    def test_domain_range_scale_XYZ_to_sd(self):
        """
        Tests :func:`colour.recovery.XYZ_to_sd` definition domain
        and range scale support.
        """

        XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
        m = ('Smits 1999', 'Meng 2015')
        v = [sd_to_XYZ_integration(XYZ_to_sd(XYZ, method)) for method in m]

        d_r = (('reference', 1, 1), (1, 1, 0.01), (100, 100, 1))
        for method, value in zip(m, v):
            for scale, factor_a, factor_b in d_r:
                with domain_range_scale(scale):
                    np.testing.assert_almost_equal(sd_to_XYZ_integration(
                        XYZ_to_sd(XYZ * factor_a, method=method)),
                                                   value * factor_b,
                                                   decimal=7)
Ejemplo n.º 48
0
    def test_domain_range_scale_XYZ_to_RGB(self):
        """
        Tests :func:`colour.models.rgb.rgb_colourspace.RGB_to_RGB` definition
        domain and range scale support.
        """

        aces_2065_1_colourspace = RGB_COLOURSPACES['ACES2065-1']
        sRGB_colourspace = RGB_COLOURSPACES['sRGB']
        RGB_i = np.array([0.21931722, 0.06950287, 0.04694832])
        RGB_o = RGB_to_RGB(RGB_i, aces_2065_1_colourspace, sRGB_colourspace)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(RGB_to_RGB(
                    RGB_i * factor, aces_2065_1_colourspace, sRGB_colourspace),
                                               RGB_o * factor,
                                               decimal=7)
Ejemplo n.º 49
0
    def test_domain_range_scale_exponent_hdr_CIELab(self):
        """
        Test :func:`colour.models.hdr_cie_lab.exponent_hdr_CIELab` definition
        domain and range scale support.
        """

        Y_s = 0.2
        Y_abs = 100
        epsilon = exponent_hdr_CIELab(Y_s, Y_abs)

        d_r = (("reference", 1), ("1", 1), ("100", 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    exponent_hdr_CIELab(Y_s * factor, Y_abs),
                    epsilon,
                    decimal=7,
                )
Ejemplo n.º 50
0
    def test_domain_range_scale_oetf_BlackmagicFilmGeneration5(self):
        """
        Test :func:`colour.models.rgb.transfer_functions.\
blackmagic_design.oetf_BlackmagicFilmGeneration5` definition domain and range
        scale support.
        """

        L = 0.18
        V = oetf_BlackmagicFilmGeneration5(L)

        d_r = (("reference", 1), ("1", 1), ("100", 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    oetf_BlackmagicFilmGeneration5(L * factor),
                    V * factor,
                    decimal=7,
                )
Ejemplo n.º 51
0
    def test_domain_range_scale_UCS_Luo2006_to_JMh_CIECAM02(self):
        """
        Tests :func:`colour.models.cam02_ucs.UCS_Luo2006_to_JMh_CIECAM02`
        definition domain and range scale support.
        """

        Jpapbp = np.array([54.90433134, -0.08442362, -0.06848314])
        JMh = UCS_Luo2006_to_JMh_CIECAM02(
            Jpapbp, COEFFICIENTS_UCS_LUO2006['CAM02-LCD'])

        d_r = (('reference', 1, 1), (1, 0.01, np.array([0.01, 0.01, 1 / 360])),
               (100, 1, np.array([1, 1, 1 / 3.6])))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(UCS_Luo2006_to_JMh_CIECAM02(
                    Jpapbp * factor_a, COEFFICIENTS_UCS_LUO2006['CAM02-LCD']),
                                               JMh * factor_b,
                                               decimal=7)
Ejemplo n.º 52
0
    def test_domain_range_scale_oetf_inverse_DaVinciIntermediate(self):
        """
        Test :func:`colour.models.rgb.transfer_functions.\
davinci_intermediate.oetf_inverse_DaVinciIntermediate` definition domain and
        range scale support.
        """

        V = 0.336043272384855
        L = oetf_inverse_DaVinciIntermediate(V)

        d_r = (("reference", 1), ("1", 1), ("100", 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    oetf_inverse_DaVinciIntermediate(V * factor),
                    L * factor,
                    decimal=7,
                )
Ejemplo n.º 53
0
    def test_domain_range_scale_Jzazbz_to_XYZ(self):
        """
        Test :func:`colour.models.jzazbz.Jzazbz_to_XYZ` definition domain and
        range scale support.
        """

        Jzazbz = np.array([0.00535048, 0.00924302, 0.00526007])
        XYZ = Jzazbz_to_XYZ(Jzazbz)

        d_r = (("reference", 1), ("1", 1), ("100", 1))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_allclose(
                    Jzazbz_to_XYZ(Jzazbz * factor),
                    XYZ * factor,
                    rtol=0.000001,
                    atol=0.000001,
                )
Ejemplo n.º 54
0
    def test_domain_range_scale_RGB_to_sd_Smits1999(self):
        """
        Tests :func:`colour.recovery.smits1999.RGB_to_sd_Smits1999`
        definition domain and range scale support.
        """

        XYZ_i = np.array([0.20654008, 0.12197225, 0.05136952])
        RGB_i = XYZ_to_RGB_Smits1999(XYZ_i)
        XYZ_o = sd_to_XYZ_integration(RGB_to_sd_Smits1999(RGB_i))

        d_r = (('reference', 1, 1), (1, 1, 0.01), (100, 100, 1))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    sd_to_XYZ_integration(
                        RGB_to_sd_Smits1999(RGB_i * factor_a)),
                    XYZ_o * factor_b,
                    decimal=7)
Ejemplo n.º 55
0
    def test_domain_range_scale_luminance(self):
        """
        Tests :func:`colour.colorimetry.luminance.luminance` definition
        domain and range scale support.
        """

        m = ('Newhall 1943', 'ASTM D1535-08', 'CIE 1976', 'Fairchild 2010',
             'Fairchild 2011')
        v = [luminance(41.527875844653451, method, Y_n=100) for method in m]

        d_r = (('reference', 1), (1, 0.01), (100, 1))
        for method, value in zip(m, v):
            for scale, factor in d_r:
                with domain_range_scale(scale):
                    np.testing.assert_almost_equal(luminance(
                        41.527875844653451 * factor, method, Y_n=100),
                                                   value * factor,
                                                   decimal=7)
Ejemplo n.º 56
0
    def test_domain_range_scale_uv_to_Luv(self):
        """
        Tests :func:`colour.models.cie_luv.uv_to_Luv` definition
        domain and range scale support.
        """

        uv = np.array([0.37720213, 0.50120264])
        illuminant = np.array([0.31270, 0.32900])
        Y = 1
        Luv = uv_to_Luv(uv, illuminant, Y)

        d_r = (('reference', 1, 1), (1, 1, 0.01), (100, 100, 1))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(uv_to_Luv(
                    uv, illuminant, Y * factor_a),
                                               Luv * factor_b,
                                               decimal=7)
Ejemplo n.º 57
0
    def test_domain_range_scale_XYZ_to_hdr_IPT(self):
        """
        Tests :func:`colour.models.hdr_ipt.XYZ_to_hdr_IPT` definition domain
        and range scale support.
        """

        XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
        Y_s = 0.2
        Y_abs = 100
        IPT_hdr = XYZ_to_hdr_IPT(XYZ, Y_s, Y_abs)

        d_r = (('reference', 1, 1), (1, 1, 0.01), (100, 100, 1))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(XYZ_to_hdr_IPT(
                    XYZ * factor_a, Y_s * factor_a, Y_abs),
                                               IPT_hdr * factor_b,
                                               decimal=7)
Ejemplo n.º 58
0
    def test_domain_range_scale_XYZ_to_hdr_CIELab(self):
        """
        Tests :func:`colour.models.hdr_cie_lab.XYZ_to_hdr_CIELab` definition
        domain and range scale support.
        """

        XYZ = np.array([0.20654008, 0.12197225, 0.05136952])
        illuminant = np.array([0.31270, 0.32900])
        Y_s = 0.2
        Y_abs = 100
        Lab_hdr = XYZ_to_hdr_CIELab(XYZ, illuminant, Y_s, Y_abs)

        d_r = (('reference', 1, 1), (1, 1, 0.01), (100, 100, 1))
        for scale, factor_a, factor_b in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(XYZ_to_hdr_CIELab(
                    XYZ * factor_a, illuminant, Y_s * factor_a, Y_abs),
                                               Lab_hdr * factor_b,
                                               decimal=7)
Ejemplo n.º 59
0
    def test_domain_range_scale_hdr_CIELab_to_XYZ(self):
        """
        Tests :func:`colour.models.hdr_cie_lab.hdr_CIELab_to_XYZ` definition
        domain and range scale support.
        """

        Lab_hdr = np.array([26.46461067, -24.61332600, -4.84796811])
        illuminant = np.array([0.31270, 0.32900])
        Y_s = 0.2
        Y_abs = 100
        XYZ = hdr_CIELab_to_XYZ(Lab_hdr, illuminant, Y_s, Y_abs)

        d_r = (('reference', 1, 1, 1), (1, 0.01, 1, 1), (100, 1, 100, 100))
        for scale, factor_a, factor_b, factor_c in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(hdr_CIELab_to_XYZ(
                    Lab_hdr * factor_a, illuminant, Y_s * factor_b, Y_abs),
                                               XYZ * factor_c,
                                               decimal=7)
Ejemplo n.º 60
0
    def test_domain_range_scale_spectral_to_aces_relative_exposure_values(
            self):
        """
        Tests :func:`colour.models.rgb.aces_it.
sd_to_aces_relative_exposure_values`  definition domain and range scale
        support.
        """

        shape = ACES_RICD.shape
        grey_reflector = sd_constant(0.18, shape)
        RGB = sd_to_aces_relative_exposure_values(grey_reflector)

        d_r = (('reference', 1), (1, 1), (100, 100))
        for scale, factor in d_r:
            with domain_range_scale(scale):
                np.testing.assert_almost_equal(
                    sd_to_aces_relative_exposure_values(grey_reflector),
                    RGB * factor,
                    decimal=7)