Flashで真面目に画像解析/信号処理をやろうとすると、線形代数や統計解析のライブラリが欲しい所です。
CやJavaならオープンソースでたくさんあるし、それらは十分にレビューされていて信頼性も高いですが、
Flashだとあまり需要がないからなのかほとんど話題になっていないみたいです。
個人的にはあったらぜひ使ってみたいなと思ったのでちょっと探してみました。
・Projects Open Source Flash
・Spark project
をひととおり見て気になったのが3つ。
・as3mathlib (New BSD License)
・as3matrix (GPL)
・Statistics
ライブラリ名が直球でわかりやすくて良いですね。
まずはas3mathlib。各種数学演算のルーチン集です。
その中にフーリエ変換のクラスがあったので簡単に紹介。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import com.vizsage.as3mathlib.math.calc.*; ・・・ var N:int = 1024; var re:Array = []; var im:Array = []; for(var i:int=0; i<N; i++){ re[i] = 6*Math.cos(6*Math.PI*i/N) + 4*Math.sin(18*Math.PI*i/N); im[i] = 0; } // 一次元フーリエ変換,public staticのメソッド // 第二引数はデータ数,ここでは 2^10(=1024)個 Fourier.fft(1, 10, re, im); ・・・ // 一次元逆フーリエ変換,第一引数に-1を指定 Fourier.fft(-1, 10, re, im); ・・・ |
ソースを見ると、三角関数テーブル等を使っていない簡易実装の複素FFTになっていて、
速度は以前自分で書いたもの (FFT.as) と比べて3倍ほど遅かったです。
同じクラスにDFTもわざわざ別に実装されているところを見ると、
実用の為ではなく、理論勉強用に作られたんじゃないかなと思います。
さらに、ライブラリ全般に渡ってAS3.0用の最適化があまりされておらず、
AS2.0からほとんどそのままAS3.0に移植されたのがよくわかります。うーん;;
機能は豊富なんですが、実装面では十分にテコ入れされるべきライブラリだと思いました。
次はas3matrix。名前からわかるように各種行列演算ができるライブラリです。
ただ、行列演算用のクラスはas3mathlibにも用意されているので、
このライブラリでできることはas3mathlibでもひととおりできます。
現在、as3matrixでしかできないことはQR分解と特異値(SVD)分解くらい?
とりあえず一応紹介だけ。
(QR分解のサンプルコードはas3matrixのTestフォルダ内にあります。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import src.Decompositions.SVD; import src.Matrix; import src.Vector; ・・・ var A:Matrix = new Matrix(); A.addVector(new Vector(1,4,7,10)); A.addVector(new Vector(2,5,8,11)); A.addVector(new Vector(3,6,9,12)); A.lock(); trace(A); // 特異値分解, A = USV var svd:SVD = new SVD(A); trace(svd.getSingularValues()); // 特異値を返す trace(svd.U); trace(svd.S); trace(svd.V); trace(svd.rank()); // ランクを返す ・・・ |
最後はStatistics。コメント文が日本語だとほっとします。
これもその名のとおり統計解析を行うライブラリです。
構成を見る限りでは主成分分析もできるみたいで便利そうだし、
基本的な行列演算用のクラスが用意されているのもポイントが高いです。
ただ、最新のリビジョンは削除されてる模様、、どんな状況なんだろう。
僕にはライブラリを作る技術も器量もないので、こういうのを作って公開している人は尊敬します。
自分用に作るのとは心持ちが全然違うんだろうなぁ。。