重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

RGBからHSLのSを求めたいのですが、(MAX-MIN)/(1-|MAX+MIN-1|)部分が良く分かりません。
https://ja.wikipedia.org/wiki/HLS%E8%89%B2%E7%A9 …

例えば、下記で、89.3はどうやって導き出すのでしょうか?
・RGB Decimal 12, 213, 101
・HSL 146.6°, 89.3, 44.1

MAX-MIN
・213-12=201

MAX+MIN-1
・213+12-1=224

1-|MAX+MIN-1|
・-223

(MAX-MIN)/(1-|MAX+MIN-1|)
・201/-223=-0.90

A 回答 (2件)

Wikipediaのは 0≦ R,G,B,S,L ≦1.0 (つまり0〜100%) のときの式では?



0〜255というのは、0〜100%の実数をコンピュータで扱うのに便利な8bit整数に変換したもので、
理論的な話をするなら、0〜100%の実数のままで扱うことが多いです。

・RGB 12/255, 213/255, 101/255
・HSL 146.6°, 89.3%, 44.1%

S=(MAX-MIN)/(1-|MAX+MIN-1|)
=(213/255-12/255)/(1-|213/255+12/255-1|)
=0.893...
=89.3%

L=(MAX+MIN)/2
= ((213/255)+(12/255))÷2
= 0.441..
=44.1%


※ 0≦ dR,dG,dB ≦ m のとき、dR,dG,dBの最大値をdMAX,最小値をdMINとすると
R=dR/m
G=dG/m
B=dB/m
MAX=dMAX/m
MIN=dMIN/m
となります。

Hの式では分子と分母のmが約分されるので、 dX のまま計算しても同じ値が出ます

S=(MAX-MIN)/(1-|MAX+MIN-1|)
=(dMAX/m-dMIN/m)/(1-|dMAX/m+dMIN/m-1|)
=(dMAX-dMIN)/(m-|dMAX+dMIN-m|)

L=(MAX+MIN)/2
=(dMAX+dMIN/m)/2
=(dMAX+dMIN)/2m

精度やパフォーマンスを考えて、プログラムではこちらの式で記述されていることがあります。
    • good
    • 1
この回答へのお礼

・回答ありがとうございました

>精度やパフォーマンスを考えて、プログラムではこちらの式で記述されていることがあります
・大変参考になりました

お礼日時:2016/05/16 07:48

Sを0~100で表す方式と0~255で表す方式があり、この例では0~100で表す方式の様。



彩度はRGBの3値が同じ状態を0%とし、そこから彩度上昇にあわせて均等に広がっていって、RGBのどれかが0もしくは255に到達した段階で100%となる。
0%と100%が分かれば、あとは現在の値が変動幅のうちの何%になるのかを調べれば彩度が求まる。

彩度0%のときのRGB値は、R・G・Bのうち最も大きな値をMAX、最も小さな値をMINとして (MAX + MIN) ÷ 2つまり灰色。
これをCNTとする。

上記の式で求められた値から彩度上昇にあわせて最小値・最大値が等速で広がっていき、最小値が0、もしくは最大値が255に到達した段階で彩度100%。この変動幅は(MAX + MIN) ÷ 2になる。

この変動幅に対して現在の値の比率が解れば答え。途中式を省略すると
比率= (CNT - MIN)/ 変動幅= (MAX - MIN) / (MAX + MIN)


RBG=(12,213,101)だからMIN=12,MAX=213を代入
比率=(213-12)/(213+12)=0.8933333・・・・

Sを0~100で表す絶対値では0.8933333・・・・×100=89.3
    • good
    • 1
この回答へのお礼

・回答ありがとうございました

> (MAX + MIN) ÷ 2つまり灰色。これをCNTとする
・そういう意味なんですね

>変動幅に対して現在の値の比率が解れば答え
・大変参考になりました

お礼日時:2016/05/16 07:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!