PhotoShop の HSB(Hue、Saturation、Brightness)カラーモデルは、基本的にはWindows API のカラー選択ダイアログで提供されている HSV(Hue、Saturation、Value)カラーモデルと同じです。
ただ細かいことですが、PhotoShop の HSB 値は、RGB 値と 1 対 1 で対応していません。RGB には、24bit すなわち 16,777,216 通りの値があり得ますが、HSB には、彩度 360 度、彩度と明度 0~100 % のそれぞれ101通りで、
360 × 101 × 101 = 3,672,360
通りしかありません。ということは、RGB から HSB を求める計算は不可逆ということになります。
Windows のカラー選択ダイアログでは HSV も 24bit で表現しているので、可逆だろうと思います。
さて、本筋に戻って、RGB 値 から HSB 値を求めることを考えます。数学風の式だと(私が)書き難いので、C 風に書きます。前振りとして、
という関数と
という関数を定義しときます。
前者は num1、num2、num3の中の最大値を返し、後者は最小値を返す関数です。また、RGB値の範囲は、0~255 の整数、HSB値の範囲は PhotoShop にならいます。
色相は、360度の円環で表します。学校の美術の授業で目にしたアレです。
![]() | ■ 000度(255, 0, 0) |
■ 060度(255, 255, 0) | |
■ 120度(0 ,255, 0) | |
■ 180度(0, 255, 255) | |
■ 240度( 0, 0, 255) | |
■ 300度(255, 0, 255) | |
■ 360度(255, 0, 0) |
こんな風に決められています。これを求める式を手っ取り早く考えると、if 文の羅列になりそうです。
彩度は、RGB の最大値と最小値の差を最大値で割ったものです。
マンセル色系では ( max - min ) のことを Chroma(クロマ)と呼ぶそうです。
明度は、RGB 各チャンネルのうちの最大値です。
明度は、色相・彩度のダイアログや、情報パレット上での表示などでしか使用されていません。PhothShopで重要な明るさの指標は、次の輝度です。
PhotoShop には明度の他にもう1つ明るさを表現する指標があり、輝度(Luminance または Luminosity)と呼ばれています。
輝度は以上のような RGB 値の加重平均で決定されます。この係数は、“人間の眼はそう感じているようだ”という経験則から導かれているようです。
レイヤーのブレンドなどの際には、明度ではなく輝度が使用されています。両者は明確に異なるので、混同しないようにしてください。PhotoShop で使われる輝度は、NTSC の Y / C や JPEG のエンコードで分離する Y 成分と同じものです。なお、PhotoShop がグレースケールや Lab モードで利用している明るさの指標は、この輝度とは微妙に異なるものです。