Main Content

不連続部分および不連続点の検出

動的システムにおける過渡信号のように急速に発展する信号は、ジャンプのような急激な変化、あるいは 1 階微分や 2 階微分で鋭い変化が起こる可能性があります。フーリエ解析では通常、これらのイベントを検出することはできません。この例の目的は、ウェーブレットによる解析で信号が変化するときの正確な瞬時、またその種類 (信号の破損または 1 階微分や 2 階微分での急激な変化) および変化の振幅を検出できる方法を示すことです。イメージ処理では、主な用途の 1 つがエッジ検出であり、これは急激な変化の検出にもかかわります。

周波数分解

信号の破損を検出するときに、長いウェーブレットよりも短いウェーブレットの方がより効果的であることがよくあります。そのため、信号の不連続点を特定するために Haar ウェーブレットを使用します。不連続信号は、低速正弦波と、唐突にそれに続く中程度の速度の正弦波で構成されています。

load freqbrk
x = freqbrk;

レベル 1 の多重レベル 1 次元ウェーブレット分解を計算します。

level = 1;
[c,l] = wavedec(x,level,'haar');

ウェーブレット分解からレベル 1 の Detail 係数を抽出し、結果を可視化します。Detail 係数を内挿して、信号と同じ長さになるようにします。

d1 = detcoef(c,l,level);
subplot(2,1,1)
plot(x)
subplot(2,1,2)
plot(interpft(d1,2*length(d1)))
ylabel('d1')

信号の破損には高周波数部が含まれているため、第 1 レベルの Detail (d1) は不連続点を最も明確に示しています。不連続点は、時間が 500 のあたりで非常に正確に位置が特定されています。

ノイズの存在が不連続点の特定をより複雑にしています。より細かいレベルの分解を使用してノイズの大部分を除去できる場合、分解の粗いレベルで信号の破損を表示できる場合があります。

2 次導関数分解

この例の目的は、ウェーブレットによる解析でいずれかの信号の導関数における不連続点を検出できる方法を示すことです。信号は、一見したところ単一の滑らかな曲線のようでも、実際には 2 つの別個の指数で構成されています。

load scddvbrk;
x = scddvbrk;
level = 2;
[c,l] = wavedec(x,level,'db4');
[d1,d2] = detcoef(c,l,1:level);
d1up = dyadup(d1,0);
d2up = dyadup(dyadup(d2,0),0);
subplot(3,1,1)
plot(x)
xlim([400 600])
subplot(3,1,2)
plot(d1up)
ylabel('d1')
xlim([400 600])
subplot(3,1,3)
plot(d2up)
ylabel('d2')
xlim([400 600])

時間が 500 のあたりで何が起こっているかをより明確に示すために、信号の中央部分を拡大しました。Detail は信号の中央部分でのみ高く、その他の場所ではごくわずかです。これは、時間が 500 のあたりに高周波数情報、つまり急激な変化または不連続点が存在することを示しています。

特異点を検出するには、選択されたウェーブレットが十分に正則でなければならないことに注意してください。これは、フィルターのインパルス応答が長くなければならないことを意味しています。正則性はウェーブレット選択時の重要な基準となることがあります。db4 を使用することを選択しており、今回の解析では十分に正則です。Haar ウェーブレットを選択していた場合、不連続点は検出されませんでした。レベル 2 の Haar ウェーブレットを使用してこの解析を繰り返し実行しようとすると、時間が 500 の時点で Detail が 0 に等しくなることがわかります。

エッジ検出

イメージの場合、2 次元の離散ウェーブレット変換は、4 つの成分 (レベル j+1 の Approximation と 3 つの方向 (水平、垂直、対角方向) の Detail) におけるレベル j の Approximation 係数の分解になります。

load tartan;
level = 1;
[c,s] = wavedec2(X,level,'coif2');
[chd1,cvd1,cdd1] = detcoef2('all',c,s,level);
subplot(1,2,1)
image(X)
colormap(map)
title('Original Image')
subplot(1,2,2)
image(chd1)
colormap(map)
title('Horizontal Edges')

subplot(1,2,1)
image(cvd1)
colormap(map)
title('Vertical Edges')
subplot(1,2,2)
image(cdd1)
colormap(map)
title('Diagonal Edges')

参考

|