2009-04-10[n年前へ]
■分光スペクトル・色処理用のMathematica 7.0用ライブラリ
以前、「光スペクトル操作用のMathematicaライブラリ」というものを作りました。また、その習作として「スペクトル処理で遊ぶためのMathematicaノートブック」というノートブックを書いたことがあります。さまざまなスペクトル分布と持つ可視光を重ね合わせたり、塗り重ねたりしたとき、どんな色に見えるかを簡単に計算できる、しかもなるべく単純でいて応用しやすいようにしたい、と思いながら書いてみたライブラリです。
たとえば、D65光源のもとで、赤紫色の絵具を重ね塗りしていったときの色の変化を CIE Lab 空間のグラフで眺めるには
labPlot[ Map[lab,Table[ transmissionSpector[D65, magentaFilter, d], {d,0,10.0,0.1}] ] ];というコードを書けば良い、という具合です。ちなみに、「スペクトルデータ」はすべて純関数で表現する仕様にしてあるので、上記のコード中のD65もmagentaFilterも実体としては「関数」です。そのため、波長の離散化も不要ですし、((D65[#]+D50[#])/2)&といったような数式風に書けば、D65とD50の平均のような照明光を表現することもできます。
ちなみに、このライブラリはMathematica 5.2で作ってみたものです。最近、Mathematica 7.0も使いだしました。すると、グラフィックス関連の関数の機能変更がたくさんあって、以前のライブラリでは表示関係のライブラリが動作しないことに気付きました。そこで、Mathematica 7.0用の「光スペクトル操作用のMathematicaライブラリ for Mathematica 7.0」を(まずは)適当に作ってみました。それが、ColorLib_amature on 7.0.nb (263kB)になります。
ところで、Mathematica 7.0では、インタラクティブなアプリケーションも簡単に作成できるということなので、ColorLib_amature on 7.0.nbを使って、「D65光源の下で、白色紙の上にシアン色とマジェンタ色を塗り重ねていくとどんなスペクトルになるか」を表示するインタラクティブ・アプリケーションを作ってみました。その動作画面が、下の動画になります。上のスライダーがシアンを塗り重ねる量で、下のスライダーがマゼンタを塗り重ねる量を示しています。それぞれのスライダーを動かすと、「どんなスペクトルになるか」がグリグリと表示されます。
さて、次回は、Mathematicaで作ったアプリケーションを誰でも使える形にして配布できるようにしてみたい、と思います。
2009-04-13[n年前へ]
■分光スペクトル・色処理のデモ・インタラクティブ・アプリケーション
分光スペクトル・色処理用のMathematica 7.0用ライブラリを使った「デモファイル」を、誰でも操作できるインタラクティブ・アプリケーション」に変換してみました。変換したファイルは、ColorLib_amature+on+7.0demo.nbp(124kB)として置いておきます。
実行には、 Mathematicaノートブック実行用の無料インタラクティブプレーヤー Mathematica Player が必要です(ダウンロードページ)。Windows 2000/NT/XP/Vista, Mac OS X 10.4以上, Linux 2.4以上で実行することができます。下の「実行画面」動画のように、「D65光源の下で、白色紙の上にシアン色とマジェンタ色を塗り重ねていくとどんなスペクトルになるか」を表示することができます。
不具合などありましたら、教えて頂ければ幸いです。
2009-06-25[n年前へ]
■Mathematicaで発色シミュレーションをオブジェクト風記述にするライブラリ
以前作った、「分光スペクトル・色処理用のMathematicaライブラリ(関数群)」を利用して、「Mathematicaで発色シミュレーションをオブジェクト風記述にするライブラリ」を作りました。前回書いたように、三次元構造の中で反射・屈折・散乱を行う「光」のスペクトルが、どのように変化していったかを知ることができます。
ライブラリは、Imagearts.2.5.nb(3.7MB)として、サイト上にアップロードしてあります。このファイルには、関数・オブジェクト定義に加え、いくつかのサンプルが入っています。
たとえば、「4層構成の物質(Layer)があり、それらの層はすべて透明だけれども、その中間層2層の散乱度合いを変えた場合」のシミュレーションを複数条件下でしたければ、下記のようなコードを書けばOKということになります。
layers[sc_] := (z = #[[3]]; Piecewise[{ {{1, 0,Spector[new][set,transparentFilter]}, z > 1}, {{1, sc,Spector[new][set, transparentFilter]}, 1 >= z && z > 0.5}, {{1, sc,Spector[new][set, transparentFilter]}, 0.5 >= z && z > 0}, {{1, 0,Spector[new][set, transparentFilter]}, 0 >= z} } ]) &;
Table[Light[new][in,Layer[new][set,layers[i]]][showTrace], {i,0,1,0.1}]
ここでは、最初に層構成を純関数として定義し、その純関数を使い、条件を変えたオブジェクトをTableで作成し・計算を行っています。
なお、現状のライブラリは、表面形状は水平平滑に限る、という単純なコードになっています。表面凹凸対応は、また気が向いた(近い)時期にしてみよう、と思います。
2009-10-16[n年前へ]
■Mathematica Player用.nbpファイルに埋め込まれた画像データのナゾ
Wolfram社の数式処理プログラムで作られたファイルをWolfram社のサーバに送信すると、(無料で使える)MathematicaMathematica Playerを使って誰でもインタラクティブにグラフなどを処理させて眺めることができます。通常のMathematicaファイルは.nbという拡張子を持つファイルですが、Wolfram社のサーバで処理された「誰でもインタラクティブに眺めることができるファイル」は、.nbpという拡張子を持つ形式になっています。
この「nbpという拡張子を持つ形式のファイル」の中身が何をさせるものなのかかを調べてみたときに、不思議なことに気付きました。一見、元のファイルと何の関係もなく、特に表示されているわけでもない、不思議な圧縮データが埋め込まれているのです。
そこで、ためしに、その圧縮データの中身を展開し、画像として眺めてみました。・・・すると、右上の赤い部分のような画像になったのです(黒いテキストがテキスト文として圧縮されたデータです)。
おやおや?、この画像は、何かアルファベットのように見えます。そこで、ひっくり返してみると、右のようになります。そう、「Wolfram Mathematica Player」という画像データが圧縮されて、.nbp形式のファイルには埋め込まれているのです。一見、特に何に使われるわけでもない「Wolfram Mathematica Player」という文字が埋め込まれているのです。
さて、.nbpファイルに埋め込まれているこの圧縮画像データは、一体何のために使われているのでしょうか? 何らかの著作権対策のためだろうか(昔のファミコンのカートリッジの海賊版対策のような)、などと想像してみたのですが、本当のところは何のためにこのような作りになっているのでしょうか…?