Beispiel #1
0
    def setUp(self):
        """Initialise the common tests attributes."""

        self._shape = SPECTRAL_SHAPE_OTSU2018
        self._cmfs, self._sd_D65 = handle_spectral_arguments(
            shape_default=self._shape
        )

        self._reflectances = sds_and_msds_to_msds(
            list(SDS_COLOURCHECKERS["ColorChecker N Ohta"].values())
            + list(SDS_COLOURCHECKERS["BabelColor Average"].values())
        )

        self._tree = Tree_Otsu2018(
            self._reflectances, self._cmfs, self._sd_D65
        )

        self._XYZ_D65 = sd_to_XYZ(self._sd_D65)
        self._xy_D65 = XYZ_to_xy(self._XYZ_D65)

        self._temporary_directory = tempfile.mkdtemp()

        self._path = os.path.join(
            self._temporary_directory, "Test_Otsu2018.npz"
        )
Beispiel #2
0
    def setUp(self):
        """Initialise the common tests attributes."""

        self._shape = SPECTRAL_SHAPE_OTSU2018
        self._cmfs, self._sd_D65 = handle_spectral_arguments(
            shape_default=self._shape
        )

        self._reflectances = sds_and_msds_to_msds(
            SDS_COLOURCHECKERS["ColorChecker N Ohta"].values()
        )

        self._tree = Tree_Otsu2018(self._reflectances)
        self._tree.optimise()
        for leaf in self._tree.leaves:
            if len(leaf.parent.children) == 2:
                self._node_a = leaf.parent
                self._node_b, self._node_c = self._node_a.children
                break

        self._data_a = Data_Otsu2018(
            np.transpose(reshape_msds(self._reflectances, self._shape).values),
            self._cmfs,
            self._sd_D65,
        )
        self._data_b = self._node_b.data

        self._partition_axis = self._node_a.partition_axis
Beispiel #3
0
def read_training_data_rawtoaces_v1() -> MultiSpectralDistributions:
    """
    Read the *RAW to ACES* v1 190 patches.

    Returns
    -------
    :class:`colour.MultiSpectralDistributions`
        *RAW to ACES* v1 190 patches.

    References
    ----------
    :cite:`Dyer2017`

    Examples
    --------
    >>> len(read_training_data_rawtoaces_v1().labels)
    190
    """

    global _TRAINING_DATA_RAWTOACES_V1

    if _TRAINING_DATA_RAWTOACES_V1 is not None:
        training_data = _TRAINING_DATA_RAWTOACES_V1
    else:
        path = os.path.join(RESOURCES_DIRECTORY_RAWTOACES, "190_Patches.csv")
        training_data = sds_and_msds_to_msds(
            list(read_sds_from_csv_file(path).values()))

        _TRAINING_DATA_RAWTOACES_V1 = training_data

    return training_data
Beispiel #4
0
    def test_reflectances(self):
        """
        Test :attr:`colour.recovery.otsu2018.Tree_Otsu2018.reflectances`
        property.
        """

        np.testing.assert_almost_equal(
            self._tree.reflectances,
            np.transpose(
                reshape_msds(
                    sds_and_msds_to_msds(self._reflectances), self._shape
                ).values
            ),
            decimal=7,
        )
Beispiel #5
0
    def setUp(self):
        """Initialise the common tests attributes."""

        self._shape = SPECTRAL_SHAPE_OTSU2018
        self._cmfs, self._sd_D65 = handle_spectral_arguments(
            shape_default=self._shape
        )

        self._reflectances = np.transpose(
            reshape_msds(
                sds_and_msds_to_msds(
                    SDS_COLOURCHECKERS["ColorChecker N Ohta"].values()
                ),
                self._shape,
            ).values
        )

        self._data = Data_Otsu2018(
            self._reflectances, self._cmfs, self._sd_D65
        )
