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 構造体が wavelet, 変換すべきデータが data,とび数 (stride) が 1,データ数が N, 作業領域が w.N は2の累乗である必要がある.
gsl_wavelet_transform_forward(wavelet, data, 1, N, w);2次元の非標準ウエーブレット変換
引数は順に,ウエーブレット構造体 w,データ配列 data,行の先頭間の距離 tda,行数 size1,列数 size2,作業領域 work である.
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);