From 33278ad88f8290054aa2b421182019b9167f50ff Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Sun, 21 Jun 2020 18:41:07 +0200 Subject: Move the solver to Colour and update all tests --- test_diff.py | 69 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 34 insertions(+), 35 deletions(-) (limited to 'test_diff.py') diff --git a/test_diff.py b/test_diff.py index b634ca6..0ee5f58 100644 --- a/test_diff.py +++ b/test_diff.py @@ -1,51 +1,50 @@ import numpy as np from scipy.optimize import minimize from colour import * -from colour.colorimetry import STANDARD_OBSERVER_CMFS, ILLUMINANT_SDS -from colour.models import eotf_inverse_sRGB, sRGB_to_XYZ +from colour.recovery import error_function_Jakob2019 from matplotlib import pyplot as plt -from gsoc_common import plot_comparison, error_function, model_sd, D65_xy - -shape = SpectralShape(360, 830, 1) -cmfs = STANDARD_OBSERVER_CMFS["CIE 1931 2 Degree Standard Observer"].align(shape) - -illuminant = SpectralDistribution(ILLUMINANT_SDS["D65"]).align(shape) -illuminant_XYZ = sd_to_XYZ(illuminant) / 100 -wvl = np.linspace(0, 1, len(shape.range())) - -target = np.array([50, -20, 30]) # Some arbitrary Lab coordinates -xs = np.linspace(-10, 10, 500) -h = xs[1] - xs[0] +from gsoc_common import plot_comparison # This test checks if derivatives are calculated correctly by comparing them # to finite differences. -for c_index in range(3): - errors = np.empty(len(xs)) - derrors = np.empty(len(xs)) +if __name__ == "__main__": + shape = SpectralShape(360, 830, 1) + cmfs = STANDARD_OBSERVER_CMFS["CIE 1931 2 Degree Standard Observer"].align(shape) + + illuminant = SpectralDistribution(ILLUMINANT_SDS["D65"]).align(shape) + illuminant_XYZ = sd_to_XYZ(illuminant) / 100 + + target = np.array([50, -20, 30]) # Some arbitrary Lab colour + xs = np.linspace(-10, 10, 500) + h = xs[1] - xs[0] - for i, x in enumerate(xs): - c = np.array([1.0, 1, 1]) - c[c_index] = x + # Vary one coefficient at a time + for c_index in range(3): + errors = np.empty(len(xs)) + derrors = np.empty(len(xs)) - error, derror_dc = error_function( - c, target, wvl, cmfs, illuminant, illuminant_XYZ - ) + for i, x in enumerate(xs): + c = np.array([1.0, 1, 1]) + c[c_index] = x - errors[i] = error - derrors[i] = derror_dc[c_index] + error, derror_dc = error_function_Jakob2019( + c, target, shape, cmfs, illuminant, illuminant_XYZ + ) + errors[i] = error + derrors[i] = derror_dc[c_index] - plt.subplot(2, 3, 1 + c_index) - plt.xlabel("c%d" % c_index) - plt.ylabel("ΔE") - plt.plot(xs, errors) - plt.subplot(2, 3, 4 + c_index) - plt.xlabel("c%d" % c_index) - plt.ylabel("dΔE/dc%d" % c_index) + plt.subplot(2, 3, 1 + c_index) + plt.xlabel("c%d" % c_index) + plt.ylabel("ΔE") + plt.plot(xs, errors) - plt.plot(xs, derrors, "k-") - plt.plot(xs[:-1] + h / 2, np.diff(errors) / h, "r:") + plt.subplot(2, 3, 4 + c_index) + plt.xlabel("c%d" % c_index) + plt.ylabel("dΔE/dc%d" % c_index) + plt.plot(xs, derrors, "k-") + plt.plot(xs[:-1] + h / 2, np.diff(errors) / h, "r:") -plt.show() + plt.show() -- cgit