Beispiel #6
0
    def test_matrix_idt(self):
        """
        Test :func:`colour.characterisation.aces_it.matrix_idt`
        definition.
        """

        # The *RAW to ACES* v1 matrix for the same camera and optimized by
        # `Ceres Solver <http://ceres-solver.org/>`__ is as follows:
        #
        # 0.864994 -0.026302 0.161308
        # 0.056527 1.122997 -0.179524
        # 0.023683 -0.202547 1.178864
        np.testing.assert_allclose(
            matrix_idt(MSDS_CANON_EOS_5DMARK_II, SDS_ILLUMINANTS["D55"])[0],
            np.array([
                [0.84993207, -0.01605594, 0.15143504],
                [0.05090392, 1.12559930, -0.18498249],
                [0.02006825, -0.19445149, 1.16206549],
            ]),
            rtol=0.0001,
            atol=0.0001,
        )

        # The *RAW to ACES* v1 matrix for the same camera and optimized by
        # `Ceres Solver <http://ceres-solver.org/>`__ is as follows:
        #
        # 0.888492 -0.077505 0.189014
        # 0.021805 1.066614 -0.088418
        # -0.019718 -0.206664 1.226381
        np.testing.assert_allclose(
            matrix_idt(MSDS_CANON_EOS_5DMARK_II,
                       SD_AMPAS_ISO7589_STUDIO_TUNGSTEN)[0],
            np.array([
                [0.85895300, -0.04381920, 0.15978620],
                [0.01024800, 1.08825364, -0.11392229],
                [-0.02327674, -0.18044292, 1.15903609],
            ]),
            rtol=0.0001,
            atol=0.0001,
        )

        M, RGB_w = matrix_idt(
            MSDS_CANON_EOS_5DMARK_II,
            SDS_ILLUMINANTS["D55"],
            optimisation_factory=optimisation_factory_Jzazbz,
        )
        np.testing.assert_allclose(
            M,
            np.array([
                [0.84841492, -0.01569765, 0.15799332],
                [0.05333075, 1.11428542, -0.17523500],
                [0.02262287, -0.22527728, 1.19646895],
            ]),
            rtol=0.0001,
            atol=0.0001,
        )
        np.testing.assert_allclose(
            RGB_w,
            np.array([2.34141541, 1.00000000, 1.51633759]),
            rtol=0.0001,
            atol=0.0001,
        )

        M, RGB_w = matrix_idt(
            MSDS_CANON_EOS_5DMARK_II,
            SDS_ILLUMINANTS["D55"],
            optimisation_kwargs={"method": "Nelder-Mead"},
        )
        np.testing.assert_allclose(
            M,
            np.array([
                [0.71327381, 0.19213397, 0.11115511],
                [-0.05788252, 1.31165598, -0.21730625],
                [-0.05913103, -0.02787107, 1.10737947],
            ]),
            rtol=0.0001,
            atol=0.0001,
        )
        np.testing.assert_allclose(
            RGB_w,
            np.array([2.34141541, 1.00000000, 1.51633759]),
            rtol=0.0001,
            atol=0.0001,
        )

        training_data = sds_and_msds_to_msds(
            SDS_COLOURCHECKERS["BabelColor Average"].values())

        # pylint: disable=E1102
        np.testing.assert_allclose(
            matrix_idt(
                reshape_msds(
                    MSDS_CAMERA_SENSITIVITIES["Nikon 5100 (NPL)"],
                    SpectralShape(400, 700, 10),
                ),
                SD_AMPAS_ISO7589_STUDIO_TUNGSTEN,
                training_data=training_data,
            )[0],
            np.array([
                [0.74041064, 0.10951105, 0.11963256],
                [-0.00467360, 1.09238438, -0.11398966],
                [0.06728533, -0.29530438, 1.18589793],
            ]),
            rtol=0.0001,
            atol=0.0001,
        )

        np.testing.assert_allclose(
            matrix_idt(
                MSDS_CANON_EOS_5DMARK_II,
                SDS_ILLUMINANTS["D55"],
                chromatic_adaptation_transform="Bradford",
            )[0],
            np.array([
                [0.85020607, -0.01371074, 0.14907913],
                [0.05074081, 1.12898863, -0.18800656],
                [0.02095822, -0.20110079, 1.16769711],
            ]),
            rtol=0.0001,
            atol=0.0001,
        )

        _M, RGB_w, XYZ, RGB = matrix_idt(
            MSDS_CANON_EOS_5DMARK_II,
            SDS_ILLUMINANTS["D55"],
            additional_data=True,
        )

        np.testing.assert_almost_equal(
            RGB_w, np.array([2.34141541, 1.00000000, 1.51633759]))

        np.testing.assert_almost_equal(
            XYZ[:5, ...],
            np.array([
                [0.01743160, 0.01794927, 0.01960625],
                [0.08556139, 0.08957352, 0.09017387],
                [0.74560311, 0.78175547, 0.78350814],
                [0.19005289, 0.19950000, 0.20126062],
                [0.56264334, 0.59145486, 0.58950505],
            ]),
        )

        np.testing.assert_almost_equal(
            RGB[:5, ...],
            np.array([
                [0.02075823, 0.01968577, 0.02139352],
                [0.08957758, 0.08919227, 0.08910910],
                [0.78102307, 0.78019384, 0.77643020],
                [0.19950000, 0.19950000, 0.19950000],
                [0.58984787, 0.59040152, 0.58510766],
            ]),
        )
