-
Notifications
You must be signed in to change notification settings - Fork 25
/
lms.js
83 lines (73 loc) · 1.8 KB
/
lms.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/**
* A responsivity of cones color space.
* Used for CAT - chromatic adaptation transform.
*
* http://en.wikipedia.org/wiki/LMS_color_space
* http://www.mathworks.com/matlabcentral/fileexchange/28790-colorspace-transformations
*
* @todo xyz -> lms
* @todo tests
*
* @module color-space/lms
*/
import xyz from './xyz.js';
var lms = {
name: 'lms',
min: [0,0,0],
max: [100,100,100],
channel: ['long', 'medium', 'short'],
//transform matrices
matrix: {
HPE: [
0.38971, 0.68898,-0.07868,
-0.22981, 1.18340, 0.04641,
0.00000, 0.00000, 1.00000],
VONKRIES: [
0.4002, 0.7076, -0.0808,
-0.2263, 1.1653, 0.0457,
0.00000,0.00000, 0.9182],
BFD: [
0.8951, 0.2664,-0.1614,
-0.7502, 1.7135, 0.0367,
0.0389,-0.0686, 1.0296],
CAT97: [
0.8562, 0.3372,-0.1934,
-0.8360, 1.8327, 0.0033,
0.0357,-0.00469,1.0112],
CAT00: [
0.7982, 0.3389,-0.1371,
-0.5918, 1.5512, 0.0406,
0.0008, 0.0239, 0.9753],
CAT02: [
0.7328, 0.4296,-0.1624,
-0.7036, 1.6975, 0.0061,
0.0030, 0.0136, 0.9834]
}
};
export default lms;
lms.xyz = function(arg, matrix){
var l = arg[0], m = arg[1], s = arg[2];
if (!matrix) {
matrix = [
1.096123820835514, -0.278869000218287, +0.182745179382773,
0.454369041975359, + 0.473533154307412, +0.072097803717229,
-0.009627608738429, -0.005698031216113, +1.015325639954543
];
}
return [
l * matrix[0] + m * matrix[1] + s * matrix[2],
l * matrix[3] + m * matrix[4] + s * matrix[5],
l * matrix[6] + m * matrix[7] + s * matrix[8]
];
};
xyz.lms = function(arg, matrix) {
var x = arg[0], y = arg[1], z = arg[2];
if (!matrix) {
matrix = lms.matrix.CAT02
}
return [
x * matrix[0] + y * matrix[1] + z * matrix[2],
x * matrix[3] + y * matrix[4] + z * matrix[5],
x * matrix[6] + y * matrix[7] + z * matrix[8]
];
};