• ベストアンサー

波長からRGB変換

ある波長(または波長域)の光の色をディスプレイ上で再現するとしたら、 そのRGB値(またはCMYなど)はどのように求めればいいのでしょうか。 そもそも機械的に算出できる数式などあるのでしょうか。 どなたかご存知の方、ご教授下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • sanori
  • ベストアンサー率48% (5664/11798)
回答No.3

>具体的にやりたい事は、例えば波長が510nmの黄色を >画面上に忠実に再現するにはどうすればいいのか、 という事です。 #1さんへのメッセージのようですが、#2の私がお答えします。 さきほどの私の回答に示していた、RGB等色関数のグラフ http://upload.wikimedia.org/wikipedia/commons/3/36/CIE1931_RGBCMF.png において、r、g、bの値を読み取ります。 さて、ここからが問題なのですが ディスプレイの階調(256階調の場合は、真っ暗の0階調~一番明るい255階調)は、階調の値に比例して光の強度が強くなっているわけではありません。 通常、階調の値の2~3乗に比例して明るさが増していくように設定されています。(これをγ(ガンマ)と言います) おそらく、最近のディスプレイのγは2.7ぐらいではないかと思います。 ですから、510nmのr、g、bをグラフから読み取ったら、各々の2.7乗根(=2.7分の1乗)を電卓とか表計算で求めます。 この結果を、仮にr1、g1、b1と置きます。 あとは、r1、g1、b1に、あなたのお好きな任意の数を掛け算すれば、RGB値が求まることになります。 なるべく明るいのを出したいとすれば、510nmでは。3つの中でgが最大なので、上記のg1が255ちょうどになるようにすればよいです。 なお、等色関数のグラフにおいて、510nmでは、rの値がマイナスになっていますが、(←これについての説明はご容赦ください)、マイナスの明るさを出すのは不可能なので、r1はゼロにするしかないです。 ・・・・・・・・・・ところで、 黄色は510nmでなくて、570nm付近だと思うんですけど・・・。

uratak
質問者

お礼

正にこれです! γ値やXYZ表色系など、もっと勉強したいと思います。 的確な回答、ありがとうございました。 ちなみに、ご指摘の通り 黄色の510nmは間違いでした。 510nmであればもっと緑がかってしまいますね...

その他の回答 (2)

  • sanori
  • ベストアンサー率48% (5664/11798)
回答No.2

#1さんの示されたリンクの18、19ページに載っている式は、XYZ表色系からRGBへの変換公式です。 ですから、XYZの値がわかっていれば、RGBの値は求まるわけです。 しかし、問題は、計算の元となるXYZをどう求めるかです。 #1さんの示されたリンクの10ページにXYZを求める式があります。 ところが、積分の中にあるx(λ)、y(λ)、z(λ)(λは波長です)という関数(等色関数)は、数式で表わすことの出来ない、経験則による関数です。 たしかに、ディスプレイの性能評価に用いられる分光計でも、機器レンズに入射した光の色のxyz値が瞬時にわかるようになっています。 では、xyzは、どのように求まったか?という疑問が発生します。 その答えは、数値表です。 等色関数の数値表は、色彩科学の専門書に載っています。 (ネットで数値表を探しましたが、残念ながら見つかりませんでした) 要するに、XYZを求める式は、いかにも格好よい積分で表わされていますが、 その実体は、波長を例えば1ナノメートル区切りにして、各波長の等色関数を既定の数値表から探してきて、それと、光源のその波長における強度とを掛け算したものを求め、それを可視光の全ての波長について地道に足し算したものなのです。 以上は、光源の光が単波長でなく、色々な波長が混ざっているときの話ですが、 単波長については、実は、XYZ表色系のグラフ(色度図)の中に、そのものズバリの波長値が書いてある場合があります。 #1さんの示されたリンクの中の図にも書いてありますが、ちょっと読みにくいので、別のリンクを紹介しましょう。 下記リンクの、上から2番目と3番目の図です。 http://www.shokabo.co.jp/sp_opt/spectrum/color3/color-d.htm ↓ 色度図の外周部分のうち、放物線に似た形でカーブしているところがありますが、そこに書いてある数値が波長を示しています。 ちなみに、外周部分のうち、直線になっている部分がありますが、そこは、現実にはない波長です。 色度図外周に近づくほど彩度が高い色(いわば原色、純色)であり、逆に、混色することによって色度図中央に近づくほど、彩度が低くなって白に近づいていきます。 なお、XYZ値からの計算を経由せず、いきなりRGBの等色関数を示した数値表(グラフ)もあります。 下記は海外サイトですが、そのグラフが書かれています。 http://en.wikipedia.org/wiki/CIE_1931_color_space (The CIE 1931 RGB Color matching functions というタイトルのグラフです。) 拡大版は下記。 http://upload.wikimedia.org/wikipedia/commons/3/36/CIE1931_RGBCMF.png 以上ですが、 文献を探すとかの手間ひまかけず、とりあえず単波長についてXYZないしはRGBの値を求めたい、という目的であれば、上記で説明した図から眼で拾う方法しかなさそうです。

  • N64
  • ベストアンサー率25% (160/622)
回答No.1

http://www.yokogawa.co.jp/tm/Bu/3298F/3298_ppt1.pdf#search='豕「髟キ%20・イ・ァ・「%20髢「謨ー' の、P18、P19あたりに載っている記事が、それではないかと思います。

参考URL:
http://www.yokogawa.co.jp/tm/Bu/3298F/3298_ppt1.pdf#search='豕「髟キ%20・イ・ァ・「%20髢「謨ー'
uratak
質問者

補足

回答ありがとうございます。 波長からXYZ値が求められればCIEのXYZ表色系でいいのですが、 それができずに困っています... 勉強不足なだけかもしれませんが。 具体的にやりたい事は、例えば波長が510nmの黄色を 画面上に忠実に再現するにはどうすればいいのか、 という事です。 よろしくお願いいたします。

関連するQ&A