GSL (GNU Scientific Library) のウエーブレット変換
GSL の機能の中から,ウエーブレット変換に関する機能について,一部分を紹介する.
GNU Scientific Library -- Reference Manual の 30 章 「Wavelet Transforms」
前準備
GSL のインストール
Windows での GSL のインストール(ソースコードを使用)(MSYS2,configure,make を利用): 別ページ »で説明
ウエーブレット変換
【要点】
- gsl_wavelet 構造体は,ウエーブレットを定義するフィルタ係数と,関連するオフセット・パラメータを保持する.
- 下の1行は必須
#include<gsl/gsl_wavelet.h>
- gsl_wavelet 構造体の確保と初期化
タイプ T, パラメータ k からgsl_wavelet 構造体の確保と初期化を行う k を使って,ウエーブレット・ファミリの中から特定の要素が選択される.
gsl_wavelet *wavelet = gsl_wavelet_alloc(T, k)
ウエーブレットのタイプは以下の通り- gsl_wavelet_daubechies
- gsl_wavelet_daubechies_centered
Daubechies ウエーブレット・ファミリ. k は 4, 6, ..., 20 の偶数. k/2 を消失モーメント(vanishing moments)とする 最大位相 (maximum phase) のDaubechies ウエーブレットになる.
- gsl_wavelet_haar
- Wavelet: gsl_wavelet_haar_centered
Haar ウエーブレット. k=2 である必要がある.
- gsl_wavelet_bspline
- gsl_wavelet_bspline_centered
位数 (order) (i,j) の biorthogonal B-spline ウエーブレット. k = 103, 105, 202, 204, 206, 208, 301, 303, 305 307, 309 のいずれか. 但し,k = 100*i + j (100の位が i,1の位が j).
centered を指定すると, 種々のサブバンド (sub-band) の係数を,境界 (edge) にそろえる.
- gsl_wavelet 構造体の解放
gsl_wavelet_free(wavelet);
- ウエーブレット変換用の作業領域の確保
サイズ N の作業領域.(N 個の要素を持つ1次元のウエーブレット変換,N × N 個の要素を持つ 2 次元のウエーブレット変換.2 次元では,行単位,列単位で処理が行われるので,作業域は N で足りる).
gsl_wavelet_workspace *w = gsl_wavelet_workspace_alloc(N);
- 1次元のウエーブレット変換
gsl_wavelet 構造体が w, 変換すべきデータが data,とび数が 1,データ数が N, 作業領域が w.N は2の累乗である必要がある.
gsl_wavelet_transform_forward(wavelet, data, 1, N, w);
2次元の非標準ウエーブレット変換
int gsl_wavelet2d_nstransform_forward (const gsl_wavelet * w, double * data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work)
- ウエーブレット変換用の作業領域の解放
gsl_wavelet_workspace_free(w);