• 締切済み

RGB値からHSV値への変換式に関して質問があります.

RGB値からHSV値への変換式に関して質問があります. S=MAX[R,G,B]-MIN[R,G,B] V=MAX[R,G,B] の2式は分光分布を見れば,その式の意味は理解できました. ただ, H=60*(G-B)/(MAX[R,G,B]-MIN[R,G,B]) if R=MAX[R,G,B] H=60*(B-R)/(MAX[R,G,B]-MIN[R,G,B])+120 if G=MAX[R,G,B] H=60*(R-G)/(MAX[R,G,B]-MIN[R,G,B])+240 if B=MAX[R,G,B] の式の意味が理解できません. なぜ,最大値でない残りの2値の差を彩度で割ると色相が算出されるのでしょうか. どなたか分かる方,回答よろしくお願い致します.

みんなの回答

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

> 冒頭でS=1.0,V=1.0としたのには何か意味があるのでしょうか? 「純粋な「色」パラメータを考え」た結果です。 S(彩度)が低くなっていくと、無彩色に近づきなります。S=0は灰色(もしくは白や黒) V(明度)が低くなっていくと、暗くなります。V=0は黒色。 逆に「S=1.0、V=1.0」になっているのが「純色」です。 > R' = (R-MIN(R,G,B))/(MAX(R,G,B)-MIN(R,G,B)) > の変換式はどこから出てきたのでしょうか? 例えば「最小値0.3、最大値0.7で分布する数値」を「最小値0.0、最大値1.0に変換」する場合を考えます。 このとき「R-0.3」「G-0.3」「B-0.3」という式で「最小値0.0」に出来ます。 ただし、この三数の最大値は0.4(=0.7-0.3)です。 おそこで、さらにこの数値を0.4で割れば、最小値が0.0のまま、最大値が1.0になります。 つまり、「(R-0.3)/0.4」「(G-0.3)/0.4」「(B-0.3)/0.4」で、「最小値0.0、最大値1.0に変換」できることになります。 これを一般的な式で書くと「(R-MIN)/(MAX-MIN)」になります。

nan-nanan
質問者

お礼

回答ありがとうございます. 理解できました. 丁寧な回答ありがとうございます!

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

まず、RGB値から、SとVを除いた純粋な「色」パラメータを考えます。 言い換えれば、同じ色相でS=1.0、V=1.0になるようなRGB値。 これを(R', G', B')とすると、MAX(R',G',B')=1.0、MIN(R',G',B')=0.0になるわけですから、変換式は R' = (R-MIN(R,G,B))/(MAX(R,G,B)-MIN(R,G,B)) G' = (G-MIN(R,G,B))/(MAX(R,G,B)-MIN(R,G,B)) B' = (B-MIN(R,G,B))/(MAX(R,G,B)-MIN(R,G,B)) となります。 この(R',G',B')は、「最大値が1.0で最小値が0.0」ですから、言い換えると、「1つは1.0、1つは0.0、残り1つは0.0~1.0」です。 この「残り1つのパラメータがいくらになっているか」で「色」を表すことにします。 パターンとしては、 a) R'が1.0、G'が0.0、B'が0.0~1.0 b) R'が1.0、B'が0.0、G'が0.0~1.0 c) G'が1.0、B'が0.0、R'が0.0~1.0 d) G'が1.0、R'が0.0、B'が0.0~1.0 e) B'が1.0、R'が0.0、G'が0.0~1.0 f) B'が1.0、G'が0.0、R'が0.0~1.0 の6通りあるので、この6パターンそれぞれに60度ずつ割り当てることで、HSVにおける360度の「色相」となるのです。 ここで、 a)とb)は、「G'-B'」を計算すると   a)G'=0、B'=0~1.0 なので、G'-B'=0.0~-1.0   b)B'=0、G'=0~1.0 なので、G'-B'=0.0~+1.0 となるので、「G'-B'」が「-1.0~1.0」の範囲に分布するものとして、まとめて計算できます。 これを-60~60に割り当てます。式は H=60×(G'-B') です。この式に、G'、B'の定義を代入すると、 H=60×((G-MIN)/(MAX-MIN) - (B-MIN)/(MAX-MIN)) =60×((G-MIN)-(B-MIN))/(MAX-MIN) =60×(G-B)/(MAX-MIN) になります。 これが、RGBからHを求める式になります。この式を利用する条件は、R'=1.0の時、すなわち、R=MAX(R,G,B)の時です。 同様にして、 c)とd)をH=60~180に割り当てると、H=(B'-R')×60+120になり、その時のRGBからのHの算出式は H=60×(B-R)/(MAX-MIN)+120 (G'=1.0の時、すなわち、G=MAXの時) e)とf)をH=180~300に割り当てると、H=(R'-G')×60+240 になり、その時のRGBからのHの算出式は H=60×(R-G)/(MAX-MIN)+240 (B'=1.0の時、すなわち、B=MAXの時) となります。

nan-nanan
質問者

お礼

回答ありがとうございます. よく意味が分からない点があります. 冒頭でS=1.0,V=1.0としたのには何か意味があるのでしょうか? また, R' = (R-MIN(R,G,B))/(MAX(R,G,B)-MIN(R,G,B)) G' = (G-MIN(R,G,B))/(MAX(R,G,B)-MIN(R,G,B)) B' = (B-MIN(R,G,B))/(MAX(R,G,B)-MIN(R,G,B)) の変換式はどこから出てきたのでしょうか? 理解が足りず申し訳ありませんが,追加説明をお願い致します.