Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

dwt2

単一レベル 2 次元離散ウェーブレット変換

説明

dwt2 は、単一レベル 2 次元ウェーブレット分解を計算します。dwt2 と比較すると、wavedec2 の方が用途によっては便利な場合もあります。分解は、特定のウェーブレット (詳細については wfilters を参照) または特定のウェーブレット分解フィルターのいずれかに対して行われます。

[cA,cH,cV,cD] = dwt2(X,wname) は、wname ウェーブレットを使用して入力データ X の単一レベル 2 次元離散ウェーブレット変換 (DWT) を計算します。dwt2 は、Approximation 係数の行列 cA と Detail 係数の行列 cH (水平方向)、cV (垂直方向)、および cD (対角方向) を返します。

[cA,cH,cV,cD] = dwt2(X,LoD,HiD) は、ウェーブレット分解のローパス フィルター LoD とハイパス フィルター HiD を使用して単一レベル 2 次元 DWT を計算します。分解フィルターは、長さが同じで、サンプル数が偶数でなければなりません。

[cA,cH,cV,cD] = dwt2(___,'mode',extmode) は、拡張モード extmode で単一レベル 2 次元 DWT を計算します。この引数を他のすべての引数の後に含めます。

メモ

gpuArray 入力でサポートされているモードは、'symh' ('sym') および 'per' です。'per' 以外のすべての 'mode' オプションは 'symh' に変換されます。GPU での単一レベル 2 次元離散ウェーブレット変換の例を参照してください。

すべて折りたたむ

イメージを読み込んで表示します。

load woman
imagesc(X)
colormap(map)

Figure contains an axes object. The axes object contains an object of type image.

次数 4 の Symlet と周期的拡張を使用して、イメージの単一レベル 2 次元離散ウェーブレット変換を求めます。

[cA,cH,cV,cD] = dwt2(X,'sym4','mode','per');

垂直方向の Detail 係数と Approximation 係数を表示します。

imagesc(cV)
title('Vertical Detail Coefficients')

Figure contains an axes object. The axes object with title Vertical Detail Coefficients contains an object of type image.

imagesc(cA)
title('Approximation Coefficients')

Figure contains an axes object. The axes object with title Approximation Coefficients contains an object of type image.

イメージを読み込んで表示します。

load sculpture
imagesc(X)
colormap gray

Figure contains an axes object. The axes object contains an object of type image.

Haar ウェーブレットのローパス分解フィルターとハイパス分解フィルターを生成します。

[LoD,HiD] = wfilters('haar','d');

フィルターを使用して、単一レベル 2 次元ウェーブレット分解を実行します。半分の点の対称拡張を使用します。Approximation 係数と Detail 係数を表示します。

[cA,cH,cV,cD] = dwt2(X,LoD,HiD,'mode','symh');
subplot(2,2,1)
imagesc(cA)
colormap gray
title('Approximation')
subplot(2,2,2)
imagesc(cH)
colormap gray
title('Horizontal')
subplot(2,2,3)
imagesc(cV)
colormap gray
title('Vertical')
subplot(2,2,4)
imagesc(cD)
colormap gray
title('Diagonal')

Figure contains 4 axes objects. Axes object 1 with title Approximation contains an object of type image. Axes object 2 with title Horizontal contains an object of type image. Axes object 3 with title Vertical contains an object of type image. Axes object 4 with title Diagonal contains an object of type image.

どの GPU がサポートされているかについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。

イメージを読み込みます。gpuArray を使用してイメージを GPU に入力します。現在の拡張モードを保存します。

load mask
imgg = gpuArray(X);
origMode = dwtmode('status','nodisp');

dwtmode を使用して拡張モードをゼロ パディングに変更します。db2 ウェーブレットを使用して、GPU でのイメージの単一レベル 2 次元 DWT を求めます。

dwtmode('zpd','nodisp')
[cA,cH,cV,cD] = dwt2(imgg,'db2');

現在の拡張モード zpdgpuArray 入力をサポートしていません。そのため、DWT は代わりに sym 拡張モードを使用して実行されます。拡張モードを sym に設定して imgg の DWT を求め、前の結果と比較して、これを確認します。

[cAsym,cHsym,cVsym,cDsym] = dwt2(imgg,'db2','mode','sym');
[max(abs(cA(:)-cAsym(:))) max(abs(cH(:)-cHsym(:))) ...
    max(abs(cV(:)-cVsym(:))) max(abs(cD(:)-cDsym(:)))]
ans =

     0     0     0     0

サポートされていない拡張モードが入力引数として指定された場合、'sym' に変換されます。サポートされていないモードに 'mode' が設定されている imgg の DWT も、既定で sym 拡張モードに設定されることを確認します。

[cA,cH,cV,cD] = dwt2(imgg,'db2','mode','spd');
[max(abs(cA(:)-cAsym(:))) max(abs(cH(:)-cHsym(:))) ...
    max(abs(cV(:)-cVsym(:))) max(abs(cD(:)-cDsym(:)))]
ans =

     0     0     0     0

現在の拡張モードを周期化に変更します。db2 ウェーブレットを使用して、GPU でのイメージの単一レベル DWT を求めます。

dwtmode('per','nodisp')
[cA,cH,cV,cD] = dwt2(imgg,'db2');

現在の拡張モード pergpuArray 入力をサポートしていることを確認します。

[cAper,cHper,cVper,cDper] = dwt2(imgg,'db2','mode','per');
[max(abs(cA(:)-cAper(:))) max(abs(cH(:)-cHper(:))) ...
    max(abs(cV(:)-cVper(:))) max(abs(cD(:)-cDper(:)))]
ans =

     0     0     0     0

拡張モードを元の設定に戻します。

dwtmode(origMode,'nodisp')

