LoginSignup
2
1

More than 5 years have passed since last update.

JavaScriptでCIE94色差計算

Last updated at Posted at 2017-02-14

Color difference(wikipedia)で公開されているCIE94の色差計算式をJavaScriptで書いてみました

wikipediaで公開されている計算式は以下のとおりです。

CIE94
(「Color difference」(5 Feb 2017, at 02:30. UTC)『ウィキペディア』より引用)

CIE76やユークリッドと比較すると複雑なものとなります。また、CIE76やユークリッド、CIE2000ではL1a1b1とL2b2a2の値が入れ替わったとしても同じ結果になるのに対して、CIE94では違う値を返すため、ちょっと扱いにくい印象があります。計算式が間違っているだけかもしれませんが…

cie94
function cie94(L1,a1,b1, L2,a2,b2, kL=1,kC=1,kH=1) {
    //https://en.wikipedia.org/wiki/Color_difference#CIE94

    var K1;
    var K2;
    if (kL == 1) {
        K1 = 0.045;
        K2 = 0.015;
    } else {
        K1 = 0.048;
        K2 = 0.014;
    }
    var deltaL = L1 - L2;
    var C1 = Math.sqrt(Math.pow(a1, 2) + Math.pow(b1, 2));
    var C2 = Math.sqrt(Math.pow(a2, 2) + Math.pow(b2, 2));
    var deltaCab = C1 - C2;
    var deltaa = a1 - a2;
    var deltab = b1 - b2;
    var deltaHab = Math.sqrt(
            Math.pow(deltaa, 2) +
            Math.pow(deltab, 2) -
            Math.pow(deltaCab, 2)
        );
    var SL = 1;
    var SC = 1 + (K1 * C1);
    var SH = 1 + (K2 * C1);

    return Math.sqrt(
            Math.pow((deltaL/(kL*SL)), 2) +
            Math.pow((deltaCab/(kC*SC)), 2) +
            Math.pow((deltaHab/(kH*SH)), 2)
        );
};

CIE94はRGBではなくLabの値が必要となりますので、実際に使うにはJavaScriptでCIE76色差計算と同様にJavaScriptでRGBからLab色空間への変換を使ってRGBからLabへの変換する必要があります。以下のような感じになると思います。

var [L1, a1, b1] = rgbToLab(r1, g1, b1);
var [L2, a2, b2] = rgbToLab(r2, g2, b2);
distance = cie94(L1,a1,b1, L2,a2,b2);

または

distance = cie94.apply(this, 
        rgbToLab(r1,g1,b1).concat(rgbToLab(r2,g2,b2))
        )

関連リンク

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1