« Flash-AS3でBitmapData読み込み | トップページ | ■n乗,1/n乗グラフ・ツール »

◆波長(スペクトル)RGB変換プログラムコード

光の波長(スペクトル)からRGB値を導く簡易プログラムです。


この方法は◆2色型色覚の画像表現法;色覚シミュレータ でスペクトル図をビットマップデータとして得るために使っています。

参考までに波長を選択しRGBを得るUIを付けたものを下に載せます。スライダーまたは 波長数値入力で波長を指定するとRGB値、XYZ値と色が表示されます。
なお、RGBテーブル生成時のガンマ補正値を変更可能としています。R,G,Bそれぞれ 別々に設定することができます。代表値を変更するとR,G,Bに同じ値が設定されます、

 定数テーブルと関数

10nm毎のテーブルを作成し、中間は線形補完しています。
下に載せた関数はAS3用ですが、他の言語への転用は難しくないはずです。
引数はnm単位の波長で380≦λ≦780,戻り値はR,G,Bそれぞれ0.0≦v≦1.0の浮動少数値です。

 テーブルのグラフ表示

波長ごとのRGB感度を示します。

このグラフは、RGBテーブルをExcelに読ませてグラフ化したものです。
プログラムはガンマ補正値が1/2.7で、このテーブルは1/2.2であり、 差はありますが、見た目としてグラフに大きな差はありません。

 RGBで画像化する例

AS3で画像に出す例を載せます。冒頭のスペクトル図はこのプログラムで出したものです。

 テーブルを作成するプログラム

波長/RGB変換テーブルは、 波長から三刺激値(XYZ値)を得、それをRGBに 変換したものです。
三刺激値のテーブルは理科年表から得ました。
今回ガンマ補正を(1/2.7)乗 の形で行ってあります。この値は少し調整が必要かもしれません。
RGBテーブル作成とその利用を別プログラムとしてありますが、 もちろん、初期化と利用の形の単一プログラムとしてもかまいません。

 XYZテーブル

三刺激値のグラフを載せます。

小さな値が見づらくXとYの広がりが分からないので、対数軸にしたグラフも載せます。


 ###

(2009/6/16) ExcelによるRGB感度図を追加。プログラムを表示/非表示とした。

(2009/6/21) XYZ図に対数軸版追加

(2011/6/25) 波長、ガンマ補正値を指定するUI付きプログラムを追加

(2011/7/2) XYZ値(3刺激値)も表示するようにした

(2011/11/18) ガンマ補正値を2.2から2.7に変更


|

« Flash-AS3でBitmapData読み込み | トップページ | ■n乗,1/n乗グラフ・ツール »

コメント

無学なのですが、レーザーを購入し(650nm)このスクリプトと比較しましたところ
全然色が違うように思われました
実物は真っ赤であるのにスクリプトによって表示されたものは黒成分が入ってえんじ色になっています
感度図のピークを右にずれたことをR***の値を下げて反映しているものと思いますが実際は赤成分だけを刺激する光ということで強弱関わらず綺麗な赤色です
とはいえ一般に普及しているスペクトル図が得られているわけですからどうしたらいいものか私にもわかりせん
小話程度に

投稿: まったく素人 | 2014年2月22日 (土) 23時29分

びっくりしたまま、変な投稿をしてしまいました
しかし他の波長の色も十分な光量が得られるとすれば印象が違うのでしょうね
モニターのバックライトとかも関係するのでしょうが

投稿: まったく素人 | 2014年2月22日 (土) 23時44分

610nm辺りからはほぼ純粋な赤となっています。
ただし、徐々に感度が落ち暗くなります。
レーザー光が強いため650nmでも明瞭な赤が見えているものと思われます。
正確に色相を保持するわけではありませんが、例えばガンマ補正値を30くらいに設定すると610nmから上は単純な赤となります。
全体に渡り色相を保ちながら輝度を一定にする仕組みもその内いれようと思います。

投稿: 万象酔歩 | 2014年2月23日 (日) 04時35分

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: ◆波長(スペクトル)RGB変換プログラムコード:

« Flash-AS3でBitmapData読み込み | トップページ | ■n乗,1/n乗グラフ・ツール »