Beispiel #7
0
    def test_training_data_sds_to_XYZ(self):
        """
        Test :func:`colour.characterisation.aces_it.training_data_sds_to_XYZ`
        definition.
        """

        np.testing.assert_almost_equal(
            training_data_sds_to_XYZ(
                read_training_data_rawtoaces_v1(),
                MSDS_CMFS["CIE 1931 2 Degree Standard Observer"],
                SDS_ILLUMINANTS["D55"],
            ),
            np.array([
                [0.01743541, 0.01795040, 0.01961110],
                [0.08556071, 0.08957352, 0.09017032],
                [0.74558770, 0.78175495, 0.78343383],
                [0.19005289, 0.19950000, 0.20126062],
                [0.56263167, 0.59145443, 0.58944868],
                [0.40708229, 0.42774653, 0.42813199],
                [0.28533739, 0.29945717, 0.29732644],
                [0.18670375, 0.19575576, 0.19612855],
                [0.10734487, 0.11290543, 0.11381239],
                [0.06188310, 0.06524694, 0.06594260],
                [0.02905436, 0.03045954, 0.03111642],
                [0.25031624, 0.22471846, 0.12599982],
                [0.20848487, 0.18072652, 0.08216289],
                [0.28173081, 0.26937432, 0.19943363],
                [0.15129458, 0.13765872, 0.08086671],
                [0.07854243, 0.07274480, 0.05123870],
                [0.46574583, 0.43948749, 0.34501135],
                [0.33111608, 0.29368033, 0.21379720],
                [0.04596029, 0.04443836, 0.03115443],
                [0.28422646, 0.15495892, 0.11586479],
                [0.47490187, 0.41497780, 0.33505853],
                [0.29452546, 0.20003225, 0.13705453],
                [0.06905269, 0.04421818, 0.03449201],
                [0.13040440, 0.06239791, 0.04175606],
                [0.43838730, 0.29962261, 0.18439668],
                [0.13390118, 0.08356608, 0.04956679],
                [0.08356733, 0.05794634, 0.03910007],
                [0.21637988, 0.12469189, 0.04842559],
                [0.37899204, 0.22130821, 0.07365608],
                [0.07733610, 0.04256869, 0.02300063],
                [0.25696432, 0.14119282, 0.04740500],
                [0.51960474, 0.41409496, 0.25643556],
                [0.32241564, 0.19954021, 0.08051276],
                [0.05811798, 0.03389661, 0.02553745],
                [0.03192572, 0.02139972, 0.01894908],
                [0.24605476, 0.17854962, 0.09147038],
                [0.20624731, 0.10555152, 0.01675508],
                [0.31255107, 0.19334840, 0.05143990],
                [0.11006219, 0.06057155, 0.01700794],
                [0.20509764, 0.12555310, 0.03594860],
                [0.38058683, 0.30396093, 0.16256996],
                [0.34354473, 0.23964048, 0.06111316],
                [0.62251344, 0.54770879, 0.34634977],
                [0.21294652, 0.14470338, 0.03492000],
                [0.22064317, 0.19656587, 0.11907643],
                [0.23955073, 0.19768225, 0.08595970],
                [0.12377361, 0.08353105, 0.01434151],
                [0.52378659, 0.40757502, 0.10242337],
                [0.09732322, 0.07735501, 0.03254246],
                [0.41081884, 0.30127969, 0.04240016],
                [0.32946008, 0.27129095, 0.05232655],
                [0.19870991, 0.18701769, 0.09764509],
                [0.31867743, 0.25717029, 0.02158054],
                [0.67745549, 0.64283785, 0.31268426],
                [0.43182429, 0.39425828, 0.13198410],
                [0.19075096, 0.16573196, 0.01845293],
                [0.47578930, 0.43714747, 0.07974541],
                [0.08420865, 0.08615579, 0.06605406],
                [0.47306132, 0.43488423, 0.05262924],
                [0.28242654, 0.28638349, 0.19186089],
                [0.37367384, 0.38524079, 0.13498637],
                [0.49536547, 0.51027091, 0.15645211],
                [0.63680942, 0.67272132, 0.19642820],
                [0.43790684, 0.39093965, 0.02518505],
                [0.63216527, 0.66425603, 0.07124985],
                [0.28682848, 0.29807036, 0.14308787],
                [0.78666095, 0.83181391, 0.53110094],
                [0.54475049, 0.57280425, 0.43240766],
                [0.65555915, 0.68992930, 0.10030198],
                [0.10560623, 0.10992647, 0.06863885],
                [0.40588908, 0.43345904, 0.08589490],
                [0.69824760, 0.76446843, 0.23843395],
                [0.27951451, 0.30869595, 0.13310650],
                [0.28351930, 0.32278417, 0.09130925],
                [0.51144946, 0.58985649, 0.11409286],
                [0.16769668, 0.19357639, 0.04824163],
                [0.64027510, 0.74864980, 0.24145602],
                [0.51533750, 0.64418491, 0.09390029],
                [0.10903312, 0.13420204, 0.04403235],
                [0.03916991, 0.04755109, 0.02410291],
                [0.12726285, 0.16825903, 0.03705646],
                [0.34079923, 0.44119883, 0.10621489],
                [0.08299513, 0.10226271, 0.04607974],
                [0.10117617, 0.12690940, 0.05211600],
                [0.20673305, 0.25456362, 0.11244267],
                [0.05040081, 0.06702198, 0.02944861],
                [0.05809758, 0.07896803, 0.03312583],
                [0.07202711, 0.09383365, 0.03453490],
                [0.06392748, 0.07896740, 0.03860393],
                [0.08851258, 0.11174080, 0.04873213],
                [0.09821259, 0.13743849, 0.03901353],
                [0.12253000, 0.18989034, 0.03327101],
                [0.15082798, 0.25948217, 0.03805919],
                [0.41476613, 0.56455709, 0.26988900],
                [0.25043710, 0.40869656, 0.12211755],
                [0.17536685, 0.28765326, 0.10166502],
                [0.12038544, 0.19242328, 0.07754636],
                [0.14661345, 0.23524743, 0.09334793],
                [0.29469553, 0.41056592, 0.23093160],
                [0.13015693, 0.19492122, 0.09333495],
                [0.04081181, 0.08280292, 0.03122401],
                [0.06569736, 0.13553353, 0.05266408],
                [0.12177383, 0.20160583, 0.11621774],
                [0.08354206, 0.11970984, 0.08207175],
                [0.02834645, 0.06259404, 0.03135058],
                [0.20884161, 0.29927365, 0.20553553],
                [0.23180119, 0.33870071, 0.24267407],
                [0.04413521, 0.05398934, 0.04862030],
                [0.13068910, 0.19470885, 0.15073584],
                [0.16108644, 0.18484544, 0.17474649],
                [0.06206737, 0.12873462, 0.09368693],
                [0.05126858, 0.06722639, 0.05961970],
                [0.25534374, 0.31335090, 0.27780291],
                [0.48369629, 0.63319069, 0.57347864],
                [0.06066266, 0.09712274, 0.09253437],
                [0.27940216, 0.41909220, 0.39351159],
                [0.44664100, 0.54665344, 0.55342931],
                [0.03590889, 0.06959304, 0.07535965],
                [0.16621092, 0.30339106, 0.29722885],
                [0.12909138, 0.22008859, 0.22690521],
                [0.31015553, 0.42498221, 0.42044232],
                [0.33970423, 0.42779997, 0.43883150],
                [0.10000582, 0.19440825, 0.23393750],
                [0.16694758, 0.26056864, 0.32541934],
                [0.43598087, 0.55484571, 0.63089871],
                [0.10305166, 0.13633951, 0.16650820],
                [0.12725465, 0.19404057, 0.30068226],
                [0.44450660, 0.54666776, 0.64220554],
                [0.25312549, 0.31346831, 0.38485942],
                [0.24557618, 0.34698805, 0.51328941],
                [0.13585660, 0.18761687, 0.36302217],
                [0.32288492, 0.39652004, 0.54579104],
                [0.08400465, 0.11889755, 0.34519851],
                [0.06038029, 0.07936884, 0.16393180],
                [0.47840043, 0.53070661, 0.64043584],
                [0.16727376, 0.19048161, 0.27055547],
                [0.14740952, 0.19227205, 0.44545300],
                [0.03953792, 0.04540593, 0.10766386],
                [0.16200092, 0.18995251, 0.41003367],
                [0.53147895, 0.57554326, 0.74787983],
                [0.17107460, 0.19285623, 0.48157477],
                [0.11394187, 0.12139868, 0.21928748],
                [0.10838799, 0.11193347, 0.34884682],
                [0.10390937, 0.10854555, 0.22459293],
                [0.28493924, 0.30349174, 0.54832107],
                [0.13572090, 0.13988801, 0.43412229],
                [0.36141619, 0.37929776, 0.62919317],
                [0.04527113, 0.04612919, 0.09028801],
                [0.05164102, 0.04505136, 0.17732932],
                [0.18148861, 0.19085005, 0.29528314],
                [0.37792382, 0.39238764, 0.61357669],
                [0.08148672, 0.06054619, 0.27321036],
                [0.13431208, 0.12118937, 0.35762939],
                [0.19932157, 0.19328547, 0.37878896],
                [0.09456787, 0.08094285, 0.25785832],
                [0.29868476, 0.28967149, 0.54786550],
                [0.09582629, 0.06156148, 0.27163852],
                [0.25053785, 0.23630807, 0.40751054],
                [0.56821117, 0.57452018, 0.72419232],
                [0.16116009, 0.13379410, 0.28760107],
                [0.37816205, 0.32564214, 0.64945876],
                [0.19440630, 0.16599850, 0.31684298],
                [0.24229817, 0.19698372, 0.51538353],
                [0.08104904, 0.06295569, 0.15738669],
                [0.48808364, 0.46372832, 0.69336648],
                [0.01983575, 0.01538929, 0.03252398],
                [0.13468770, 0.08473328, 0.25136965],
                [0.08762890, 0.06560340, 0.13804375],
                [0.20192043, 0.12939477, 0.36343630],
                [0.24231283, 0.19018859, 0.36604686],
                [0.28784724, 0.21105155, 0.46114703],
                [0.12549222, 0.07471177, 0.17126268],
                [0.20910983, 0.18235419, 0.22475458],
                [0.43032307, 0.32727171, 0.49574549],
                [0.39105442, 0.32475758, 0.42885925],
                [0.60567491, 0.57928897, 0.64030251],
                [0.15645417, 0.12986348, 0.17171885],
                [0.50025055, 0.32646202, 0.51899239],
                [0.29822363, 0.19839451, 0.27397060],
                [0.63136923, 0.55375993, 0.63816664],
                [0.10261977, 0.05754107, 0.07473368],
                [0.30325538, 0.21976283, 0.29171854],
                [0.46794841, 0.39368920, 0.44286306],
                [0.54326558, 0.36319029, 0.41127862],
                [0.52355493, 0.42261205, 0.43529051],
                [0.39852212, 0.37568122, 0.37825751],
                [0.10892106, 0.06698290, 0.07939788],
                [0.68780223, 0.58022018, 0.54422258],
                [0.18984448, 0.09051898, 0.12104133],
                [0.41991006, 0.29457037, 0.40780639],
            ]),
            decimal=7,
        )

        training_data = sds_and_msds_to_msds(
            SDS_COLOURCHECKERS["BabelColor Average"].values())

        np.testing.assert_almost_equal(
            training_data_sds_to_XYZ(
                training_data,
                MSDS_CMFS["CIE 1931 2 Degree Standard Observer"],
                SDS_ILLUMINANTS["D55"],
            ),
            np.array([
                [0.11386016, 0.10184316, 0.06318332],
                [0.38043230, 0.34842093, 0.23582246],
                [0.17359019, 0.18707491, 0.31848244],
                [0.10647823, 0.13300376, 0.06486355],
                [0.24658643, 0.23417740, 0.40546447],
                [0.30550003, 0.42171110, 0.41928361],
                [0.38409200, 0.30325611, 0.05955461],
                [0.13149767, 0.11720378, 0.35673016],
                [0.28717811, 0.19215580, 0.12514286],
                [0.08401031, 0.06423349, 0.12782115],
                [0.33990604, 0.44124555, 0.10834694],
                [0.46443889, 0.42686462, 0.07340585],
                [0.07650085, 0.06051409, 0.26167301],
                [0.14598990, 0.23185071, 0.09380297],
                [0.20642710, 0.12162691, 0.04673088],
                [0.57371755, 0.59896814, 0.08930486],
                [0.30208819, 0.19714705, 0.28492050],
                [0.14184323, 0.19554336, 0.36653731],
                [0.86547610, 0.91241348, 0.88583082],
                [0.55802432, 0.58852191, 0.59042758],
                [0.34102067, 0.35951875, 0.36251375],
                [0.18104441, 0.19123509, 0.19353380],
                [0.08461047, 0.08944605, 0.09150081],
                [0.03058273, 0.03200953, 0.03277947],
            ]),
            decimal=7,
        )

        np.testing.assert_almost_equal(
            training_data_sds_to_XYZ(
                training_data,
                MSDS_CMFS["CIE 1931 2 Degree Standard Observer"],
                SDS_ILLUMINANTS["D55"],
                chromatic_adaptation_transform="Bradford",
            ),
            np.array([
                [0.11386557, 0.10185906, 0.06306965],
                [0.38044920, 0.34846911, 0.23548776],
                [0.17349711, 0.18690409, 0.31901794],
                [0.10656174, 0.13314825, 0.06450454],
                [0.24642109, 0.23388536, 0.40625776],
                [0.30564803, 0.42194543, 0.41894818],
                [0.38414010, 0.30337780, 0.05881558],
                [0.13128440, 0.11682332, 0.35780551],
                [0.28707604, 0.19200780, 0.12518610],
                [0.08392779, 0.06409174, 0.12816180],
                [0.34028525, 0.44190577, 0.10665985],
                [0.46462806, 0.42722924, 0.07207641],
                [0.07631823, 0.06018898, 0.26258457],
                [0.14620929, 0.23222248, 0.09296807],
                [0.20635082, 0.12152088, 0.04669974],
                [0.57410962, 0.59968182, 0.08713069],
                [0.30185180, 0.19675858, 0.28565273],
                [0.14177898, 0.19541060, 0.36711242],
                [0.86550834, 0.91247072, 0.88567193],
                [0.55803077, 0.58853268, 0.59040518],
                [0.34102300, 0.35952246, 0.36250826],
                [0.18104563, 0.19123690, 0.19353274],
                [0.08461039, 0.08944568, 0.09150425],
                [0.03058222, 0.03200864, 0.03278183],
            ]),
            decimal=7,
        )
