このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

RGB-HSBの変換アルゴリズム

発言者:野本夏俊
( Date Monday, June 15, 1998 14:50:27 )


RGBからHSB(各0〜65535)への変換式をご存じの方がいらっしゃいましたら
教えてください。
S、Bは解ったんですがHはどうやって求めたらいいんでしょう?

ちなみにHSB=Hue,Sat,Briとして
Bri=MAX(R,G,B)
Sat=ROUND(((K2-MIN(R,G,B))/Bri)*255)*257(ただしBri=0ならば0)
で、あっていると思うんですが、あってます?

モリヤ さんからのコメント
( Tuesday, June 16, 1998 18:34:55 )

 自分では理解していないので,本の紹介だけ。

 色相の偏角を正六角形で近似して求めるアルゴリズムが,以下の本の
154ページに載っていました。
○冨山学「Macintoshの理屈」アスキー出版局

 また,この本の参考文献によると,
○Steven Harrington「アルゴリズムとプログラムによるコンピュータ
 グラフィックス」マグロウヒル出版
にも記述があるそうです。

モリヤ さんからのコメント
( Tuesday, June 16, 1998 18:38:35 )

>色相の偏角を正六角形で近似して

→「色相の偏角を正六角形の辺に沿った距離で近似して」です。
スミマセン。

野本夏俊 さんからのコメント
( Wednesday, June 17, 1998 14:56:10 )

> 色相の偏角を正六角形で近似して求めるアルゴリズムが,以下の本の
>154ページに載っていました。
>○冨山学「Macintoshの理屈」アスキー出版局

モリヤさんありがとうございます。
実はシェアウェア作家のためのMLにも同じ質問をポストしていまして、
(ぼくはシェアウェア作家ではなく趣味のスクリプター程度のもんですけど)
同様の回答をモリヤさんの数時間前にいただきましたので、モリヤさんがお答え
下さった時刻にはちょうどこの本を手にしていたあたりではなかったかと思います。

これ、すごくいい本ですね。昨晩読み始めてから興奮しっぱなしです。
RGB-HSBに関してももちろん役にたったのですが、本としてすごく面白いです。

Hを正確に求めるにはRGBベクトルの合力の方向を算出する必要があるんだと
思うんですが、(数学と物理に関して高校入学直後で知識が止まってしまったので、
三角関数を駆使した正確な式はまだ解っていません....)CADで実際に作図して
得られた結果と、カラーピッカーに表示される変換値には結構違いがあるので、
(CADの誤差と見るには違いが大きい)何か違ったアルゴリズムが使われて
いるらしいとは薄々感づいていたんですが、正六角形で近似計算をするなんて、
この本を読まなければ一生わからなかったでしょう。
近似計算では平方根や逆三角関数計算が不要になるため、処理時間は短縮されるし、
もともと24ビットしか必要ない値を48ビットで計算するので必要な精度は保たれる、
ということなんでしょうね。デジタルならではのトリックですね。

当面の問題は解決しましたが、これから逆変換と、厳密なアルゴリズムをじっくり
考えて見ようと思っています。(「アルゴリズムとプログラムによるコンピュータ
グラフィックス」は残念ながら手に入らなかったんです。)
ご協力ありがとうございました。