• ベストアンサー

RGB値から周波数を算出することは可能でしょうか?

RGB値から周波数を算出することは可能でしょうか? BMP画像からRGB値を抽出して、画像の周波数分布を得られないかと思い プログラムを作成しています。 RGB値を抽出することは出来たのですが、肝心の周波数を得る方法がわかりません。 このような考え方はそもそも間違いでしょうか? 光学に関する知識がないため、頓珍漢な質問かもしれませんが わかる方、よろしくお願いします。

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

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

下記ページの右図(CIExy色度図におけるsRGB(三角形の内側)とCMY(白線の内側)の範囲) を見てください。 http://ja.wikipedia.org/wiki/%E8%89%B2%E7%A9%BA%E9%96%93#sRGB_.2F_AdobeRGB 中央の「D65」が白色で、黒線三角形の3頂点が「R」「G」「B」それぞれの単色値になります。 そして、その三角形の外側の、右端→上→左→下とたどる曲線に書かれている数値が 単色な光の波長になります。 画像から取得したRGB値が、「RとGの混ぜあわせ」(右上辺側)か「GとBの混ぜあわせ」(左上辺)であれば、白(中央の点)からその色の点を延長した先が、どの波長の色にあたるかを調べることで、 「その色を原色にした時の光の波長」を求めることができます。 ですが、「RとBの混ぜあわせ」(右下辺側)の色については、その色の伸ばした先に波長が書かれていません。 これは、「その色を表す単一の波長の光」が存在しないことを意味します。 この領域の色は、波長(周波数)で表現することができないのです。 このように、RGB値で表現された「色」は 光の波長(周波数)での表現にすることは不可能なのですが、 画像の傾向を調べるのであれば、波長にこだわることはないでしょう。 HSV色空間では「H値」が色を表すパラメータになりますので、 RGBからHSVに変換して「H値の分布」を求めれば、ほぼ質問者さんの求めるものになるかと思います。 http://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93 (H値は、0度~240度あたりが、前述の説明の「波長700nm~380nmの単色」に対応し、 240度~360度あたりが「単一波長の光では表現できない色」に対応します。)

nan-nanan
質問者

お礼

回答ありがとうございます! RGB値から波長を表現するのは 不可能なんですね. mtaka2さんのおっしゃる通り,H値で代用可能だと思います. ありがとうございました!

その他の回答 (2)

  • BookerL
  • ベストアンサー率52% (599/1132)
回答No.2

 RGBでいろんな色を表せるのは、人間の目に色を感じる視細胞が3種類あるからです。赤と青で紫になるのは、紫の光が来たときに反応する視細胞と、赤と青の光が同時に来たときに反応する視細胞が同じになるからです。  この場合、紫の光の波長と赤・青の光の波長の関連が、簡単に表せるような気がしません。

noname#185706
noname#185706
回答No.1

R, G, B の波長を λR, λG, λB、画像のある点での強度を IR, IG, IB とすると、その点での平均波長 <λ> は <λ> = (IR * λR + IG * λG + IB * λB) / (IR + IG + IB) のように、強度の重みをつけた平均として求め得るように思います。 ここで留意しないといけないのは、例えば、紫色は単色(ひとつの波長)でも出ますが、赤や青が適当な比率で混ざっても人間の目には紫に見えうるということです。紫は単色の可視光としては波長がもっとも短いものなので、RGB 値で表現する場合には混合色として扱わざるを得ません。そうすると、上式で求められる紫の波長なるものは、単色の紫の波長とは似ても似つかないものになってしまいます。・・・それでよいのかどうかは、素人の私にはわかりません。 ご質問の趣旨に合っていないかもしれませんが、ご参考になれば幸いです。

nan-nanan
質問者

お礼

回答ありがとうございます. 平均波長という指標があるとは知りませんでした. 参考になりました!

関連するQ&A