|
| 1 | +import numpy as np |
| 2 | +import csv |
| 3 | +import matplotlib.pyplot as plt |
| 4 | +import colour.models as cm |
| 5 | +import skimage.color as sc |
| 6 | +import linConversions as conv |
| 7 | + |
| 8 | +SMALL_SIZE = 10*2 |
| 9 | +MEDIUM_SIZE = 12*2 |
| 10 | +BIGGER_SIZE = 14*2 |
| 11 | + |
| 12 | +plt.rcParams.update({"text.usetex": True,"font.family": "serif", |
| 13 | + "font.serif": ["Palatino"]}) # controls default text sizes |
| 14 | +plt.rc('axes', titlesize=MEDIUM_SIZE) # fontsize of the axes title |
| 15 | +plt.rc('axes', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels |
| 16 | +plt.rc('xtick', labelsize=SMALL_SIZE, direction='in') # fontsize of the tick labels |
| 17 | +plt.rc('ytick', labelsize=SMALL_SIZE, direction='in') # fontsize of the tick labels |
| 18 | +plt.rc('legend', fontsize=SMALL_SIZE) # legend fontsize |
| 19 | +plt.rc('figure', figsize='15, 6') # size of the figure, used to be '4, 3' in inches |
| 20 | + |
| 21 | +def diffPlot(source_lin, reference_lin, corrected_lin): |
| 22 | + source_XYZ = conv.lin_to_XYZ(source_lin) |
| 23 | + reference_XYZ = conv.lin_to_XYZ(reference_lin) |
| 24 | + corrected_XYZ = conv.lin_to_XYZ(corrected_lin) |
| 25 | + |
| 26 | + source_Lab = sc.xyz2lab(source_XYZ) |
| 27 | + reference_Lab = sc.xyz2lab(reference_XYZ) |
| 28 | + corrected_Lab = sc.xyz2lab(corrected_XYZ) |
| 29 | + |
| 30 | + dE00_source = sc.deltaE_ciede2000(source_Lab, reference_Lab) |
| 31 | + dE00_corrected = sc.deltaE_ciede2000(corrected_Lab, reference_Lab) |
| 32 | + |
| 33 | + diff_source_XYZ = np.sqrt(np.sum((source_XYZ - reference_XYZ)**2, axis=1))*100 |
| 34 | + diff_corrected_XYZ = np.sqrt(np.sum((corrected_XYZ - reference_XYZ)**2, axis=1))*100 |
| 35 | + |
| 36 | + diff_source_lin = np.sqrt(np.sum((np.array(source_lin)/255 - np.array(reference_lin)/255)**2, axis=1))*100 |
| 37 | + diff_corrected_lin = np.sqrt(np.sum((np.array(corrected_lin)/255 - np.array(reference_lin)/255)**2, axis=1))*100 |
| 38 | + |
| 39 | + x = np.arange(len(diff_source_XYZ))+1 |
| 40 | + width = 0.4 |
| 41 | + |
| 42 | + plt.figure() |
| 43 | + source_bar_XYZ = plt.bar(x - width/2, diff_source_XYZ, width, label='Source') |
| 44 | + corrected_bar_XYZ = plt.bar(x + width/2, diff_corrected_XYZ, width, label='Corrected') |
| 45 | + plt.title("Colour distance in XYZ-space") |
| 46 | + plt.xlabel("Patch") |
| 47 | + plt.ylabel("Distance") |
| 48 | + plt.ylim([0,np.max(np.concatenate([diff_source_XYZ,diff_corrected_XYZ]))+5]) |
| 49 | + plt.vlines(np.arange(5.5, len(diff_source_XYZ),6),0,140, color="red") |
| 50 | + plt.legend() |
| 51 | + plt.show() |
| 52 | + |
| 53 | + plt.figure() |
| 54 | + source_bar_RGB = plt.bar(x - width/2, diff_source_lin, width, label='Source') |
| 55 | + corrected_bar_RGB = plt.bar(x + width/2, diff_corrected_lin, width, label='Corrected') |
| 56 | + plt.title("Colour distance in RGB-space") |
| 57 | + plt.xlabel("Patch") |
| 58 | + plt.ylabel("Distance") |
| 59 | + plt.ylim([0,np.max(np.concatenate([diff_source_lin,diff_corrected_lin]))+5]) |
| 60 | + print() |
| 61 | + plt.vlines(np.arange(5.5, len(diff_source_lin),6),0,140, color="red") |
| 62 | + plt.legend() |
| 63 | + plt.show() |
| 64 | + |
| 65 | + plt.figure() |
| 66 | + source_bar_dE = plt.bar(x - width/2, dE00_source, width, label='Source') |
| 67 | + corrected_bar_dE = plt.bar(x + width/2, dE00_corrected, width, label='Corrected') |
| 68 | + plt.title("Colour difference in dE00") |
| 69 | + plt.xlabel("Patch") |
| 70 | + plt.ylabel("dE00") |
| 71 | + plt.xticks(np.arange(1,30.5,1)) |
| 72 | + plt.vlines(np.arange(0.5, len(dE00_corrected)+0.6,6),0,140, color="red") |
| 73 | + plt.ylim([0,np.max(np.concatenate([dE00_source,dE00_corrected]))+5]) |
| 74 | + plt.xlim(0.5,30.5) |
| 75 | + plt.legend() |
| 76 | + plt.savefig(r"figures\dE00.pdf") |
| 77 | + plt.show() |
| 78 | + |
| 79 | + source_err_XYZ = np.mean(diff_source_XYZ) |
| 80 | + corrected_err_XYZ =np.mean(diff_corrected_XYZ) |
| 81 | + |
| 82 | + source_err_lin = np.mean(diff_source_lin) |
| 83 | + corrected_err_lin =np.mean(diff_corrected_lin) |
| 84 | + |
| 85 | + dE00_source_avg = np.mean(dE00_source) |
| 86 | + dE00_corrected_avg = np.mean(dE00_corrected) |
| 87 | + return(source_err_XYZ,corrected_err_XYZ, source_err_lin,corrected_err_lin,dE00_source_avg,dE00_corrected_avg) |
| 88 | + |
| 89 | +def diffChart(reference_lin, corrected_lin, source_lin): |
| 90 | + ref_sRGB = conv.lin_to_sRGB(reference_lin) |
| 91 | + cor_sRGB = conv.lin_to_sRGB(corrected_lin) |
| 92 | + sou_sRGB = conv.lin_to_sRGB(source_lin) |
| 93 | + |
| 94 | + colours2 = np.array([ref_sRGB,cor_sRGB]) |
| 95 | + colours1 = np.array([ref_sRGB,sou_sRGB]) |
| 96 | + |
| 97 | + fig, axs = plt.subplots(nrows=2, sharex=True, figsize=(15,4)) |
| 98 | + axs[0].set_title('Colour comparisons') |
| 99 | + axs[0].imshow(colours1) |
| 100 | + axs[0].set_yticks([0,1]) |
| 101 | + axs[0].set_yticklabels(["reference","source"]) |
| 102 | + |
| 103 | + #axs[1].set_title('blue should be down') |
| 104 | + axs[1].imshow(colours2) |
| 105 | + axs[1].set_yticks([0,1]) |
| 106 | + axs[1].set_yticklabels(["reference","corrected"]) |
| 107 | + |
| 108 | + plt.xticks(np.arange(0,29.5,1),np.arange(1,30.5,1,dtype=int)) |
| 109 | + plt.xlabel("Patch number") |
| 110 | + plt.savefig(r"figures\difference_visualised.pdf") |
| 111 | + plt.show() |
| 112 | + |
0 commit comments