#include "colorimetric_data.h" /* Definition of some reference spectral distribution of energy sampled at 10nm from 380 to 780nm. Available at : https://www.rit.edu/cos/colorscience/rc_useful_data.php web.archive.org/web/20121110112552/http://www.cis.rit.edu/research/mcsl2/online/cie.php */ /* CIE (1931) 2-deg color matching functions and standard illuminants */ float cie_x_bar[] = { 0.001368, 0.004243, 0.01431, 0.04351, 0.13438, 0.2839, 0.34828, 0.3362, 0.2908, 0.19536, 0.09564, 0.03201, 0.0049, 0.0093, 0.06327, 0.1655, 0.2904, 0.4334499, 0.5945, 0.7621, 0.9163, 1.0263, 1.0622, 1.0026, 0.8544499, 0.6424, 0.4479, 0.2835, 0.1649, 0.0874, 0.04677, 0.0227, 0.01135916, 0.005790346, 0.002899327, 0.001439971, 0.0006900786, 0.0003323011, 0.0001661505, 8.307527E-05, 4.150994E-05 }; float cie_y_bar[] = { 3.9E-05, 0.00012, 0.000396, 0.00121, 0.004, 0.0116, 0.023, 0.038, 0.06, 0.09098, 0.13902, 0.20802, 0.323, 0.503, 0.71, 0.862, 0.954, 0.9949501, 0.995, 0.952, 0.87, 0.757, 0.631, 0.503, 0.381, 0.265, 0.175, 0.107, 0.061, 0.032, 0.017, 0.00821, 0.004102, 0.002091, 0.001047, 0.00052, 0.0002492, 0.00012, 6E-05, 3E-05, 1.499E-05 }; float cie_z_bar[] = { 0.006450001, 0.02005001, 0.06785001, 0.2074, 0.6456, 1.3856, 1.74706, 1.77211, 1.6692, 1.28764, 0.8129501, 0.46518, 0.272, 0.1582, 0.07824999, 0.04216, 0.0203, 0.008749999, 0.0039, 0.0021, 0.001650001, 0.0011, 0.0008, 0.00034, 0.00019, 4.999999E-05, 2E-05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; float cie_d65[] = { .499755, .546482, .827549, .91486, .934318, .866823, 1.04865, 1.17008, 1.17812, 1.14861, 1.15923, 1.08811, 1.09354, 1.07802, 1.0479, 1.07689, 1.04405, 1.04046, 1.000, .963342, .95788, .886856, .900062, .895991, .876987, .832886, .836992, .800268, .802146, .822778, .782842, .697213, .716091, .74349, .61604, .698856, .75087, .635927, .464182, .668054, .633828 }; float cie_a[] = { .097951, .120853, .14708, .176753, .20995, .246709, .287027, .330859, .378121, .428693, .482423, .539132, .598611, .660635, .724959, .791326, .85947, .92912, 1.000, 1.07184, 1.14436, 1.21731, 1.29043, 1.36346, 1.43618, 1.50836, 1.57979, 1.65028, 1.71963, 1.78769, 1.85429, 1.91931, 1.98261, 2.04409, 2.10365, 2.1612, 2.21667, 2.270, 2.32115, 2.37008, 2.41675 }; /* Neutral source (without effect) */ float neutral_source[] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; /* Reflectance functions of color Gretag Macbeth color checker patches */ float gmcc_01_dark_skin[] = { 0.048, 0.055, 0.065, 0.068, 0.064, 0.059, 0.055, 0.053, 0.052, 0.052, 0.054, 0.057, 0.061, 0.065, 0.070, 0.074, 0.076, 0.079, 0.087, 0.100, 0.115, 0.129, 0.138, 0.146, 0.154, 0.163, 0.173, 0.188, 0.204, 0.222, 0.242, 0.261, 0.282, 0.305, 0.334, 0.372, 0.409, 0.436, 0.462, 0.448, 0.421 }; float gmcc_02_light_skin[] = { 0.103, 0.141, 0.182, 0.197, 0.201, 0.205, 0.212, 0.224, 0.240, 0.262, 0.282, 0.293, 0.301, 0.321, 0.322, 0.298, 0.292, 0.300, 0.295, 0.305, 0.358, 0.435, 0.494, 0.530, 0.550, 0.564, 0.574, 0.590, 0.605, 0.624, 0.652, 0.682, 0.713, 0.745, 0.762, 0.783, 0.791, 0.789, 0.801, 0.771, 0.734 }; float gmcc_03_blue_sky[] = { 0.113, 0.174, 0.266, 0.320, 0.336, 0.337, 0.335, 0.331, 0.322, 0.310, 0.293, 0.276, 0.260, 0.243, 0.225, 0.208, 0.198, 0.191, 0.183, 0.172, 0.163, 0.157, 0.150, 0.144, 0.137, 0.130, 0.123, 0.118, 0.112, 0.108, 0.105, 0.104, 0.103, 0.102, 0.102, 0.102, 0.104, 0.104, 0.106, 0.110, 0.120 }; float gmcc_04_foliage[] = { 0.048, 0.049, 0.050, 0.049, 0.050, 0.052, 0.054, 0.058, 0.061, 0.064, 0.067, 0.070, 0.078, 0.106, 0.155, 0.181, 0.177, 0.157, 0.137, 0.126, 0.122, 0.115, 0.104, 0.098, 0.098, 0.100, 0.097, 0.095, 0.095, 0.101, 0.125, 0.174, 0.247, 0.311, 0.343, 0.358, 0.364, 0.362, 0.368, 0.355, 0.341 }; float gmcc_05_blue_flower[] = { 0.123, 0.197, 0.328, 0.418, 0.446, 0.448, 0.444, 0.434, 0.421, 0.405, 0.381, 0.362, 0.342, 0.314, 0.271, 0.231, 0.211, 0.209, 0.201, 0.196, 0.206, 0.223, 0.235, 0.245, 0.243, 0.247, 0.269, 0.318, 0.384, 0.446, 0.490, 0.511, 0.520, 0.523, 0.521, 0.522, 0.521, 0.514, 0.517, 0.500, 0.487 }; float gmcc_06_bluish_green[] = { 0.110, 0.167, 0.252, 0.303, 0.322, 0.336, 0.353, 0.375, 0.408, 0.460, 0.523, 0.566, 0.582, 0.580, 0.569, 0.549, 0.519, 0.480, 0.436, 0.392, 0.346, 0.302, 0.260, 0.234, 0.221, 0.215, 0.210, 0.208, 0.211, 0.220, 0.233, 0.244, 0.252, 0.250, 0.244, 0.245, 0.260, 0.278, 0.297, 0.297, 0.296 }; float gmcc_07_orange[] = { 0.053, 0.054, 0.054, 0.053, 0.052, 0.052, 0.052, 0.052, 0.052, 0.053, 0.055, 0.057, 0.061, 0.068, 0.086, 0.120, 0.170, 0.228, 0.297, 0.380, 0.452, 0.503, 0.532, 0.552, 0.566, 0.578, 0.587, 0.599, 0.604, 0.608, 0.615, 0.622, 0.628, 0.633, 0.633, 0.637, 0.638, 0.633, 0.641, 0.616, 0.582 }; float gmcc_08_purplish_blue[] = { 0.099, 0.150, 0.231, 0.293, 0.324, 0.348, 0.373, 0.387, 0.374, 0.345, 0.301, 0.247, 0.202, 0.167, 0.137, 0.116, 0.106, 0.099, 0.090, 0.083, 0.083, 0.086, 0.087, 0.085, 0.084, 0.088, 0.098, 0.111, 0.123, 0.126, 0.120, 0.115, 0.116, 0.120, 0.128, 0.139, 0.162, 0.197, 0.242, 0.275, 0.316 }; float gmcc_09_moderated_red[] = { 0.096, 0.123, 0.144, 0.144, 0.138, 0.132, 0.131, 0.129, 0.126, 0.125, 0.119, 0.109, 0.103, 0.100, 0.094, 0.089, 0.092, 0.102, 0.108, 0.112, 0.157, 0.274, 0.415, 0.517, 0.567, 0.591, 0.601, 0.607, 0.607, 0.605, 0.605, 0.605, 0.606, 0.602, 0.599, 0.596, 0.593, 0.584, 0.586, 0.566, 0.540 }; float gmcc_10_purple[] = { 0.101, 0.135, 0.177, 0.199, 0.206, 0.190, 0.168, 0.144, 0.120, 0.101, 0.086, 0.075, 0.067, 0.061, 0.058, 0.054, 0.052, 0.053, 0.055, 0.054, 0.052, 0.053, 0.059, 0.074, 0.099, 0.126, 0.149, 0.172, 0.193, 0.217, 0.248, 0.282, 0.319, 0.355, 0.388, 0.422, 0.451, 0.471, 0.492, 0.482, 0.467 }; float gmcc_11_yellow_green[] = { 0.056, 0.059, 0.060, 0.061, 0.062, 0.064, 0.068, 0.075, 0.085, 0.104, 0.135, 0.185, 0.269, 0.384, 0.484, 0.534, 0.545, 0.533, 0.513, 0.487, 0.454, 0.416, 0.374, 0.346, 0.331, 0.325, 0.320, 0.319, 0.324, 0.337, 0.354, 0.368, 0.379, 0.379, 0.373, 0.375, 0.392, 0.412, 0.433, 0.426, 0.404 }; float gmcc_12_orange_yellow[] = { 0.060, 0.063, 0.065, 0.064, 0.064, 0.064, 0.065, 0.067, 0.069, 0.077, 0.092, 0.107, 0.123, 0.146, 0.193, 0.273, 0.374, 0.456, 0.512, 0.554, 0.584, 0.609, 0.624, 0.635, 0.645, 0.654, 0.662, 0.672, 0.676, 0.678, 0.685, 0.690, 0.696, 0.698, 0.698, 0.701, 0.701, 0.694, 0.700, 0.673, 0.639 }; float gmcc_13_blue[] = { 0.069, 0.096, 0.136, 0.175, 0.208, 0.244, 0.290, 0.335, 0.338, 0.302, 0.239, 0.172, 0.120, 0.086, 0.066, 0.054, 0.048, 0.045, 0.043, 0.041, 0.040, 0.040, 0.039, 0.040, 0.040, 0.041, 0.042, 0.042, 0.043, 0.044, 0.044, 0.045, 0.048, 0.051, 0.056, 0.064, 0.079, 0.104, 0.138, 0.168, 0.204 }; float gmcc_14_green[] = { 0.055, 0.057, 0.058, 0.059, 0.059, 0.062, 0.065, 0.070, 0.078, 0.091, 0.113, 0.140, 0.180, 0.244, 0.324, 0.363, 0.355, 0.323, 0.281, 0.238, 0.196, 0.158, 0.124, 0.101, 0.089, 0.084, 0.080, 0.077, 0.075, 0.075, 0.078, 0.082, 0.088, 0.089, 0.090, 0.089, 0.094, 0.102, 0.110, 0.112, 0.112 }; float gmcc_15_red[] = { 0.052, 0.052, 0.051, 0.050, 0.049, 0.049, 0.049, 0.049, 0.048, 0.047, 0.045, 0.044, 0.044, 0.044, 0.044, 0.044, 0.045, 0.047, 0.050, 0.057, 0.072, 0.109, 0.192, 0.332, 0.486, 0.598, 0.654, 0.686, 0.700, 0.707, 0.718, 0.724, 0.729, 0.730, 0.727, 0.729, 0.727, 0.721, 0.728, 0.702, 0.664 }; float gmcc_16_yellow[] = { 0.054, 0.054, 0.053, 0.053, 0.052, 0.053, 0.053, 0.055, 0.059, 0.075, 0.121, 0.202, 0.303, 0.394, 0.475, 0.544, 0.597, 0.630, 0.660, 0.686, 0.708, 0.726, 0.737, 0.746, 0.753, 0.761, 0.768, 0.777, 0.780, 0.781, 0.785, 0.787, 0.792, 0.793, 0.790, 0.792, 0.787, 0.778, 0.782, 0.752, 0.710 }; float gmcc_17_magenta[] = { 0.118, 0.179, 0.283, 0.343, 0.359, 0.350, 0.327, 0.298, 0.267, 0.239, 0.209, 0.182, 0.163, 0.146, 0.124, 0.106, 0.102, 0.107, 0.106, 0.112, 0.141, 0.198, 0.279, 0.394, 0.522, 0.628, 0.696, 0.742, 0.766, 0.780, 0.791, 0.798, 0.804, 0.807, 0.807, 0.813, 0.813, 0.808, 0.814, 0.785, 0.752 }; float gmcc_18_cyan[] = { 0.093, 0.134, 0.195, 0.238, 0.258, 0.281, 0.315, 0.352, 0.391, 0.434, 0.458, 0.457, 0.433, 0.392, 0.339, 0.282, 0.228, 0.180, 0.141, 0.114, 0.097, 0.088, 0.080, 0.075, 0.073, 0.073, 0.073, 0.074, 0.076, 0.077, 0.075, 0.074, 0.072, 0.071, 0.075, 0.082, 0.100, 0.133, 0.176, 0.200, 0.214 }; float gmcc_19_white[] = { 0.153, 0.245, 0.409, 0.671, 0.840, 0.878, 0.883, 0.886, 0.887, 0.888, 0.888, 0.888, 0.887, 0.887, 0.887, 0.887, 0.887, 0.886, 0.887, 0.888, 0.887, 0.886, 0.887, 0.889, 0.891, 0.891, 0.890, 0.889, 0.889, 0.888, 0.888, 0.888, 0.888, 0.886, 0.886, 0.885, 0.884, 0.883, 0.882, 0.880, 0.879 }; float gmcc_20_neutral_8[] = { 0.150, 0.235, 0.372, 0.529, 0.580, 0.585, 0.587, 0.588, 0.586, 0.583, 0.581, 0.580, 0.580, 0.580, 0.581, 0.582, 0.583, 0.583, 0.584, 0.586, 0.588, 0.588, 0.588, 0.586, 0.585, 0.583, 0.580, 0.578, 0.576, 0.574, 0.572, 0.570, 0.568, 0.566, 0.564, 0.562, 0.560, 0.557, 0.555, 0.553, 0.550 }; float gmcc_21_neutral_6_5[] = { 0.138, 0.206, 0.289, 0.346, 0.357, 0.359, 0.361, 0.362, 0.361, 0.358, 0.357, 0.356, 0.356, 0.356, 0.357, 0.357, 0.358, 0.358, 0.359, 0.360, 0.361, 0.361, 0.360, 0.359, 0.357, 0.355, 0.353, 0.351, 0.349, 0.346, 0.345, 0.343, 0.341, 0.339, 0.337, 0.335, 0.333, 0.331, 0.329, 0.327, 0.325 }; float gmcc_22_neutral_5[] = { 0.113, 0.150, 0.183, 0.199, 0.202, 0.203, 0.205, 0.205, 0.204, 0.203, 0.202, 0.202, 0.202, 0.202, 0.202, 0.203, 0.203, 0.203, 0.203, 0.204, 0.205, 0.205, 0.204, 0.204, 0.203, 0.201, 0.200, 0.198, 0.197, 0.196, 0.195, 0.194, 0.192, 0.191, 0.190, 0.189, 0.188, 0.187, 0.185, 0.184, 0.183 }; float gmcc_23_neutral_3_5[] = { 0.074, 0.084, 0.091, 0.094, 0.094, 0.094, 0.095, 0.095, 0.094, 0.094, 0.093, 0.093, 0.092, 0.093, 0.093, 0.093, 0.093, 0.093, 0.093, 0.093, 0.093, 0.093, 0.092, 0.092, 0.091, 0.090, 0.090, 0.089, 0.089, 0.088, 0.087, 0.087, 0.086, 0.086, 0.085, 0.085, 0.085, 0.084, 0.084, 0.083, 0.083 }; float gmcc_24_black[] = { 0.032, 0.033, 0.035, 0.036, 0.036, 0.036, 0.035, 0.035, 0.035, 0.035, 0.034, 0.034, 0.034, 0.034, 0.034, 0.034, 0.034, 0.034, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.032, 0.032, 0.032, 0.032, 0.032, 0.032, 0.032, 0.032, 0.032, 0.032 }; float *gmcc_list[] = { gmcc_01_dark_skin, gmcc_02_light_skin, gmcc_03_blue_sky, gmcc_04_foliage, gmcc_05_blue_flower, gmcc_06_bluish_green, gmcc_07_orange, gmcc_08_purplish_blue, gmcc_09_moderated_red, gmcc_10_purple, gmcc_11_yellow_green, gmcc_12_orange_yellow, gmcc_13_blue, gmcc_14_green, gmcc_15_red, gmcc_16_yellow, gmcc_17_magenta, gmcc_18_cyan, gmcc_19_white, gmcc_20_neutral_8, gmcc_21_neutral_6_5, gmcc_22_neutral_5, gmcc_23_neutral_3_5, gmcc_24_black, };