Main Content

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

wavedec2

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

説明

[C,S] = wavedec2(X,N,wname) は、ウェーブレット wname を使用して行列 X のレベル N のウェーブレット分解を返します。出力の分解構造は、ウェーブレット分解ベクトル C と各レベルの方向ごとの係数の数を含むブックキーピング行列 S で構成されます。

メモ

gpuArray 入力でサポートされているモードは、'symh' ('sym') および 'per' です。入力が gpuArray の場合、wavedec2 で使用される離散ウェーブレット変換の拡張モードは、現在の拡張モードが 'per' でない限り、既定で 'symh' になります。GPU での多重レベル 2 次元離散ウェーブレット変換の例を参照してください。

[C,S] = wavedec2(X,N,LoD,HiD) は、指定されたローパスおよびハイパスの分解フィルター LoD および HiD を使用してウェーブレット分解を返します。詳細については、wfilters を参照してください。

すべて折りたたむ

この例では、ウェーブレット分解レベルの Detail のイメージを抽出して表示する方法を示します。

イメージを読み込みます。haar ウェーブレットを使用して、イメージのレベル 2 ウェーブレット分解を実行します。

load woman
[c,s]=wavedec2(X,2,'haar');

レベル 1 の Approximation 係数と Detail 係数を抽出します。

[H1,V1,D1] = detcoef2('all',c,s,1);
A1 = appcoef2(c,s,'haar',1);

wcodemat を使用して、係数をそれらの絶対値に基づいて再スケーリングします。再スケーリングした係数を表示します。

V1img = wcodemat(V1,255,'mat',1);
H1img = wcodemat(H1,255,'mat',1);
D1img = wcodemat(D1,255,'mat',1);
A1img = wcodemat(A1,255,'mat',1);

subplot(2,2,1)
imagesc(A1img)
colormap pink(255)
title('Approximation Coef. of Level 1')

subplot(2,2,2)
imagesc(H1img)
title('Horizontal Detail Coef. of Level 1')

subplot(2,2,3)
imagesc(V1img)
title('Vertical Detail Coef. of Level 1')

subplot(2,2,4)
imagesc(D1img)
title('Diagonal Detail Coef. of Level 1')

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

レベル 2 の Approximation 係数と Detail 係数を抽出します。

[H2,V2,D2] = detcoef2('all',c,s,2);
A2 = appcoef2(c,s,'haar',2);

wcodemat を使用して、係数をそれらの絶対値に基づいて再スケーリングします。再スケーリングした係数を表示します。

V2img = wcodemat(V2,255,'mat',1);
H2img = wcodemat(H2,255,'mat',1);
D2img = wcodemat(D2,255,'mat',1);
A2img = wcodemat(A2,255,'mat',1);

figure
subplot(2,2,1)
imagesc(A2img)
colormap pink(255)
title('Approximation Coef. of Level 2')

subplot(2,2,2)
imagesc(H2img)
title('Horizontal Detail Coef. of Level 2')

subplot(2,2,3)
imagesc(V2img)
title('Vertical Detail Coef. of Level 2')

subplot(2,2,4)
imagesc(D2img)
title('Diagonal Detail Coef. of Level 2')

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

この例では、wavedec2 の出力行列の構造を示します。

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

load woman
imagesc(X)
colormap(map)

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

現在の離散ウェーブレット変換の拡張モードを保存します。

origMode = dwtmode('status','nodisplay');

周期的な境界の処理に変更します。関数 dwtmode で、DWT 拡張モードを変更することを示すメッセージが表示されます。

dwtmode('per')
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  WARNING: Change DWT Extension Mode  !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                         
*****************************************
**  DWT Extension Mode: Periodization  **
*****************************************
                                         

db1 (Haar) ウェーブレットを使用して、イメージのレベル 3 分解を実行します。

[c,s] = wavedec2(X,3,'db1');

イメージ X と係数ベクトル c の要素の数を返します。それぞれの要素の数が等しいことを確認します。

numel(X)
ans = 65536
numel(c)
ans = 65536

ブックキーピング行列 s を表示します。最初の行に、イメージの粗いスケールの Approximation の次元が表示されます。最後の行に、元のイメージの次元が表示されます。中間の行に、分解の 3 つのレベルの Detail 係数の次元が粗いスケールから細かいスケールの順に表示されます。

