表色系
色相 (H:hue),彩度 (S:saturation),明度 (I:intensity)で記述する表色系のことで,HSV (V:value) や HSL (L:lightness) と呼ばれることもあります.RGBSI の値域は [0,1] であり H の値域は [0,2π] となっています.H は環状になっているので距離をとるときには注意して下さい.距離がπ以上の場合は 2 πから引いたものが距離になります.
PI = 3. 1415926535; I = max{R,G,B} i = min{R,G,B} I = 0 の時 S = 0 H = 不定 それ以外の時 S = (I-i)/I r = (I-R)/(I-i) g = (I-G)/(I-i) b = (I-B)/(I-i) R = I の時 H=(b-g)*PI/3 G = I の時 H=(2+r-b)*PI/3 B = I の時 H=(4+g-r)*PI/3 ただし,H<0 の時は H の値に 2*PI を加える |
次に HSI の値から RGB 値を求める逆変換を示します.
PI = 3. 1415926535; S = 0 の時 R = G = B = I それ以外の時 h = floor(H/(PI/3)) : floor(x) は x 以下の最大の整数を得る関数 ただし H = 2*PI の時 H = 0 P = I*(1-S) Q = I*{1-S*(H-h)} T = I*{1-S*(1-H+h)} h = 0 の時 R = I, G = T, B = P h = 1 の時 R = Q, G = I, B = P h = 2 の時 R = P, G = I, B = T h = 3 の時 R = P, G = Q, B = I h = 4 の時 R = T, G = P, B = I h = 5 の時 R = I, G = P, B = Q |
単純な計算式で結果が得られ,距離も取りやすいので差分や色抽出によく使われます.人間の肌の抽出などによく利用されています.
X = 0.49000R + 0.31000G + 0.20000B Y = 0.17697R + 0.81240G + 0.01063B Z = 0.01000G + 0.99000B u' = 4X/(X+15Y+3Z) v' = 9Y/(X+15Y+3Z) |