Beispiel #8
0
    def test_training_data_sds_to_RGB(self):
        """
        Test :func:`colour.characterisation.aces_it.training_data_sds_to_RGB`
        definition.
        """

        RGB, RGB_w = training_data_sds_to_RGB(
            read_training_data_rawtoaces_v1(),
            MSDS_CANON_EOS_5DMARK_II,
            SDS_ILLUMINANTS["D55"],
        )
        np.testing.assert_almost_equal(
            RGB,
            np.array([
                [42.00296381, 39.83290349, 43.28842394],
                [181.25453293, 180.47486885, 180.30657630],
                [1580.35041765, 1578.67251435, 1571.05703787],
                [403.67553672, 403.67553672, 403.67553672],
                [1193.51958332, 1194.63985124, 1183.92806238],
                [862.07824054, 863.30644583, 858.29863779],
                [605.42274304, 602.94953701, 596.61414309],
                [395.70687930, 394.67167942, 392.97719777],
                [227.27502116, 228.33554705, 227.96959477],
                [130.97735082, 132.12395139, 131.97239271],
                [61.79308820, 61.85572037, 62.40560537],
                [592.29430914, 383.93309398, 282.70032306],
                [504.67305022, 294.69245978, 193.90976423],
                [640.93167741, 494.91914821, 421.68337308],
                [356.53952646, 239.77610719, 181.18147755],
                [179.58569818, 130.00540238, 109.23999883],
                [1061.07297514, 818.29727750, 730.13362169],
                [765.75936417, 522.06805938, 456.59355601],
                [104.70554060, 80.35106922, 65.75667232],
                [694.19925422, 161.06849749, 214.20170991],
                [1054.83161580, 709.41713619, 668.10329523],
                [697.35479081, 276.20032105, 275.86226833],
                [183.26315174, 65.93801513, 74.60775905],
                [359.74416854, 59.73576149, 89.81296522],
                [1043.53760601, 405.48081521, 376.37298474],
                [344.35374209, 111.26727966, 109.10587712],
                [215.18064862, 87.41152853, 85.18152727],
                [555.37005673, 134.76016985, 111.54658160],
                [931.71846961, 210.02605133, 150.65312210],
                [211.01186324, 50.73939233, 54.55750662],
                [654.45781665, 132.73694874, 107.20009737],
                [1193.89772859, 625.60766645, 521.51066476],
                [802.65730883, 228.94887565, 178.30864097],
                [149.82853589, 44.31839648, 55.29195048],
                [80.88083928, 33.78936351, 41.73438243],
                [579.50157840, 240.80755019, 188.50864121],
                [537.09280420, 80.41714202, 48.28907694],
                [777.62363031, 205.11587061, 122.43126732],
                [292.65436510, 59.53457252, 44.27126512],
                [511.68625012, 134.76897130, 85.73242441],
                [903.64947615, 462.49015529, 350.74183199],
                [852.95457070, 291.64071698, 151.51871958],
                [1427.59841722, 907.54863477, 724.29520203],
                [527.68979414, 169.76114596, 89.48561902],
                [496.62188809, 317.11827387, 243.77642038],
                [554.39017413, 284.77453644, 181.92376325],
                [310.50669032, 96.25812545, 41.22765558],
                [1246.49891599, 522.05121993, 238.28646123],
                [240.19646249, 118.57745244, 82.68426681],
                [1005.98836135, 355.93514762, 118.60457241],
                [792.31376787, 369.56509398, 143.27388201],
                [459.04590557, 315.46594358, 215.53901098],
                [806.50918893, 352.20277469, 97.69239677],
                [1574.11778922, 1078.61331515, 697.02647383],
                [1015.45155837, 598.98507153, 301.94169280],
                [479.68722930, 242.23619637, 72.60351059],
                [1131.70538515, 628.32510627, 213.67910327],
                [185.86573238, 162.55033903, 137.59385867],
                [1131.77074807, 603.89218698, 153.83160203],
                [638.14148862, 527.18090248, 410.12394346],
                [884.58039320, 655.09236879, 329.23967927],
                [1172.73094356, 840.43080883, 380.90114088],
                [1490.24223350, 1111.18491878, 482.33357611],
                [1054.70234779, 513.29967197, 91.55980977],
                [1532.99674295, 1035.15868150, 253.21942988],
                [662.35328287, 528.52354760, 326.56458987],
                [1769.55456145, 1557.58571488, 1155.79098414],
                [1196.62083017, 1079.28012658, 888.47017893],
                [1578.73591185, 1089.40083172, 314.45691871],
                [252.98204345, 206.56788008, 153.62801631],
                [973.59975800, 714.51185344, 251.12884859],
                [1661.01720988, 1340.46809762, 619.61710815],
                [656.66179353, 566.61547800, 322.22788098],
                [676.69663303, 571.86743785, 249.62031449],
                [1229.28626315, 1020.14702709, 353.11090960],
                [390.76190378, 324.36051944, 119.31108035],
                [1524.10495708, 1366.72397704, 633.03830849],
                [1264.54750712, 1149.12002542, 335.25348483],
                [265.96753330, 260.89397210, 130.78590008],
                [90.15969432, 90.72350914, 55.12008388],
                [298.22463247, 300.48700028, 101.95760063],
                [813.34391710, 820.12623357, 313.17818415],
                [186.96402165, 190.38042094, 104.27515726],
                [230.34939258, 235.91900919, 120.77815429],
                [469.57926615, 472.51064145, 256.40912347],
                [117.81249486, 129.17019984, 69.78861213],
                [133.39581196, 151.50390168, 77.66255652],
                [164.19259747, 172.13159331, 80.92295294],
                [146.12230124, 149.32536508, 87.48300520],
                [201.93215173, 208.89885695, 111.84447436],
                [248.41427850, 282.34047722, 122.55482010],
                [304.35509339, 377.38986207, 118.66130122],
                [381.85533606, 530.40398972, 150.83506876],
                [967.19810669, 1161.33086750, 663.54746741],
                [613.98437237, 865.41677370, 362.92357557],
                [410.21304405, 611.89683658, 284.09389273],
                [279.50447144, 416.01646348, 213.18049093],
                [334.48807624, 487.46571814, 235.49134434],
                [664.04349337, 867.87454943, 549.71146455],
                [311.66934673, 431.38058636, 256.13307806],
                [110.04404638, 203.88196409, 104.63331585],
                [153.35857585, 312.67834716, 149.90942505],
                [273.46344514, 462.41992197, 292.50571823],
                [184.77058437, 267.46361125, 193.71894670],
                [75.79805899, 163.84071881, 95.67465270],
                [461.73803707, 668.68797906, 484.77687282],
                [523.01992144, 790.69326153, 598.73122243],
                [105.89414085, 124.92341127, 113.03925656],
                [279.33299507, 446.45128537, 344.73426977],
                [340.57250119, 381.28610429, 353.83182947],
                [141.00956904, 329.50139051, 228.90179483],
                [117.29728945, 156.88993944, 139.49878229],
                [565.12438106, 696.52297174, 615.88218349],
                [1046.73447319, 1446.22424473, 1277.47338963],
                [133.87404291, 253.25944193, 224.75872956],
                [586.52626500, 1015.43013448, 885.49907251],
                [927.08412116, 1197.93784752, 1140.76612264],
                [81.29463446, 202.46201173, 186.35209411],
                [350.90699453, 788.82959642, 669.10307704],
                [278.88231719, 581.42068355, 526.82554470],
                [642.66176703, 990.64038619, 907.64284280],
                [689.10344984, 942.49383066, 900.33073076],
                [190.62073977, 540.21088595, 523.62573562],
                [322.35685764, 676.02683754, 692.94583013],
                [896.29532467, 1289.90474463, 1311.34615018],
                [204.06785020, 321.83261403, 337.01923114],
                [237.10512554, 549.97044011, 646.06486244],
                [907.26703197, 1252.44260107, 1309.50173432],
                [504.74103065, 728.27088424, 782.27808125],
                [470.91049729, 912.49116456, 1059.41083523],
                [231.75497961, 539.14727494, 732.41647792],
                [624.91135978, 943.51709467, 1086.48492282],
                [104.84186738, 398.05825469, 663.96030581],
                [100.47632953, 226.41423139, 323.51675153],
                [998.19560093, 1168.81108673, 1283.07267859],
                [350.74519746, 457.74100518, 552.52270183],
                [223.19531677, 560.14850077, 855.05346039],
                [66.92044931, 128.18947830, 205.30719728],
                [280.63458798, 518.51069955, 784.38948897],
                [1071.24122457, 1267.16339790, 1467.81704311],
                [271.47257445, 553.57609491, 914.33723598],
                [211.86582477, 295.18643027, 418.51776463],
                [153.86457460, 342.06625645, 649.82579665],
                [179.59188635, 265.25370235, 413.68135787],
                [529.77485058, 737.79030218, 1046.29865466],
                [208.71936449, 421.30392624, 796.71281168],
                [685.50294808, 879.76243717, 1195.00892794],
                [85.02189613, 113.33360860, 171.03209018],
                [72.06980264, 139.42600347, 315.97906141],
                [349.57868286, 426.82308690, 556.49647978],
                [726.50329821, 882.48411184, 1163.20130103],
                [102.62158777, 177.73895468, 467.26740089],
                [208.63097281, 322.84137064, 639.30554347],
                [377.19498209, 456.13180268, 706.44272480],
                [149.91131672, 218.16462984, 455.15510078],
                [556.80606655, 673.96774240, 1020.98785748],
                [172.19546054, 181.38617476, 478.69666973],
                [494.98572332, 534.88874559, 773.75255591],
                [1166.31475206, 1207.81829513, 1411.04368728],
                [324.81131421, 298.91188334, 521.96994638],
                [731.58631467, 725.95113189, 1192.71141630],
                [376.70584074, 352.06184423, 572.37854429],
                [421.32413767, 465.07677606, 910.85999527],
                [155.65680826, 145.82096629, 282.56390371],
                [982.43736509, 991.65710582, 1312.39630323],
                [41.37244888, 33.41882583, 59.48460827],
                [282.61535563, 188.37255834, 441.62967707],
                [182.28936533, 136.29152918, 248.30801310],
                [398.28853814, 281.28601665, 641.78038278],
                [494.34030557, 393.91395210, 664.96627121],
                [579.86630787, 449.57878986, 836.64303806],
                [281.30892711, 142.60663373, 309.93723963],
                [439.97606151, 345.13329865, 425.68615785],
                [887.17712876, 583.53811414, 886.88440975],
                [841.97939219, 617.28846790, 810.67002861],
                [1280.60242984, 1139.62066080, 1255.46929276],
                [336.77846782, 246.82877629, 324.48823631],
                [1070.92080733, 527.41599474, 913.93600561],
                [676.57753460, 329.48235976, 509.56020035],
                [1353.12934453, 1048.28092139, 1227.42851889],
                [248.56120754, 78.30056642, 137.39216268],
                [675.76876164, 381.60749713, 545.08703142],
                [1008.57884369, 704.64042514, 836.94311729],
                [1207.19931876, 527.74482440, 737.30284625],
                [1157.60714894, 736.24734736, 846.01278626],
                [861.62204402, 714.70913295, 747.29294390],
                [255.83324360, 94.08214754, 147.60127564],
                [1522.93390177, 1017.14491217, 1073.23488749],
                [460.59077351, 93.73852735, 210.75844436],
                [909.87331348, 498.83253656, 750.09672276],
            ]),
            decimal=7,
        )

        np.testing.assert_almost_equal(
            RGB_w, np.array([2.34141541, 1.00000000, 1.51633759]), decimal=7)

        training_data = sds_and_msds_to_msds(
            SDS_COLOURCHECKERS["BabelColor Average"].values())
        RGB, RGB_w = training_data_sds_to_RGB(training_data,
                                              MSDS_CANON_EOS_5DMARK_II,
                                              SDS_ILLUMINANTS["D55"])
        np.testing.assert_almost_equal(
            RGB,
            np.array([
                [263.80361607, 170.29412869, 132.71463416],
                [884.07936328, 628.44083126, 520.43504675],
                [324.17856150, 443.95092266, 606.43750890],
                [243.82059773, 253.22111395, 144.98600653],
                [481.54199203, 527.96925768, 764.50624747],
                [628.07015143, 979.73104655, 896.85237907],
                [927.63600544, 391.11468312, 150.73047156],
                [203.13259862, 317.65395368, 639.54581080],
                [686.28955864, 260.78688114, 254.89963998],
                [174.05857536, 132.16684952, 230.54054095],
                [806.50094411, 817.35481419, 312.91902292],
                [1111.20280010, 608.82554576, 194.31984092],
                [94.99792206, 185.04148229, 456.53592437],
                [340.60457483, 498.62910631, 254.08356415],
                [531.53679194, 136.11844274, 109.19876416],
                [1387.37113491, 952.84382040, 286.23152122],
                [681.97933172, 326.66634506, 526.23078660],
                [244.90739217, 554.88866566, 741.21522946],
                [1841.80020583, 1834.49277300, 1784.07500285],
                [1179.76201558, 1189.84138939, 1182.25520674],
                [720.27089899, 726.91855632, 724.84766858],
                [382.16849234, 387.41521539, 386.87510339],
                [178.43859184, 181.76108810, 182.71062184],
                [64.77754952, 64.80020759, 65.45515287],
            ]),
            decimal=7,
        )

        np.testing.assert_almost_equal(
            RGB_w, np.array([2.34141541, 1.00000000, 1.51633759]), decimal=7)
