755 lines
22 KiB
C
755 lines
22 KiB
C
|
|
/*
|
|
* International Color Consortium color transform expanded support
|
|
*
|
|
* Author: Graeme W. Gill
|
|
* Date: 8/5/2002
|
|
* Version: 1.00
|
|
*
|
|
* Copyright 2002 Graeme W. Gill
|
|
* All rights reserved.
|
|
* This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :-
|
|
* see the License.txt file for licencing details.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* This is some test code to test the FWA compensation
|
|
* feature of the spectal to CIE conversion.
|
|
*
|
|
*/
|
|
|
|
#define FILTERED_D65 /* Use Spectrolino filtered D65 instead of ideal D65 */
|
|
|
|
#define DOPLOT /* Graphs: Black = target curve */
|
|
/* Red = uncorrected curve */
|
|
/* Green = corrected curve */
|
|
|
|
#define DATAFILE /* Write the plot data to a data file */
|
|
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <math.h>
|
|
#include "aconfig.h"
|
|
#include "numlib.h"
|
|
#include "cgats.h"
|
|
#include "xspect.h"
|
|
#ifdef DOPLOT
|
|
# include "plot.h"
|
|
# include "ui.h"
|
|
#endif
|
|
|
|
|
|
/* Spectrolino filter "D65" illuminant */
|
|
static xspect il_sod65 = {
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
100.0, /* Scale factor */
|
|
{
|
|
17.42, 29.51, 36.54, 38.39, 38.15,
|
|
39.68, 44.7, 53.6, 64.26, 74.01,
|
|
82.39, 89.9, 93.45, 94.05, 91.59,
|
|
89.4, 93.69, 100.85, 99.66, 87.12,
|
|
78.34, 82.95, 91.31, 98.18, 99.99,
|
|
104.38, 120.06, 145.35, 172.8, 190.38,
|
|
192.46, 181.28, 163.7, 143.14, 123.57,
|
|
104.67
|
|
}
|
|
};
|
|
|
|
/* Material/illuminant record */
|
|
struct {
|
|
char *media; /* Media/process identifier */
|
|
char *illum; /* Primary illuminant identifier */
|
|
icxIllumeType ill; /* Illuminant used to get reflectance spectrum */
|
|
xspect white; /* Media on its own spectrum */
|
|
xspect black; /* Media with maximum colorant */
|
|
struct {
|
|
char *pdesc; /* Description of sample */
|
|
xspect s; /* Spectrum of it */
|
|
} patches[6];
|
|
|
|
} matilum[2][2] = { /* [Cromalin, Epson 10K] [A, D65] */
|
|
{
|
|
{
|
|
"Cromalin", /* Paper measured */
|
|
"Illuminant A", /* Illuminant measured under */
|
|
icxIT_A,
|
|
{ /* White */
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0376, 0.0217, 0.0325, 0.1779, 0.5891,
|
|
0.9366, 1.0307, 1.0241, 0.9996, 0.9738,
|
|
0.9521, 0.9355, 0.9245, 0.9174, 0.9147,
|
|
0.9113, 0.9112, 0.9118, 0.9111, 0.9148,
|
|
0.9147, 0.9162, 0.9172, 0.9185, 0.9197,
|
|
0.9194, 0.9213, 0.9239, 0.9259, 0.9257,
|
|
0.9259, 0.9250, 0.9271, 0.9293, 0.9296, 0.9310
|
|
}
|
|
},
|
|
{ /* Black */
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000
|
|
}
|
|
},
|
|
{
|
|
{
|
|
"30% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0274, 0.0161, 0.0218, 0.1072, 0.3077,
|
|
0.4280, 0.4532, 0.4530, 0.4508, 0.4498,
|
|
0.4585, 0.5019, 0.6137, 0.7716, 0.8680,
|
|
0.8939, 0.9000, 0.8999, 0.9015, 0.9098,
|
|
0.9153, 0.9193, 0.9212, 0.9230, 0.9245,
|
|
0.9247, 0.9267, 0.9294, 0.9317, 0.9315,
|
|
0.9317, 0.9317, 0.9331, 0.9354, 0.9357, 0.9366
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"60% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0225, 0.0130, 0.0169, 0.0613, 0.1512,
|
|
0.1951, 0.2039, 0.2059, 0.2095, 0.2149,
|
|
0.2301, 0.2850, 0.4283, 0.6585, 0.8249,
|
|
0.8767, 0.8878, 0.8860, 0.8887, 0.9017,
|
|
0.9115, 0.9181, 0.9202, 0.9219, 0.9232,
|
|
0.9229, 0.9247, 0.9269, 0.9289, 0.9283,
|
|
0.9280, 0.9277, 0.9292, 0.9307, 0.9305, 0.9315
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"90% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0195, 0.0114, 0.0140, 0.0314, 0.0568,
|
|
0.0664, 0.0691, 0.0708, 0.0760, 0.0836,
|
|
0.1003, 0.1571, 0.3087, 0.5728, 0.7861,
|
|
0.8602, 0.8759, 0.8737, 0.8781, 0.8952,
|
|
0.9094, 0.9185, 0.9215, 0.9234, 0.9250,
|
|
0.9248, 0.9267, 0.9292, 0.9312, 0.9307,
|
|
0.9305, 0.9300, 0.9313, 0.9328, 0.9321, 0.9339
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"30% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0163, 0.0117, 0.0181, 0.1018, 0.3029,
|
|
0.4324, 0.4585, 0.4539, 0.4437, 0.4330,
|
|
0.4247, 0.4180, 0.4140, 0.4113, 0.4108,
|
|
0.4095, 0.4097, 0.4101, 0.4100, 0.4117,
|
|
0.4119, 0.4126, 0.4133, 0.4141, 0.4152,
|
|
0.4156, 0.4169, 0.4187, 0.4200, 0.4206,
|
|
0.4211, 0.4214, 0.4224, 0.4240, 0.4243, 0.4256
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"60% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0087, 0.0070, 0.0138, 0.0539, 0.1378,
|
|
0.1802, 0.1872, 0.1840, 0.1794, 0.1748,
|
|
0.1711, 0.1686, 0.1669, 0.1661, 0.1659,
|
|
0.1656, 0.1657, 0.1661, 0.1660, 0.1670,
|
|
0.1670, 0.1675, 0.1680, 0.1686, 0.1693,
|
|
0.1700, 0.1707, 0.1720, 0.1728, 0.1735,
|
|
0.1740, 0.1745, 0.1749, 0.1761, 0.1759, 0.1779
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"90% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0044, 0.0040, 0.0090, 0.0243, 0.0430,
|
|
0.0503, 0.0508, 0.0485, 0.0460, 0.0440,
|
|
0.0423, 0.0412, 0.0406, 0.0404, 0.0404,
|
|
0.0404, 0.0407, 0.0409, 0.0411, 0.0415,
|
|
0.0418, 0.0422, 0.0424, 0.0429, 0.0434,
|
|
0.0440, 0.0444, 0.0452, 0.0459, 0.0465,
|
|
0.0469, 0.0473, 0.0477, 0.0483, 0.0489, 0.0496
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"Cromalin",
|
|
"Illuminant filtered D65",
|
|
icxIT_D65,
|
|
{ /* White */
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0096, 0.0082, 0.0242, 0.1791, 0.6547,
|
|
1.0944, 1.2012, 1.1545, 1.0891, 1.0388,
|
|
1.0009, 0.9725, 0.9552, 0.9442, 0.9384,
|
|
0.9313, 0.9266, 0.9235, 0.9213, 0.9250,
|
|
0.9249, 0.9247, 0.9239, 0.9248, 0.9253,
|
|
0.9249, 0.9267, 0.9293, 0.9310, 0.9308,
|
|
0.9307, 0.9311, 0.9309, 0.9335, 0.9263, 0.8774
|
|
}
|
|
},
|
|
{ /* Black */
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000
|
|
}
|
|
},
|
|
{
|
|
{
|
|
"30% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0054, 0.0050, 0.0157, 0.1084, 0.3443,
|
|
0.4998, 0.5278, 0.5108, 0.4915, 0.4802,
|
|
0.4823, 0.5221, 0.6331, 0.7929, 0.8894,
|
|
0.9116, 0.9134, 0.9095, 0.9097, 0.9176,
|
|
0.9222, 0.9245, 0.9251, 0.9267, 0.9278,
|
|
0.9275, 0.9293, 0.9323, 0.9344, 0.9346,
|
|
0.9348, 0.9346, 0.9344, 0.9354, 0.9252, 0.8748
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"60% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0039, 0.0042, 0.0117, 0.0632, 0.1733,
|
|
0.2333, 0.2430, 0.2364, 0.2315, 0.2315,
|
|
0.2440, 0.2976, 0.4421, 0.6777, 0.8461,
|
|
0.8950, 0.9014, 0.8967, 0.8971, 0.9095,
|
|
0.9187, 0.9234, 0.9242, 0.9263, 0.9270,
|
|
0.9257, 0.9280, 0.9303, 0.9326, 0.9322,
|
|
0.9315, 0.9317, 0.9314, 0.9306, 0.9169, 0.8664
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"90% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0032, 0.0038, 0.0099, 0.0342, 0.0716,
|
|
0.0889, 0.0918, 0.0884, 0.0887, 0.0931,
|
|
0.1086, 0.1652, 0.3190, 0.5892, 0.8060,
|
|
0.8777, 0.8891, 0.8839, 0.8863, 0.9022,
|
|
0.9158, 0.9230, 0.9259, 0.9269, 0.9283,
|
|
0.9266, 0.9304, 0.9327, 0.9350, 0.9344,
|
|
0.9342, 0.9336, 0.9328, 0.9323, 0.9175, 0.8589
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"30% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0047, 0.0049, 0.0153, 0.1046, 0.3404,
|
|
0.5036, 0.5317, 0.5102, 0.4828, 0.4620,
|
|
0.4468, 0.4358, 0.4293, 0.4249, 0.4232,
|
|
0.4207, 0.4191, 0.4181, 0.4172, 0.4188,
|
|
0.4190, 0.4194, 0.4191, 0.4196, 0.4203,
|
|
0.4204, 0.4218, 0.4236, 0.4251, 0.4255,
|
|
0.4258, 0.4259, 0.4267, 0.4276, 0.4249, 0.4031
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"60% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0042, 0.0047, 0.0126, 0.0586, 0.1584,
|
|
0.2146, 0.2206, 0.2101, 0.1978, 0.1885,
|
|
0.1820, 0.1774, 0.1748, 0.1730, 0.1726,
|
|
0.1714, 0.1710, 0.1703, 0.1704, 0.1712,
|
|
0.1709, 0.1717, 0.1713, 0.1724, 0.1730,
|
|
0.1732, 0.1738, 0.1753, 0.1759, 0.1768,
|
|
0.1766, 0.1778, 0.1774, 0.1775, 0.1774, 0.1707
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"90% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0018, 0.0039, 0.0103, 0.0293, 0.0560,
|
|
0.0677, 0.0676, 0.0611, 0.0551, 0.0505,
|
|
0.0475, 0.0452, 0.0441, 0.0434, 0.0430,
|
|
0.0430, 0.0428, 0.0428, 0.0427, 0.0433,
|
|
0.0433, 0.0434, 0.0441, 0.0438, 0.0448,
|
|
0.0457, 0.0453, 0.0468, 0.0471, 0.0477,
|
|
0.0483, 0.0483, 0.0487, 0.0486, 0.0492, 0.0500
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
{
|
|
"Epson10K",
|
|
"Illuminant A",
|
|
icxIT_A,
|
|
{ /* White */
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.4561, 0.4677, 0.5052, 0.6477, 0.8785,
|
|
0.9929, 1.0127, 0.9909, 0.9676, 0.9539,
|
|
0.9420, 0.9330, 0.9277, 0.9246, 0.9236,
|
|
0.9205, 0.9200, 0.9191, 0.9172, 0.9198,
|
|
0.9184, 0.9185, 0.9181, 0.9189, 0.9204,
|
|
0.9207, 0.9228, 0.9256, 0.9277, 0.9276,
|
|
0.9284, 0.9286, 0.9304, 0.9332, 0.9321, 0.9349
|
|
}
|
|
},
|
|
{ /* Black */
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000
|
|
}
|
|
},
|
|
{
|
|
{
|
|
"30% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.3650, 0.3689, 0.3908, 0.4912, 0.6549,
|
|
0.7395, 0.7667, 0.7745, 0.7868, 0.8103,
|
|
0.8385, 0.8663, 0.8869, 0.8983, 0.9037,
|
|
0.9028, 0.9031, 0.9024, 0.9006, 0.9030,
|
|
0.9018, 0.9016, 0.9007, 0.9011, 0.9013,
|
|
0.9002, 0.9015, 0.9032, 0.9048, 0.9043,
|
|
0.9040, 0.9038, 0.9050, 0.9073, 0.9062, 0.9082
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"60% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.2376, 0.2286, 0.2349, 0.2856, 0.3740,
|
|
0.4290, 0.4642, 0.5005, 0.5513, 0.6172,
|
|
0.6959, 0.7750, 0.8340, 0.8683, 0.8848,
|
|
0.8884, 0.8901, 0.8900, 0.8884, 0.8906,
|
|
0.8892, 0.8893, 0.8884, 0.8885, 0.8886,
|
|
0.8875, 0.8885, 0.8903, 0.8917, 0.8910,
|
|
0.8911, 0.8908, 0.8924, 0.8951, 0.8940, 0.8962
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"90% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0482, 0.0362, 0.0314, 0.0323, 0.0373,
|
|
0.0448, 0.0570, 0.0829, 0.1310, 0.2130,
|
|
0.3465, 0.5227, 0.6838, 0.7871, 0.8409,
|
|
0.8622, 0.8713, 0.8749, 0.8752, 0.8787,
|
|
0.8783, 0.8787, 0.8781, 0.8784, 0.8784,
|
|
0.8773, 0.8780, 0.8794, 0.8802, 0.8789,
|
|
0.8783, 0.8773, 0.8778, 0.8794, 0.8775, 0.8779
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"30% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.3304, 0.3398, 0.3632, 0.4562, 0.6018,
|
|
0.6702, 0.6808, 0.6663, 0.6520, 0.6434,
|
|
0.6362, 0.6311, 0.6285, 0.6272, 0.6269,
|
|
0.6253, 0.6253, 0.6253, 0.6247, 0.6274,
|
|
0.6280, 0.6301, 0.6320, 0.6351, 0.6385,
|
|
0.6414, 0.6464, 0.6530, 0.6593, 0.6643,
|
|
0.6692, 0.6727, 0.6770, 0.6811, 0.6826, 0.6856
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"60% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.1735, 0.1784, 0.1886, 0.2295, 0.2936,
|
|
0.3232, 0.3279, 0.3227, 0.3177, 0.3152,
|
|
0.3133, 0.3126, 0.3126, 0.3131, 0.3141,
|
|
0.3142, 0.3151, 0.3160, 0.3169, 0.3195,
|
|
0.3217, 0.3251, 0.3287, 0.3335, 0.3386,
|
|
0.3439, 0.3511, 0.3599, 0.3692, 0.3775,
|
|
0.3853, 0.3919, 0.3982, 0.4036, 0.4068, 0.4109
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"90% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0197, 0.0198, 0.0201, 0.0201, 0.0208,
|
|
0.0207, 0.0204, 0.0202, 0.0200, 0.0197,
|
|
0.0194, 0.0194, 0.0193, 0.0192, 0.0191,
|
|
0.0191, 0.0190, 0.0190, 0.0190, 0.0192,
|
|
0.0194, 0.0198, 0.0205, 0.0212, 0.0221,
|
|
0.0230, 0.0244, 0.0261, 0.0282, 0.0304,
|
|
0.0326, 0.0346, 0.0366, 0.0383, 0.0396, 0.0412
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"Epson10K",
|
|
"Illuminant filtered D65",
|
|
icxIT_D65,
|
|
{ /* White */
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.4452, 0.4631, 0.5041, 0.6692, 0.9582,
|
|
1.1083, 1.1289, 1.0717, 1.0191, 0.9929,
|
|
0.9721, 0.9560, 0.9483, 0.9439, 0.9419,
|
|
0.9374, 0.9357, 0.9337, 0.9313, 0.9340,
|
|
0.9330, 0.9329, 0.9320, 0.9328, 0.9341,
|
|
0.9339, 0.9366, 0.9387, 0.9406, 0.9405,
|
|
0.9404, 0.9405, 0.9414, 0.9455, 0.9369, 0.9289
|
|
}
|
|
},
|
|
{ /* Black */
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
|
|
0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000
|
|
}
|
|
},
|
|
{
|
|
{
|
|
"30% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.3538, 0.3632, 0.3888, 0.5058, 0.7111,
|
|
0.8221, 0.8512, 0.8334, 0.8251, 0.8392,
|
|
0.8609, 0.8832, 0.9013, 0.9113, 0.9157,
|
|
0.9137, 0.9128, 0.9113, 0.9086, 0.9111,
|
|
0.9103, 0.9094, 0.9091, 0.9083, 0.9085,
|
|
0.9080, 0.9091, 0.9104, 0.9118, 0.9104,
|
|
0.9099, 0.9099, 0.9094, 0.9111, 0.9054, 0.8793
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"60% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.2220, 0.2209, 0.2299, 0.2901, 0.4010,
|
|
0.4716, 0.5092, 0.5337, 0.5732, 0.6337,
|
|
0.7095, 0.7848, 0.8422, 0.8755, 0.8907,
|
|
0.8933, 0.8938, 0.8927, 0.8909, 0.8929,
|
|
0.8922, 0.8912, 0.8897, 0.8902, 0.8900,
|
|
0.8893, 0.8896, 0.8915, 0.8932, 0.8918,
|
|
0.8921, 0.8915, 0.8921, 0.8939, 0.8825, 0.8575
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"90% Y",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0326, 0.0287, 0.0269, 0.0295, 0.0376,
|
|
0.0469, 0.0605, 0.0862, 0.1343, 0.2162,
|
|
0.3503, 0.5257, 0.6862, 0.7889, 0.8420,
|
|
0.8632, 0.8719, 0.8753, 0.8753, 0.8784,
|
|
0.8776, 0.8778, 0.8778, 0.8783, 0.8775,
|
|
0.8772, 0.8777, 0.8791, 0.8808, 0.8793,
|
|
0.8784, 0.8770, 0.8758, 0.8757, 0.8626, 0.8106
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"30% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.3243, 0.3369, 0.3635, 0.4708, 0.6532,
|
|
0.7439, 0.7542, 0.7167, 0.6839, 0.6673,
|
|
0.6546, 0.6454, 0.6412, 0.6387, 0.6380,
|
|
0.6357, 0.6351, 0.6341, 0.6334, 0.6363,
|
|
0.6367, 0.6388, 0.6400, 0.6431, 0.6465,
|
|
0.6491, 0.6532, 0.6591, 0.6656, 0.6699,
|
|
0.6743, 0.6778, 0.6816, 0.6859, 0.6815, 0.6758
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"60% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.1707, 0.1772, 0.1895, 0.2374, 0.3174,
|
|
0.3566, 0.3616, 0.3464, 0.3329, 0.3272,
|
|
0.3228, 0.3201, 0.3196, 0.3198, 0.3208,
|
|
0.3203, 0.3207, 0.3217, 0.3221, 0.3249,
|
|
0.3269, 0.3295, 0.3339, 0.3375, 0.3427,
|
|
0.3483, 0.3545, 0.3635, 0.3726, 0.3808,
|
|
0.3881, 0.3949, 0.4003, 0.4053, 0.4052, 0.3962
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"90% K",
|
|
{
|
|
36, 380.0, 730.0, /* 36 bands from 380 to 730 in 10nm steps */
|
|
1.0, /* Scale factor */
|
|
{
|
|
0.0206, 0.0205, 0.0202, 0.0205, 0.0213,
|
|
0.0217, 0.0210, 0.0207, 0.0202, 0.0199,
|
|
0.0198, 0.0197, 0.0197, 0.0195, 0.0196,
|
|
0.0193, 0.0192, 0.0194, 0.0194, 0.0194,
|
|
0.0197, 0.0198, 0.0204, 0.0214, 0.0223,
|
|
0.0236, 0.0242, 0.0265, 0.0283, 0.0306,
|
|
0.0330, 0.0347, 0.0370, 0.0389, 0.0394, 0.0383
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
/* ---------------------------------------------------------- */
|
|
|
|
int
|
|
main(void) {
|
|
int m, ps, ss, pn;
|
|
#ifdef DATAFILE
|
|
FILE *df;
|
|
#endif
|
|
|
|
printf("Hi there\n");
|
|
|
|
#ifdef DATAFILE
|
|
if ((df = fopen("spectest.dat", "w")) == NULL)
|
|
error ("Unable to open data file '%s'","spectest.dat");
|
|
#endif
|
|
/* For each material and illuminant */
|
|
for (m = 0; m < 2; m++) {
|
|
|
|
printf("Material '%s'\n", matilum[m][0].media);
|
|
|
|
/* For each light source as primary (target/check), other as secondary (instrument) */
|
|
for (ps = 0; ps < 2; ps++) {
|
|
xsp2cie *pcon, *scon; /* Conversions */
|
|
xspect pill, sill; /* Illuminants */
|
|
|
|
ss = 1 - ps; /* Opposite */
|
|
|
|
#ifdef FILTERED_D65
|
|
if (matilum[m][ps].ill == icxIT_D65)
|
|
pill = il_sod65;
|
|
else
|
|
#endif
|
|
standardIlluminant(&pill, matilum[m][ps].ill, 0); /* Target/check */
|
|
|
|
#ifdef FILTERED_D65
|
|
if (matilum[m][ss].ill == icxIT_D65)
|
|
sill = il_sod65;
|
|
else
|
|
#endif
|
|
standardIlluminant(&sill, matilum[m][ss].ill, 0); /* Instrument */
|
|
|
|
/* Create two conversions for the target/check illuminant */
|
|
if ((pcon = new_xsp2cie(icxIT_custom, 0.0, &pill, icxOT_Shaw_Fairchild_2,
|
|
NULL, icSigLabData, 1)) == NULL)
|
|
error ("Creating conversion failed");
|
|
|
|
if ((scon = new_xsp2cie(icxIT_custom, 0.0, &pill, icxOT_Shaw_Fairchild_2,
|
|
NULL, icSigLabData, 1)) == NULL)
|
|
error ("Creating conversion failed");
|
|
|
|
/* Tell the secondary conversion to allow for instrument illuminant */
|
|
if (scon->set_fwa(scon, &sill, NULL, &matilum[m][ss].white))
|
|
error ("Setting FWA compensation failed");
|
|
|
|
printf("Primary (Target/Check) '%s', Secondary (Instrument)'%s'\n",
|
|
matilum[m][ps].illum, matilum[m][ss].illum);
|
|
|
|
/* For each test patch */
|
|
for (pn = 0; pn < 6; pn++) {
|
|
int i, j;
|
|
double plab[3];
|
|
double slab[3];
|
|
double sclab[3];
|
|
xspect psp; /* Reference spectrum */
|
|
xspect ssp; /* un-compensated spectrum */
|
|
xspect scsp; /* Compensated spectrum */
|
|
double de, cde;
|
|
#ifdef DOPLOT
|
|
#define XRES 400
|
|
double xx[XRES];
|
|
double y1[XRES];
|
|
double y2[XRES];
|
|
double y3[XRES];
|
|
#endif /* DOPLOT */
|
|
|
|
|
|
/* Compute reference value for target illuminant */
|
|
pcon->sconvert(pcon, &psp, plab, &matilum[m][ps].patches[pn].s);
|
|
|
|
/* Compute uncompensated value for target illuminant */
|
|
pcon->sconvert(pcon, &ssp, slab, &matilum[m][ss].patches[pn].s);
|
|
|
|
/* Compute compensated value for target illuminant */
|
|
scon->sconvert(scon, &scsp, sclab, &matilum[m][ss].patches[pn].s);
|
|
|
|
de = 0.0;
|
|
for (j = 0; j < 3; j++) {
|
|
double tt = plab[j] - slab[j];
|
|
de += tt * tt;
|
|
}
|
|
de = sqrt(de);
|
|
|
|
printf("Patch '%s', Ref %f %f %f, Other %f %f %f DE %f\n",
|
|
matilum[m][ps].patches[pn].pdesc, plab[0], plab[1], plab[2],
|
|
slab[0], slab[1], slab[2], de);
|
|
|
|
cde = 0.0;
|
|
for (j = 0; j < 3; j++) {
|
|
double tt = plab[j] - sclab[j];
|
|
cde += tt * tt;
|
|
}
|
|
cde = sqrt(cde);
|
|
|
|
printf("Patch '%s', Ref %f %f %f, COther %f %f %f DE %f\n",
|
|
matilum[m][ps].patches[pn].pdesc, plab[0], plab[1], plab[2],
|
|
sclab[0], sclab[1], sclab[2], cde);
|
|
printf("DE change %f\n",cde - de);
|
|
printf("\n");
|
|
|
|
#ifdef DOPLOT
|
|
for (i = 0; i < psp.spec_n; i++) {
|
|
double ww;
|
|
|
|
ww = (psp.spec_wl_long - psp.spec_wl_short)
|
|
* ((double)i/(psp.spec_n-1.0)) + psp.spec_wl_short;
|
|
|
|
xx[i] = ww;
|
|
y1[i] = ssp.spec[i]; /* Black - Input */
|
|
y2[i] = scsp.spec[i]; /* Red - Estimate */
|
|
y3[i] = psp.spec[i]; /* Green - Target */
|
|
}
|
|
do_plot(xx,y1,y2,y3,i);
|
|
#endif /* DOPLOT */
|
|
#ifdef DATAFILE
|
|
fprintf(df,"\nPrimary (Target/Check) '%s', Secondary (Instrument)'%s'\n",
|
|
matilum[m][ps].illum, matilum[m][ss].illum);
|
|
fprintf(df,"Patch '%s', Ref %f %f %f, Other %f %f %f DE %f\n",
|
|
matilum[m][ps].patches[pn].pdesc, plab[0], plab[1], plab[2],
|
|
slab[0], slab[1], slab[2], de);
|
|
fprintf(df,"Patch '%s', Ref %f %f %f, COther %f %f %f DE %f\n",
|
|
matilum[m][ps].patches[pn].pdesc, plab[0], plab[1], plab[2],
|
|
sclab[0], sclab[1], sclab[2], cde);
|
|
fprintf(df,"NM Ref. Un-comp. Comp.\n");
|
|
for (i = 0; i < psp.spec_n; i++) {
|
|
double ww;
|
|
|
|
ww = (psp.spec_wl_long - psp.spec_wl_short)
|
|
* ((double)i/(psp.spec_n-1.0)) + psp.spec_wl_short;
|
|
|
|
fprintf(df,"%d %f %f %f\n",((int)ww), psp.spec[i], ssp.spec[i], scsp.spec[i]);
|
|
}
|
|
#endif /* DATAFILE */
|
|
}
|
|
pcon->del(pcon);
|
|
scon->del(scon);
|
|
}
|
|
}
|
|
#ifdef DATAFILE
|
|
fclose(df);
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|