行列で色の値をを変換しよう
コンピューター上で色を表現するには、しばしば、RGBという変数が用いられています。
Rは赤(red)、Gは緑(green)、Bは青(blue)である。光の3原色と言われています。例えば、それぞれの変数を256段階で指定することによって、さまざまな色を表現しています。
一方、人間の表現する色の場合には、色相(と鮮やかさと明るさ)で表現する場合が多いと、私は感じています。すなわち、ある色を見た場合には、「明るい赤」とか、「深い青」などど言うことが多いと思います。つまり、「黄色」を表現するのに光の三原色を用いて「緑+青」などとは表現しないということです。
いま、ロボットのセンサーなどで、「RGB」3原色のそれぞれの光の量が測定されたとします。それを、人間が表現する場合に表現しやすい「色相」などの表現にするにはどうすれば良いでしょうか。これをする変換に「HSI変換」があります。
それは次の計算式で表されます。行列の積は大丈夫ですか?
ここで、arctanはtanの逆関数です。
Hは色相で、赤、だいだい、黄、、、というものを表します。M1とM2の比を角度に直しています。
M1とM2は中間パラメータです。
Sは鮮やかさです。大きいほど鮮やかということです。例えばRGBの3つの値が全て等しかったとすると、M1とM2も0になります。すると、このSも0になります。そしてこの値が0の場合には、その色は黒かグレーか白です。(グレーにもいろいろな明るさがありますが、、、)
で、その明るさはIです。R+G+Bです。