50 float L_ip = (Lab0[0] + Lab1[0]) * 0.5;
51 float C1 = sqrtf(Lab0[1] * Lab0[1] + Lab0[2] * Lab0[2]);
52 float C2 = sqrtf(Lab1[1] * Lab1[1] + Lab1[2] * Lab1[2]);
53 float C_i = (C1 + C2) * 0.5;
54 float G = (1.0 - sqrtf(powf(C_i, 7) / (powf(C_i, 7) + powf(25, 7)))) * 0.5;
55 float a1_p = Lab0[1] * (1 + G);
56 float a2_p = Lab1[1] * (1 + G);
57 float C1_p = sqrtf(a1_p * a1_p + Lab0[2] * Lab0[2]);
58 float C2_p = sqrtf(a2_p * a2_p + Lab1[2] * Lab1[2]);
59 float C_ip = (C1_p + C2_p) * 0.5;
60 float h1_p =
RAD2DEG(atan2f(Lab0[2], a1_p));
61 if(h1_p < 0) h1_p += 360.0;
62 float h2_p =
RAD2DEG(atan2f(Lab1[2], a2_p));
63 if(h2_p < 0) h2_p += 360.0;
65 if(fabsf(h1_p - h2_p) > 180.0)
66 H_ip = (h1_p + h2_p + 360.0) * 0.5;
68 H_ip = (h1_p + h2_p) * 0.5;
69 float T = 1.0 - 0.17 * cosf(
DEG2RAD(H_ip - 30.0)) + 0.24 * cosf(
DEG2RAD(2.0 * H_ip))
70 + 0.32 * cosf(
DEG2RAD(3.0 * H_ip + 6.0)) - 0.20 * cosf(
DEG2RAD(4.0 * H_ip - 63.0));
71 float dh_p = h2_p - h1_p;
72 if(fabsf(dh_p) > 180.0)
79 float dL_p = Lab1[0] - Lab0[0];
80 float dC_p = C2_p - C1_p;
81 float dH_p = 2.0 * sqrtf(C1_p * C2_p) * sinf(
DEG2RAD(dh_p * 0.5));
82 float SL = 1.0 + ((0.015 * (L_ip - 50.0) * (L_ip - 50.0)) / sqrtf(20.0 + (L_ip - 50.0) * (L_ip - 50.0)));
83 float SC = 1.0 + 0.045 * C_ip;
84 float SH = 1.0 + 0.015 * C_ip * T;
85 float dtheta = 30.0 * expf(-1.0 * ((H_ip - 275.0) / 25.0) * ((H_ip - 275.0) / 25.0));
86 float RC = 2.0 * sqrtf(powf(C_ip, 7) / (powf(C_ip, 7) + powf(25, 7)));
87 float RT = -1.0 * RC * sinf(
DEG2RAD(2.0 * dtheta));
92 float dE = sqrtf((dL_p / (KL * SL)) * (dL_p / (KL * SL)) + (dC_p / (KC * SC)) * (dC_p / (KC * SC))
93 + (dH_p / (KH * SH)) * (dH_p / (KH * SH)) + RT * (dC_p / (KC * SC)) * (dH_p / (KH * SH)));