Beispiel #9
0
    "TestGenerateIlluminantsRawtoacesV1",
    "TestWhiteBalanceMultipliers",
    "TestBestIlluminant",
    "TestNormaliseIlluminant",
    "TestTrainingDataSdsToRGB",
    "TestTrainingDataSdsToXYZ",
    "TestOptimizationFactoryRawtoacesV1",
    "TestOptimizationFactoryJzazbz",
    "TestMatrixIdt",
    "TestCamera_RGB_to_ACES2065_1",
]

MSDS_CANON_EOS_5DMARK_II: MultiSpectralDistributions = sds_and_msds_to_msds(
    list(
        read_sds_from_csv_file(
            os.path.join(
                RESOURCES_DIRECTORY_RAWTOACES,
                "CANON_EOS_5DMark_II_RGB_Sensitivities.csv",
            )).values()))

SD_AMPAS_ISO7589_STUDIO_TUNGSTEN: SpectralDistribution = (
    read_sds_from_csv_file(
        os.path.join(RESOURCES_DIRECTORY_RAWTOACES,
                     "AMPAS_ISO_7589_Tungsten.csv"))["iso7589"])


class TestSpectralToAcesRelativeExposureValues(unittest.TestCase):
    """
    Define :func:`colour.characterisation.aces_it.\
sd_to_aces_relative_exposure_values` definition unit tests methods.
    """
