HLS色空間:HSVとの違いとRGB変換の詳細
HLS
[色]]空間(Hue, Lightness, Saturation)は、色を
色相(Hue)、
輝度]、
[彩度]の3つの成分で表現するモデルです。HSV[[色空間とよく似た性質を持ちますが、
輝度と
彩度の定義において重要な違いがあります。そのため、HSVとHLSを混同しないように注意が必要です。HSLやHSIと呼ばれることもあります。
色相(Hue)
色相は
色の種類を表し、0°から360°の範囲で表現されます。0°が
赤で、180°が
赤の反対
色である
青緑となります。
色相環上で反対の位置にある
色は補
色関係にあり、容易に特定できます。この点においてはHSV
色空間と同じです。
彩度は
色の鮮やかさを表します。HLS
色空間における
彩度は、純
色からどれだけ
灰色に近づくかによって定義されます。HSVとは異なり、
彩度が低いほど
灰色に近づきます。
輝度は
色の明るさを表します。HLS
色空間では、
輝度0%が
黒、100%が
白、50%が純
色と定義されています。これはHSVと大きく異なります。HSVでは、
輝度100%が純
色で、
輝度が低くなるほど
黒に近づきます。HLSの
輝度を理解する一つの方法は、50%を境に、50%以下はHSVの
明度、50%以上はHSVの
彩度と考えることです。
代表的なアプリケーション
HLS
色空間は、Microsoft Windows(ペイントを含む)、CSS3、Paint Shop Pro、Inkscapeなど、様々なアプリケーションで利用されています。
RGBからHLSへの変換
RGBからHLSへの変換は、以下の数式を用いて行います。ただし、双円錐モデルと円柱モデルがあり、
彩度の計算方法が異なります。
双円錐モデル
色相Hの計算:
H = {
undefined, if MIN = MAX
60 × (G - R) / (MAX - MIN) + 60, if MIN = B
60 × (B - G) / (MAX - MIN) + 180, if MIN = R
60 × (R - B) / (MAX - MIN) + 300, if MIN = G
}
L = (MAX + MIN) / 2
S = MAX - MIN
円柱モデル
色相Hの計算は双円錐モデルと同じです。
彩度Sの計算:
S = (MAX - MIN) / (1 - |MAX + MIN - 1|)
ここで、MAXはR, G, Bの最大値、MINは最小値です。
HLSからRGBへの変換
HLSから
RGBへの変換は、まず最大値Maxと最小値Minを求める必要があります。
円柱モデルからの変換
Max = L + S × (1 - |2 × L - 1|) / 2
Min = L - S × (1 - |2 × L - 1|) / 2
双円錐モデルからの変換
Max = L + S / 2
Min = L - S / 2
次に、
色相Hの値に基づいて、以下の式を用いて
RGBの各チャンネルの値を計算します。
(R, G, B) = {
(Min, Min, Min), if H is undefined
(Max, Min + (Max - Min) × H / 60, Min), if 0 ≤ H < 60
(Min + (Max - Min) × (120 - H) / 60, Max, Min), if 60 ≤ H < 120
(Min, Max, Min + (Max - Min) × (H - 120) / 60), if 120 ≤ H < 180
(Min, Min + (Max - Min) × (240 - H) / 60, Max), if 180 ≤ H < 240
(Min + (Max - Min) × (H - 240) / 60, Min, Max), if 240 ≤ H < 300
(Max, Min, Min + (Max - Min) × (360 - H) / 60), if 300 ≤ H < 360
}
色相が定義されない場合(Hがundefinedの場合)、
彩度は0となり、R, G, Bの値は全て
輝度Lに等しくなります。これは、完全に
灰色であることを示しています。
これらの変換式を用いることで、
RGB色空間とHLS
色空間の間で相互変換を行うことができます。ただし、変換式はモデルによって異なるため注意が必要です。