HSV色空間の基礎と実務活用ガイド—定義・変換・色抽出・カラー調整を徹底解説
概要
HSV色空間(Hue, Saturation, Value/または HSB:Hue, Saturation, Brightness)は、色を「色相(Hue)」「彩度(Saturation)」「明度(Value/Brightness)」の3つの成分で表現する色表現モデルです。RGBのような光の三刺激値ではなく、人間の色知覚に近い直感的なパラメータで色を扱えるため、色選択ツールや画像処理(色領域の抽出・閾値処理)などで広く使われています。
各成分の意味
- Hue(色相):色の種類を角度(通常 0°〜360°)で表します。赤、黄、緑、青などの色相が円状に並ぶ「色相環」として扱われ、角度で連続的に変化します。
- Saturation(彩度):色の鮮やかさ。0(無彩色=灰色)から1(最大の彩度=純色)で表されます。彩度が低いほど色は「淡く」見えます。
- Value / Brightness(明度/輝度):色の明るさ。0(黒)から1(最も明るい)で表します。Value はRGB成分の最大値に対応します。
数学的定義と RGB ⇄ HSV の変換
ここでは RGB(各成分を 0〜1 に正規化)から HSV への標準的な変換を示します。R, G, B を正規化した値とし、Cmax = max(R,G,B)、Cmin = min(R,G,B)、Δ = Cmax − Cmin とします。
- Value V = Cmax
- Saturation S = 0 (Cmax = 0 のとき)、それ以外は S = Δ / Cmax
- Hue H の定義:
- Δ = 0 のとき H は定義されず(通常 0° と扱う)
- Cmax = R のとき H = 60 × (((G − B) / Δ) mod 6)
- Cmax = G のとき H = 60 × (((B − R) / Δ) + 2)
- Cmax = B のとき H = 60 × (((R − G) / Δ) + 4)
最終的に H を 0°〜360° に正規化します。
- 逆変換(HSV → RGB)の主要ステップ(H を 0〜360°、S,V を 0〜1 とする):
- C = V × S
- H' = H / 60(セクタ番号 = floor(H'))
- X = C × (1 − |(H' mod 2) − 1|)
- 中間値 (R',G',B') をセクタに応じて (C,X,0), (X,C,0), (0,C,X), (0,X,C), (X,0,C), (C,0,X) のいずれかに設定
- m = V − C, 最終的に R = R' + m, G = G' + m, B = B' + m
表現の幾何学的イメージ
HSV は円筒座標系で表されます。円周方向が色相(H)、中心から外側への半径が彩度(S)、円筒の高さが明度(V)です。中心軸(S=0)は無彩色(灰色)で、外周は純色です。
利点(実務で使われる理由)
- 直感的:色相・彩度・明度に分離されているため、ユーザーインタフェースのカラーピッカーや手動調整が分かりやすい。
- 色抽出が容易:例えば「赤系の色」を抽出する場合、Hue に対する閾値でフィルタリングできる(明るさや影響を受けにくい設計が可能)。
- 計算コストが低い:RGB との相互変換は計算量が少なく、リアルタイム処理に向く。
欠点と注意点
- 知覚的均一性がない:HSV の距離が人間の目の感じる色差と一致しない。CIELAB 等の知覚的に等間隔な色空間が必要な場合は非適切。
- 彩度が低い領域での色相の不安定さ:S が小さい(灰色に近い)場合、H の値はノイズに敏感で大きく変動する。閾値処理では S の下限を設ける必要がある。
- 輝度(Value)は単純に最大成分を取るため、光源のスペクトルやガンマ補正の影響を受ける。物理的に正確な色処理には線形 RGB を用いるべき。
- デバイス依存性:RGB の解釈(ガンマ、空間(sRGB, Adobe RGB 等))によって同じ HSV の見え方が変わる。
実務での使い方とトラブル対策
- 色領域抽出:Hue 範囲で一次フィルタリングし、S と V の閾値でノイズやハイライト(反射)を除去するのが一般的。
- 色補正:彩度や明度を独立に調整できるため、色補正や画像合成で使いやすい。ただし輝度を変えると見かけ上の色相が変わることがある。
- 補間注意:色の補間(例:色のアニメーション)を HSV 空間で直接行うと、H の360°の端を跨ぐ補間や S/V のゼロ近傍で問題が出る。必要ならば短い方向の角度補間や、S が小さい場合は RGB 空間で補間するなど工夫する。
- ガンマ補正:物理的に正しい合成や比較が必要な場合は線形化(sRGB の逆ガンマ)してから変換するのが望ましい。多くのライブラリはガンマ補正済みの値で直接変換することが多いが、その点は留意すべきです。
HSV と HSL / HSI との違い
HSV とよく比較される HSL(Hue, Saturation, Lightness)や HSI(Hue, Saturation, Intensity)は、彩度や明度の定義が異なります。例えば HSL の Lightness L = (Cmax + Cmin) / 2 で定義され、S の式も異なるため、同じ RGB から得られる数値が変わります。用途に応じて使い分ける必要があります。一般に HSL は CSS やデザイン系で採用例が多く、HSV はビジュアルや画像処理系でよく使われます。
実装例とライブラリ
多くの画像処理ライブラリ(OpenCV、Pillow、Matplotlib 等)は RGB ⇄ HSV 変換関数を提供しています。OpenCV の cvtColor などを使えば簡単に変換できますが、OpenCV は Hue を 0〜179 のスケールで扱う(8bit表現)などライブラリごとのスケール差に注意してください。
まとめ
HSV は直感的で実用的な色空間であり、カラーピッカーや基本的な色抽出・調整処理に非常に有用です。一方で知覚的均一性の欠如や低彩度での H の不安定性、デバイス・ガンマ依存性といった限界も持っています。用途に応じて(例えば色差測定や色補正の厳密さが要求される場合は CIELAB を使うなど)適切な色空間を選ぶことが重要です。
参考文献
- Wikipedia: HSV色空間(日本語)
- Wikipedia: HSL and HSV(英語)
- W3C: sRGB(色空間とガンマについて)
- OpenCV(cvtColor などの実装例参照)
- Wikipedia: CIELAB color space(知覚的均一性について)


