知覚を考慮した色差 CIEDE2000 とその実装

色差の指標 CIEDE2000

色差、つまり2つの色の距離を計算する方法はいくつかあるが、人間の知覚を考慮した指標である CIEDE2000 を用いるのが良いことが多い。

知覚を考慮しているとは、例えば人間にとって見分けのつきにくい色同士は (たとえ RGB の値が遠くても) 距離が近く、人間にとって見分けのつきやすい色同士は距離が遠くなるように設計されていることを意味している。

f:id:yuki-koyama:20180504132639p:plain CIEDE2000 を用いることで、より人間の知覚に沿った色差を計算できる。両ペアは RGB 色空間では等しい距離を持つが、人間には左のペアの方が色が遠く、右のペアの方が色が近いと知覚されることが CIEDE2000 の計算に反映されている。*1

CIEDE2000 の数式

具体的な数式は複雑だが、下記文献を参照すると実装はそれほど難しくない。計算は CIELAB 色空間に基づいている。詳細は割愛する。

CIEDE2000 の実装

下記の GitHub レポジトリに CIEDE2000 の実装を公開した。なお、CIEDE2000 の計算に必要な色空間の変換(RGB から CIELAB へ)も実装に含まれている。C++11 で記述している。Header-only ライブラリとして利用可能になっている。ライセンスは MIT License とした。

github.com

他の色差計算手法との比較

RGB 色空間におけるユークリッド距離

これは色の距離を測る際の最も単純な方法の一つであり、しばしば用いられる。冒頭の図でも CIEDE2000 の結果との比較のために用いた。次の式で色差が計算される。

{ \displaystyle
d = \sqrt{ (r_1 - r_2)^2 + (g_1 - g_2)^2 + (b_1 - b_2)^2 }
}

しかし、この指標は人間の知覚特性を考慮していない。

CIELAB 色空間におけるユークリッド距離

人間の知覚を考慮するために、RGB 色空間ではなく CIELAB 色空間におけるユークリッド距離を用いる方法があり、これもしばしば用いられる。なお、CIELAB 色空間とはここではCIE 1976 (L*, a*, b*) 色空間を指す。単に Lab 色空間とも呼ばれる。次の式で色差が計算される。

{ \displaystyle
d = \sqrt{ (L^*_1 - L^*_2)^2 + (a^*_1 - a^*_2)^2 + (b^*_1 - b^*_2)^2 }
}

なお、この色差の指標は CIE76 とも呼ばれる。

設計された当時、CIE76 は人間の知覚をよく反映した指標だとということになっていたようだが、それでもやはり人間の知覚特性を完全に再現できているわけではない。後により精度が高いとされる指標が提案されることになり、現在では CIEDE2000 が人間の知覚をよく反映した指標だということになっている。

*1:ここでは sRGB 色空間を仮定して CIEDE2000 を計算している。詳しくはソースコードを参照。