Beispiel #10
0
    def test_matrix_idt(self):
        """
        Tests :func:`colour.characterisation.aces_it.matrix_idt`
        definition.
        """

        # The *RAW to ACES* v1 matrix for the same camera and optimized by
        # `Ceres Solver <http://ceres-solver.org/>`__ is as follows:
        #
        # 0.864994 -0.026302 0.161308
        # 0.056527 1.122997 -0.179524
        # 0.023683 -0.202547 1.178864
        np.testing.assert_allclose(matrix_idt(MSDS_CANON_EOS_5DMARK_II,
                                              SDS_ILLUMINANTS['D55']),
                                   np.array([
                                       [0.84993207, -0.01605594, 0.15143504],
                                       [0.05090392, 1.12559930, -0.18498249],
                                       [0.02006825, -0.19445149, 1.16206549],
                                   ]),
                                   rtol=0.0001,
                                   atol=0.0001)

        # The *RAW to ACES* v1 matrix for the same camera and optimized by
        # `Ceres Solver <http://ceres-solver.org/>`__ is as follows:
        #
        # 0.888492 -0.077505 0.189014
        # 0.021805 1.066614 -0.088418
        # -0.019718 -0.206664 1.226381
        np.testing.assert_allclose(matrix_idt(
            MSDS_CANON_EOS_5DMARK_II, SD_AMPAS_ISO7589_STUDIO_TUNGSTEN),
                                   np.array([
                                       [0.85895300, -0.04381920, 0.15978620],
                                       [0.01024800, 1.08825364, -0.11392229],
                                       [-0.02327674, -0.18044292, 1.15903609],
                                   ]),
                                   rtol=0.0001,
                                   atol=0.0001)

        np.testing.assert_allclose(matrix_idt(
            MSDS_CANON_EOS_5DMARK_II,
            SDS_ILLUMINANTS['D55'],
            optimisation_factory=optimisation_factory_JzAzBz),
                                   np.array([
                                       [0.84841492, -0.01569765, 0.15799332],
                                       [0.05333075, 1.11428542, -0.17523500],
                                       [0.02262287, -0.22527728, 1.19646895],
                                   ]),
                                   rtol=0.0001,
                                   atol=0.0001)

        np.testing.assert_allclose(matrix_idt(
            MSDS_CANON_EOS_5DMARK_II,
            SDS_ILLUMINANTS['D55'],
            optimisation_kwargs={'method': 'Nelder-Mead'}),
                                   np.array([
                                       [0.71327381, 0.19213397, 0.11115511],
                                       [-0.05788252, 1.31165598, -0.21730625],
                                       [-0.05913103, -0.02787107, 1.10737947],
                                   ]),
                                   rtol=0.0001,
                                   atol=0.0001)

        training_data = sds_and_msds_to_msds(
            SDS_COLOURCHECKERS['BabelColor Average'].values())

        np.testing.assert_allclose(matrix_idt(
            MSDS_CAMERA_SENSITIVITIES['Nikon 5100 (NPL)'].copy().align(
                SpectralShape(400, 700, 10)),
            SD_AMPAS_ISO7589_STUDIO_TUNGSTEN,
            training_data=training_data),
                                   np.array([
                                       [0.74041064, 0.10951105, 0.11963256],
                                       [-0.00467360, 1.09238438, -0.11398966],
                                       [0.06728533, -0.29530438, 1.18589793],
                                   ]),
                                   rtol=0.0001,
                                   atol=0.0001)
