Files
PackControl/node_modules/color-space/lms.js
2026-02-27 22:46:14 +01:00

84 lines
1.8 KiB
JavaScript

/**
* 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]
];
};