s
s = 5×2

    32    32
    32    32
    64    64
   128   128
   256   256

離散ウェーブレット変換の拡張モードを元のモードにリセットします。

dwtmode(origMode,'nodisplay')

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

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

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

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

dwtmode('zpd','nodisp')
[c,s] = wavedec2(imgg,3,'db4');

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

dwtmode('sym','nodisp')
[csym,ssym] = wavedec2(imgg,3,'db4');
[max(abs(c-csym)) max(abs(s-ssym))]
ans =

     0     0     0

現在の拡張モードを per に設定して imgg の 3 レベル DWT を求めます。拡張モード pergpuArray 入力をサポートしています。結果が sym の結果と異なっていることを確認します。

dwtmode('per','nodisp')
[cper,sper] = wavedec2(imgg,3,'db4');
[length(csym) ; length(cper)]
ans = 2×1

       71542
       65536

ssym
ssym = 5×2

    38    38
    38    38
    69    69
   131   131
   256   256

sper
sper = 5×2

    32    32
    32    32
    64    64
   128   128
   256   256

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

dwtmode(origMode,'nodisp')

入力引数

すべて折りたたむ

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

データ型: double | single | uint8

分解レベル。正の整数として指定します。wavedec2 では最大レベルの制限は適用されません。ウェーブレット wname を使用した行列 X の分解における最大分解レベルを特定するには、wmaxlev を使用します。最大レベルは、少なくとも 1 つの係数が正しい最後のレベルです。

データ型: double

解析ウェーブレット。文字ベクトルまたは string スカラーとして指定します。

メモ

wavedec2 では、タイプ 1 (直交) とタイプ 2 (双直交) のウェーブレットのみがサポートされます。直交ウェーブレットと双直交ウェーブレットの一覧については、wfilters を参照してください。

データ型: char | string

直交ウェーブレットまたは双直交ウェーブレットに関連するウェーブレット分解フィルター。偶数長の実数値のベクトルとして指定します。LoD はローパス分解フィルター、HiD はハイパス分解フィルターです。詳細については、wfilters を参照してください。

データ型: double | single

出力引数

すべて折りたたむ

ウェーブレット分解ベクトル。ベクトル C には、Approximation 係数と Detail 係数がレベルごとに格納されます。ブックキーピング行列 S を使用して C が解析されます。

ベクトル C は、A(N)、H(N)、V(N)、D(N)、H(N-1)、V(N-1)、D(N-1)、…、H(1)、V(1)、D(1) のように編成されます。A、H、V、および D はそれぞれ行ベクトルです。各ベクトルは行列の列方向のストレージです。

  • A には、Approximation 係数が含まれています。

  • H には、水平方向の Detail 係数が含まれています。

  • V には、垂直方向の Detail 係数が含まれています。

  • D には、対角方向の Detail 係数が含まれています。

データ型: double

ブックキーピング行列。行列 S には、各レベルのウェーブレット係数の次元が格納されます。ウェーブレット分解ベクトル C の解析に使用されます。

  • S(1,:) = Approximation 係数 (N) のサイズ。

  • S(i,:) = Detail 係数 (N-i+2) のサイズ (i = 2、...N+1)、S(N+2,:) = size(X)

次の図は、512 行 512 列の行列のウェーブレット分解における CS の関係を示したものです。

X がインデックス付きイメージを表す場合、出力配列 cA、cH、cV、および cD は m 行 n 列の行列です。X がトゥルーカラー イメージを表す場合は、m 行 n 列の各行列が 3 番目の次元に沿って連結される赤、緑、青の色平面を表す m x n x 3 の配列になります。ベクトル C のサイズと行列 S のサイズは、解析対象のイメージのタイプによって異なります。

トゥルーカラー イメージの場合、分解ベクトル C とそれに対応するブックキーピング行列 S を次のように表現できます。

アルゴリズム

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

次のチャートに、イメージの基本的な分解ステップを示します。

ここで

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

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

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

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

初期化: cA0 = s.

したがって、J = 2 であるとすると、2 次元ウェーブレットのツリーの形式は次のようになります。

参照

[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 より前に導入