HSV (: HSV model)  (Hue) (Saturation, Chroma) (Value, Brightness) HSB (Hue, Saturation, Brightness) 
HSV

HLS (Hue, Saturation, Lightness) 



0360°  0100% 



0100%  colorimetric purity  desaturation 



0100% 

HSV1978RGBHSVHSBHLS

HSVの視覚化

編集

HSVHSV
 
HSV
 
HSV

HSVHSV

HSV沿HSVRGB

HSVと色覚

編集

HSVRGBCMYKHSVRGBCMYKHSVHLS

HSVHSVHSV

沿240 - 360




RGBからHSVへの変換

編集

RGB0.01.00.01.0(R,G,B)(H,S,V)

R,G,BMAXMIN[]

 

 

 

(H,S,V)H0.0360.0沿SV0.01.0H0360H360.0-30330480120

HSV

MAX = MIN(S = 0)HHSVS = 0

MAX = 0V = 0SV = 0

ソフトウェアでの変換処理

編集

以下の処理を行うことで変換することができる。

※HSV/RGB全要素を0.0~1.0の浮動小数点数で表現した円柱モデルの場合

// (float r, float g, float b)
float max = r > g ? r : g;
max = max > b ? max : b;
float min = r < g ? r : g;
min = min < b ? min : b;
float h = max - min;
if (h > 0.0f) {
    if (max == r) {
        h = (g - b) / h;
        if (h < 0.0f) {
            h += 6.0f;
        }
    } else if (max == g) {
        h = 2.0f + (b - r) / h;
    } else {
        h = 4.0f + (r - g) / h;
    }
}
h /= 6.0f;
float s = (max - min);
if (max != 0.0f)
    s /= max;
float v = max;

HSVからRGBへの変換

編集

H沿0.0360.0SV0.01.0(H,S,V)(R,G,B)

S0.0RGBVH

 

 

 

ソフトウェアでの変換処理

編集

以下の処理を行うことで変換することができる。

※HSV/RGBを0.0~1.0の浮動小数点数で表現した円柱モデルの場合[要検証]

// (float h, float s, float v)
float r = v;
float g = v;
float b = v;
if (s > 0.0f) {
    h *= 6.0f;
    final int i = (int) h;
    final float f = h - (float) i;
    switch (i) {
        default:
        case 0:
            g *= 1 - s * (1 - f);
            b *= 1 - s;
            break;
        case 1:
            r *= 1 - s * f;
            b *= 1 - s;
            break;
        case 2:
            r *= 1 - s;
            b *= 1 - s * (1 - f);
            break;
        case 3:
            r *= 1 - s;
            g *= 1 - s * f;
            break;
        case 4:
            r *= 1 - s * (1 - f);
            g *= 1 - s;
            break;
        case 5:
            g *= 1 - s;
            b *= 1 - s * f;
            break;
    }
}

関連項目

編集