HSV色空間とは?RGBから変換するときの計算式

HSV色空間とは?メリットやRGB色空間からの変換式についてまとめました。

HSV色空間とは

HSV色空間とは、「色相(Hue)」「彩度(Saturation)」「明度(Value)」の3つの組み合わせで色を表現する手法です。

説明
色相(H) 色合い。(赤っぽい、青っぽいといった色のおおまかな違いのことで、赤なら0度、黄色なら 60度といったように角度で色合いが決まります)
彩度(S) 色の鮮やかさ。(色相が同じ場合でも、彩度が高ければ鮮やかに見え、低ければグレーに見える。彩度がゼロの場合は無彩色[黒、グレー、白])
明度(V) 色の明るさ。(高いほど明るい色になる)

HSV色空間は人間が色を知覚する方法と類似しているため、RGB色空間よりも人がイメージした通りの色を作りやすいという特徴があります。
この特徴から、画像処理でも色検出をおこなう場合などにHSV色空間が利用されています。

RGB色空間からHSV色空間へ変換する計算式

(R、G、B)の値が0.0(最小)から1.0(最大)の範囲にあるとします。
そして、各画素のR、G、Bの3つの画素値のうち、最大値をMAX、最小値をMINとします。

H(色相)の計算

最小値MINがB(青)の画素値であった場合、H(色相)は以下の式で計算できます。
$$ H=60\times \frac{G-R}{MAX-MIN}+60 $$

最小値MINがR(赤)の画素値であった場合、H(色相)は以下の式で計算できます。

$$ H=60\times \frac{B-G}{MAX-MIN}+180 $$

最小値MINがG(緑)の画素値であった場合、H(色相)は以下の式で計算できます。

$$ H=60\times \frac{R-B}{MAX-MIN}+360 $$

最大値MAXと最小値MINが等しい場合、定義はありません(今回紹介するサンプルコードでは0とします)。

$$ H=undefined $$

S(色彩)の計算

HSV色空間が円錐モデルのとき、S(色彩)は以下の式で計算できます。

$$ S = MAX-MIN $$

円柱モデルのとき、S(色彩)は以下の式で計算できます。

$$ S=\frac{MAX-MIN}{MAX} $$

V(明度)の計算

V(明度)は以下の式で計算できます。

$$ V=MAX $$

色相$H$が負の値になれば、360を加算して0~360の範囲内に収めます。
色彩$S$と明度$V$は0~1の範囲内に値が収まります。

関連ページ

Python版OpenCVによる実装例は以下ページで解説しています。

【Python/OpenCV】赤・緑・青色の検出(HSV色空間)
PythonとOpenCVを用いて画像をHSV色空間に変換し、赤・緑・青色の領域を色検出する方法をソースコード付きで解説します。

画像処理アルゴリズム全般については以下ページにまとめています。

【画像処理入門】アルゴリズム&プログラミング
画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。

コメント

  1. ほさか より:

    (1)は誤りではないでしょうか。
    wikipedia の「HSV色空間」の対応する色があっているように思います。
    違いは、()内が MAX(本WWW) か MIN(wikipedia) かです。

    R=1, G=B=0 のとき、wikipedia ではコンシステントに 0 です。

    本ページでは、一番上の式では R=B=1, G=0 で、一番下の式では R=G=1, B=0 で 0 となり、不整合です。