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値の差を彩度で割ると色相が算出されるのでしょうか.
どなたか分かる方,回答よろしくお願い致します.
A 回答 (2件)
- 最新から表示
- 回答順に表示
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)」になります。
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の時)
となります。
回答ありがとうございます.
よく意味が分からない点があります.
冒頭で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))
の変換式はどこから出てきたのでしょうか?
理解が足りず申し訳ありませんが,追加説明をお願い致します.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- 数学 X_1,…X,nを独立で同じ確率分布に従う確率変数列とする。 Xmin=min{X_1,…,Xn}, 5 2023/01/13 22:00
- オープンソース cssで中央寄せ 1 2023/05/19 06:25
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- 車検・修理・メンテナンス 冷却水のリザーブタンクが全く見えない位置にあるのでラジエターキャップの縁スレスレまで冷却水を補充して 4 2023/02/07 22:03
- Excel(エクセル) エクセル2019の関数を教えてください。 8 2022/12/16 12:45
- 自転車修理・メンテナンス マウンテンバイクのタイヤについてです。タイヤを細いスリックタイヤに変えたいのですが、スポークも変えな 2 2022/04/12 18:19
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
極大値・極小値 を英語で
-
数学 2時間数に関わる問題につ...
-
x^3+y^3+z^3の最大最小
-
sup()とmax()の違い
-
MOS365 Excel Expert / Excel R...
-
Ankerのケーブルについて Anker...
-
①とても初歩的なことなのですが...
-
小学5年算数。階乗の関数
-
なぜ減点なのか。
-
なぜ、最小値がないのかが分か...
-
数学II sinθ=tとおくと0≦θ<2πで...
-
数値データの規格化
-
楕円において短半径は焦点から...
-
正則だから、有界?
-
aを正の定数とし、f(x)=x²+2(a-...
-
数Ⅱ 微分法について このような...
-
1155を最大で何個の連続する正...
-
確率の最大について。 1個のさ...
-
数的推理 整数 問題 4個の自然...
-
上界と上限と最大値の違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
極大値・極小値 を英語で
-
小学5年算数。階乗の関数
-
aを正の定数とし、f(x)=x²+2(a-...
-
MOS365 Excel Expert / Excel R...
-
なぜ、最小値がないのかが分か...
-
①とても初歩的なことなのですが...
-
数学I y=-(x^2-4x+1)^2+2x^2-8x...
-
(2)の問題を解くときに、最初...
-
マルチディスプレイ【2台】に...
-
上界と上限と最大値の違い
-
3σと最大値,最小値
-
数値データの規格化
-
基本情報処理 平成27年春期 ...
-
数学 2時間数に関わる問題につ...
-
max,minの意味
-
はめあいの『最大すきま』と『...
-
y=-|x-2|+3のグラフで 問題 ...
-
最大値=∞ というように無限を解...
-
正と負の数値が混在する中で、...
-
数学の表記の表し方で最大値と...
おすすめ情報