diff options
Diffstat (limited to 'test_coverage.py')
-rw-r--r-- | test_coverage.py | 104 |
1 files changed, 51 insertions, 53 deletions
diff --git a/test_coverage.py b/test_coverage.py index ee519f4..de2d8a2 100644 --- a/test_coverage.py +++ b/test_coverage.py @@ -7,69 +7,67 @@ from gsoc_common import model_sd, D65, D65_xy, plot_comparison # Solve for a specific RGB color def optimize_RGB(linear_RGB, coeffs_0): - RGB = eotf_inverse_sRGB(linear_RGB) - XYZ = sRGB_to_XYZ(RGB, D65_xy) - - coeffs, error = coefficients_Jakob2019( - XYZ, - dimensionalise=False, - coefficients_0=coeffs_0 - ) - - if error > 1e-6: - with open("out/bad.txt", "a") as fd: - fd.write("\n") - fd.write("linear_RGB=%s\n" % linear_RGB) - fd.write("XYZ=%s\n" % XYZ) - fd.write("coeffs_0=%s\n" % coeffs_0) - fd.write("coeffs=%s, error=%g\n" % (coeffs, error)) - - # A low budget graph to quickly see what's going on - log_error = np.log10(error) - bars = "|" * max(0, int(5 * (log_error + 9))) - - print("%12.5g %12.5g %12.5g %5.3f %s" % (*XYZ, log_error, bars)) - return coeffs + coeffs, error = coefficients_Jakob2019( + linear_RGB, + RGB_COLOURSPACES["sRGB"], + dimensionalise=False, + coefficients_0=coeffs_0 + ) + + if error > 1e-6: + with open("out/bad.txt", "a") as fd: + fd.write("\n") + fd.write("linear_RGB=%s\n" % linear_RGB) + fd.write("XYZ=%s\n" % XYZ) + fd.write("coeffs_0=%s\n" % coeffs_0) + fd.write("coeffs=%s, error=%g\n" % (coeffs, error)) + + # A low budget graph to quickly see what's going on + log_error = np.log10(error) + bars = "|" * max(0, int(5 * (log_error + 9))) + + print("%12.5g %12.5g %12.5g %5.3f %s" % (*linear_RGB, log_error, bars)) + return coeffs # Solve for all lightness values of a fully saturated RGB color def optimize_chromaticity(linear_RGB): - # alpha's aren't spaced equally (see the article) - def smoothstep(x): - return x**2 * (3 - 2 * x) + # alpha's aren't spaced equally (see the article) + def smoothstep(x): + return x**2 * (3 - 2 * x) - steps = np.arange(0, LIGHTNESS_STEPS) - alphas = smoothstep(smoothstep(steps / LIGHTNESS_STEPS)) + steps = np.arange(0, LIGHTNESS_STEPS) + alphas = smoothstep(smoothstep(steps / LIGHTNESS_STEPS)) - i_mid = LIGHTNESS_STEPS // 5 - coeffs_mid = optimize_RGB(linear_RGB * alphas[i_mid], (0, 0, 0)) + i_mid = LIGHTNESS_STEPS // 5 + coeffs_mid = optimize_RGB(linear_RGB * alphas[i_mid], (0, 0, 0)) - coeffs_0 = coeffs_mid - for i in range(i_mid + 1, LIGHTNESS_STEPS): - coeffs_0 = optimize_RGB(linear_RGB * alphas[i], coeffs_0) + coeffs_0 = coeffs_mid + for i in range(i_mid + 1, LIGHTNESS_STEPS): + coeffs_0 = optimize_RGB(linear_RGB * alphas[i], coeffs_0) - coeffs_0 = coeffs_mid - for i in reversed(range(0, i_mid)): - coeffs_0 = optimize_RGB(linear_RGB * alphas[i], coeffs_0) + coeffs_0 = coeffs_mid + for i in reversed(range(0, i_mid)): + coeffs_0 = optimize_RGB(linear_RGB * alphas[i], coeffs_0) # This program runs XYZ_to_sd_Jakob2019 converges on a large number of inputs, # covering an entire RGB gamut, to see if it'll diverge somewhere. if __name__ == "__main__": - CHROMA_STEPS = 8 - LIGHTNESS_STEPS = 64 - - with open("out/bad.txt", "w") as fd: - fd.write("Going through %dx%dx%d cubes\n" - % (LIGHTNESS_STEPS, CHROMA_STEPS, CHROMA_STEPS)) - - args = [] - for A in np.linspace(0, 1, CHROMA_STEPS): - for B in np.linspace(0, 1, CHROMA_STEPS): - for RGB in [np.array([1, A, B]), - np.array([A, 1, B]), - np.array([A, B, 1])]: - args.append(RGB) - - pool = multiprocessing.Pool() - pool.map(optimize_chromaticity, args) + CHROMA_STEPS = 8 + LIGHTNESS_STEPS = 64 + + with open("out/bad.txt", "w") as fd: + fd.write("Going through %dx%dx%d cubes\n" + % (LIGHTNESS_STEPS, CHROMA_STEPS, CHROMA_STEPS)) + + args = [] + for A in np.linspace(0, 1, CHROMA_STEPS): + for B in np.linspace(0, 1, CHROMA_STEPS): + for RGB in [np.array([1, A, B]), + np.array([A, 1, B]), + np.array([A, B, 1])]: + args.append(RGB) + + pool = multiprocessing.Pool() + pool.map(optimize_chromaticity, args) |