入力引数

すべて折りたたむ

入力データ。数値配列または logical 配列として指定します。X は、インデックス付きイメージを表す mn 列の配列かトゥルーカラー イメージを表す m x n x 3 の配列です。トゥルーカラー イメージの詳細については、RGB (トゥルーカラー) イメージを参照してください。

データ型: double | single | uint8

2 次元 DWT の計算に使用する解析ウェーブレット。文字ベクトルまたは string スカラーとして指定します。解析ウェーブレットは、次のいずれかのウェーブレット ファミリから指定します。最適局在化 Daubechies、Beylkin、Coiflet、Daubechies、Fejér-Korovkin、Haar、Han 線形位相モーメント、Morris 最小帯域幅、Symlet、Vaidyanathan、Discrete Meyer、双直交、および逆双直交。各ファミリの利用可能なウェーブレットについては、wfilters を参照してください。

データ型: char | string

ウェーブレット分解ローパス フィルター。偶数長の実数値のベクトルとして指定します。LoDHiD と同じ長さでなければなりません。

データ型: double | single

ウェーブレット分解ハイパス フィルター。偶数長の実数値のベクトルとして指定します。HiDLoD と同じ長さでなければなりません。

データ型: double | single

DWT の実行時に使用する拡張モード。次のいずれかとして指定します。

mode

DWT 拡張モード

'zpd'

ゼロ拡張

'sp0'

次数 0 の平滑化拡張

'spd' (または 'sp1')

次数 1 の平滑化拡張

'sym' または 'symh'

対称拡張 (半分の点): 境界値の対称的な複製

'symw'

対称拡張 (全点): 境界値の対称的な複製

'asym' または 'asymh'

反対称拡張 (半分の点): 境界値の反対称の複製

'asymw'

反対称拡張 (全点): 境界値の反対称の複製

'ppd'

周期化拡張 (1)

'per'

周期化拡張 (2)

信号長が奇数の場合、wextend は最後の値と等しい追加サンプルを右に追加し、'ppd' モードを使用して拡張を実行します。そうでない場合、'per''ppd' に縮小します。このルールはイメージにも適用されます。

既定の拡張モードは dwtmode で管理されるグローバル変数で指定されます。

例: [cA,cH,cV,cD] = dwt2(x,'db4','mode','symw');

出力引数

すべて折りたたむ

Approximation 係数。サイズが X に応じて異なる配列として返されます。sx = size(X) および lf = 分解フィルターの長さとします。

  • DWT 拡張モードが周期化に設定されている場合、この出力のサイズは ceil(sx/2) です。

  • それ以外の拡張モードの場合、この出力のサイズは floor((sx+lf-1)/2) です。

データ型: double

水平方向の Detail 係数。サイズが X に応じて異なる配列として返されます。sx = size(X) および lf = 分解フィルターの長さとします。

  • DWT 拡張モードが周期化に設定されている場合、この出力のサイズは ceil(sx/2) です。

  • それ以外の拡張モードの場合、この出力のサイズは floor((sx+lf-1)/2) です。

データ型: double

垂直方向の Detail 係数。サイズが X に応じて異なる配列として返されます。sx = size(X) および lf = 分解フィルターの長さとします。

  • DWT 拡張モードが周期化に設定されている場合、この出力のサイズは ceil(sx/2) です。

  • それ以外の拡張モードの場合、この出力のサイズは floor((sx+lf-1)/2) です。

データ型: double

対角方向の Detail 係数。サイズが X に応じて異なる配列として返されます。sx = size(X) および lf = 分解フィルターの長さとします。

  • DWT 拡張モードが周期化に設定されている場合、この出力のサイズは ceil(sx/2) です。

  • それ以外の拡張モードの場合、この出力のサイズは floor((sx+lf-1)/2) です。

データ型: double

アルゴリズム

イメージの 2 次元ウェーブレット分解のアルゴリズムは 1 次元の場合と同様です。2 次元のウェーブレット関数とスケーリング関数は、1 次元のウェーブレット関数とスケーリング関数のテンソル積を取ることで得られます。このような 2 次元の DWT は、4 つの成分 (レベル j + 1 の Approximation と 3 つの方向 (水平、垂直、対角方向) の Detail) におけるレベル j の Approximation 係数の分解になります。次のチャートに、イメージの基本的な分解ステップを示します。

ここで

  • — 列をダウンサンプリング: 偶数のインデックスが付いた列を維持

  • — 行をダウンサンプリング: 偶数のインデックスが付いた行を維持

  • — フィルター X でエントリの行を畳み込み

  • — フィルター X でエントリの列を畳み込み

分解は、Approximation 係数をイメージ s と等しくなるように設定 (cA0 = s) することで初期化されます。

メモ

畳み込みに基づくアルゴリズムによる信号の端点の影響に対処するために、1 次元および 2 次元の DWT では dwtmode で管理されるグローバル変数を使用します。この変数で、使用される信号拡張モードの種類が定義されます。使用可能なオプションとしては、ゼロ パディング拡張や対称拡張 (既定のモード) があります。

参照

[1] Daubechies, Ingrid. Ten Lectures on Wavelets. CBMS-NSF Regional Conference Series in Applied Mathematics 61. Philadelphia, Pa: Society for Industrial and Applied Mathematics, 1992.

[2] Mallat, S.G. “A Theory for Multiresolution Signal Decomposition: The Wavelet Representation.” IEEE Transactions on Pattern Analysis and Machine Intelligence 11, no. 7 (July 1989): 674–93. https://doi.org/10.1109/34.192463.

[3] Meyer, Y. Wavelets and Operators. Translated by D. H. Salinger. Cambridge, UK: Cambridge University Press, 1995.

拡張機能

バージョン履歴

R2006a より前に導入