Beispiel #11
0
__maintainer__ = 'Colour Developers'
__email__ = '*****@*****.**'
__status__ = 'Production'

__all__ = [
    'MSDS_CANON_EOS_5DMARK_II', 'SD_AMPAS_ISO7589_STUDIO_TUNGSTEN',
    'TestSpectralToAcesRelativeExposureValues',
    'TestReadTrainingDataRawtoacesV1', 'TestGenerateIlluminantsRawtoacesV1',
    'TestWhiteBalanceMultipliers', 'TestBestIlluminant',
    'TestNormaliseIlluminant', 'TestTrainingDataSdsToRGB',
    'TestTrainingDataSdsToXYZ', 'TestOptimizationFactoryRawtoacesV1',
    'TestOptimizationFactoryJzAzBz', 'TestMatrixIdt'
]

MSDS_CANON_EOS_5DMARK_II = sds_and_msds_to_msds(
    read_sds_from_csv_file(
        os.path.join(RESOURCES_DIRECTORY_RAWTOACES,
                     'CANON_EOS_5DMark_II_RGB_Sensitivities.csv')).values())

SD_AMPAS_ISO7589_STUDIO_TUNGSTEN = read_sds_from_csv_file(
    os.path.join(RESOURCES_DIRECTORY_RAWTOACES,
                 'AMPAS_ISO_7589_Tungsten.csv'))['iso7589']


