実は、ウェーブレットの事を調べていて、別階級のウェーブレット係数は、そのままでは比較できない事、もし比較する場合には、変換作業が必要であることがわかりました。その変換作業を用いることで認証制度の向上に取り組んだわけです。
スケール係数の比較は不要
スケール係数の数値を変更して確認してみました。以下がその画像です。※白線:無加工 ※黄線:スケール係数+0.05 ※赤線:スケール係数+0.1
この画像でわかるとおり、波形の形状には変化がなく、位置が変化したにすぎません。その為、パターン認証では不要な要素であることがわかります。
ウェーブレット係数の変換作業
まず、変換作業に使用する重みを作成しました。これは、ウェーブレット変換する際に乗算されるsqr(1/√2=0.70710678)を各階級に応じて除算するものです。
変換作業を画像で見てみると、以下の図のとおりとなります。
実際に使用するのは、黄線のように高周波成分を削除した形の物を使用するわけです。
認識精度の確認
前回のコードに上記コードを追加し、以下のコードを修正します。赤線が変更箇所です。ちなみに、y=0から1に変更したのは、g[0]に格納されているスケール係数を排除するためです。
結果を見ると、上図が、変更前で下図が、変更後のチャートです。
※赤線:基本波形 ※黄色:一番近い過去の波形 ※白線:2・3番目に近い過去の線 です。
【変更前】
【変更後】
使用した結果、1番近い過去の波形及び2番目と同じ波形を導いていますが、3番目の波形が異なることがわかります。(用いるデータが悪く変化がわかりづらい。。。orz)数値的には、悪くなっていますが、パターン認識の精度は、向上した、、、はずです。^^;
3 件のコメント :
重み付け関数のところで、「各階級に応じて除算する」部分だと思うのですが、 Wt=MathFloor(MathLog(index)/log2)+1;
のlog2という変数はどこで何を入れるのでしょうか?
alohafxさんへ
ホントですね^^;
すっかり抜けいていました....orz
実は、グローバル領域で、
【#define log2 0.69314718】
と宣言しているのを忘れていました^^;
本来は、MathLog(2) としておけばいいのですが、計算処理を省くために、定数化していました。
ファイルを上げておきます。
でわ(^o^)丿
https://docs.google.com/open?id=0B42sh1xkCfgtOGU1ZWJhZmUtYTU3ZS00Y2FmLWJjZDctNDQzZTg4NzIyYTAz
できました。
ありがとうございました。
コメントを投稿