class TestSpectralToAcesRelativeExposureValues(unittest.TestCase):
    """
    Defines :func:`colour.characterisation.aces_it.\
sd_to_aces_relative_exposure_values` definition unit tests methods.
    """
    def test_spectral_to_aces_relative_exposure_values(self):
        """
        Tests :func:`colour.characterisation.aces_it.
Beispiel #12
0
def spectral_uniformity(
    sds: Union[
        List[Union[SpectralDistribution, MultiSpectralDistributions]],
        MultiSpectralDistributions,
    ],
    use_second_order_derivatives: Boolean = False,
) -> NDArray:
    """
    Compute the *spectral uniformity* (or *spectral flatness*) of given
    spectral distributions.

    Spectral uniformity :math:`(r')^2` is computed as follows:

    :math:`mean((r'_1)^2, (r'_2)^2, ..., (r'_n)^2)`

    where :math:`(r'_i)^2` is the first-order derivative, squared, of the
    reflectance :math:`r_i` of a test sample.

    Parameters
    ----------
    sds
        Spectral distributions or multi-spectral distributions to
        compute the spectral uniformity of. `sds` can be a single
        :class:`colour.MultiSpectralDistributions` class instance, a list
        of :class:`colour.MultiSpectralDistributions` class instances or a
        list of :class:`colour.SpectralDistribution` class instances.
    use_second_order_derivatives
        Whether to use the second-order derivatives in the computations.

    Returns
    -------
    :class:`numpy.ndarray`
        Spectral uniformity.

    Warnings
    --------
    The spectral distributions must have the same spectral shape.

    References
    ----------
    :cite:`David2015a`

    Examples
    --------
    >>> from colour.quality.datasets import SDS_TCS
    >>> spectral_uniformity(SDS_TCS.values())  # doctest: +ELLIPSIS
    array([  9.5514285...e-06,   1.1482142...e-05,   1.8784285...e-05,
             2.8711428...e-05,   3.1971428...e-05,   3.2342857...e-05,
             3.3850000...e-05,   3.9925714...e-05,   4.1333571...e-05,
             2.4002142...e-05,   5.7621428...e-06,   1.4757142...e-06,
             9.7928571...e-07,   2.0057142...e-06,   3.7157142...e-06,
             5.7678571...e-06,   7.5557142...e-06,   7.4635714...e-06,
             5.7492857...e-06,   3.8692857...e-06,   3.5407142...e-06,
             4.4742857...e-06,   5.6435714...e-06,   7.6371428...e-06,
             1.0171428...e-05,   1.2254285...e-05,   1.4810000...e-05,
             1.6517142...e-05,   1.5430714...e-05,   1.4536428...e-05,
             1.4037857...e-05,   1.1587857...e-05,   1.0743571...e-05,
             1.0979285...e-05,   1.0398571...e-05,   8.2971428...e-06,
             6.3057142...e-06,   5.0942857...e-06,   4.8500000...e-06,
             5.5371428...e-06,   6.4128571...e-06,   7.2592857...e-06,
             7.7750000...e-06,   7.1607142...e-06,   6.6635714...e-06,
             6.7328571...e-06,   7.5307142...e-06,   1.0733571...e-05,
             1.6234285...e-05,   2.2570714...e-05,   2.7056428...e-05,
             2.7781428...e-05,   2.5025714...e-05,   1.7966428...e-05,
             1.0505000...e-05,   5.9657142...e-06,   3.6421428...e-06,
             2.1664285...e-06,   1.2935714...e-06,   8.3642857...e-07,
             7.2500000...e-07,   6.3928571...e-07,   6.6285714...e-07,
             8.5571428...e-07,   1.4507142...e-06,   2.2542857...e-06,
             3.4142857...e-06,   4.9864285...e-06,   6.4907142...e-06,
             7.8928571...e-06,   9.1664285...e-06,   9.9521428...e-06,
             9.7664285...e-06,   9.3150000...e-06,   8.9092857...e-06,
             8.1578571...e-06,   6.8935714...e-06,   5.5721428...e-06,
             4.4592857...e-06,   3.4778571...e-06,   2.7650000...e-06,
             2.3114285...e-06,   1.7092857...e-06,   1.1771428...e-06,
             9.8428571...e-07,   8.8285714...e-07,   7.4142857...e-07,
             7.0142857...e-07,   7.0857142...e-07,   6.6642857...e-07,
             7.5928571...e-07,   8.7000000...e-07,   8.2714285...e-07,
             7.1714285...e-07,   6.6000000...e-07])
    """

    msds = sds_and_msds_to_msds(sds)

    interval = msds.shape.interval

    r_i = np.gradient(np.transpose(msds.values), axis=1) / interval

    if use_second_order_derivatives:
        r_i = np.gradient(r_i, axis=1) / interval

    return np.mean(r_i**2, axis=0)