このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ウェーブレットのノイズ除去
この例では、ウェーブレットを使用して信号やイメージのノイズを除去する方法について説明します。ウェーブレットはデータ内の特徴を異なるスケールに局在化するため、信号またはイメージの重要な特徴を保持しながらノイズを除去することができます。ウェーブレット ノイズ除去、すなわちウェーブレットのしきい値処理の背後にある基本的な考え方は、ウェーブレット変換によって実際の多数の信号やイメージに対してスパース表現が得られるということです。これはつまり、ウェーブレット変換が信号やイメージの特徴を振幅の大きい少数のウェーブレット係数に集中させるということです。値の小さいウェーブレット係数は通常ノイズであり、そのような係数は、信号の質または画質に影響を与えることなく、"収縮" または削除することができます。係数のしきい値処理を行った後、逆ウェーブレット変換を使用してデータを再構成します。
信号のノイズ除去
ウェーブレット ノイズ除去を説明するため、ノイズを含む "Bumps" 信号を作成します。この場合、元の信号とノイズを含むバージョンの両方があります。
rng default; [X,XN] = wnoise('bumps',10,sqrt(6)); subplot(211) plot(X); title('Original Signal'); AX = gca; AX.YLim = [0 12]; subplot(212) plot(XN); title('Noisy Signal'); AX = gca; AX.YLim = [0 12];
wdenoise
を既定の設定で使用して、レベル 4 まで下げて信号のノイズを除去します。wdenoise
は間引きウェーブレット変換を使用します。元の信号とともに結果をプロットします。
xd = wdenoise(XN,4); figure; plot(X,'r') hold on; plot(xd) legend('Original Signal','Denoised Signal','Location','NorthEastOutside') axis tight; hold off;
非間引きウェーブレット変換を使用して信号のノイズを除去することもできます。非間引きウェーブレット変換を使用して、もう一度レベル 4 まで下げて信号のノイズを除去します。元の信号とともに結果をプロットします。
xdMODWT = wden(XN,'modwtsqtwolog','s','mln',4,'sym4'); figure; plot(X,'r') hold on; plot(xdMODWT) legend('Original Signal','Denoised Signal','Location','NorthEastOutside') axis tight; hold off;
どちらの場合も、ウェーブレット ノイズ除去は、ノイズの量を大幅に削減しながら、信号内のシャープな特徴を保持していることがわかります。後者はフーリエベースのノイズ除去の課題です。フーリエベースのノイズ除去、つまりフィルター処理では、ローパス フィルターを適用してノイズを除去します。しかし、信号内のスパイクやイメージ内のエッジなど、データに高周波数の特徴があると、ローパス フィルターはそれらを平滑化します。
ウェーブレットを使用して、ノイズが一様でない信号のノイズを除去することもできます。経時的な電力消費を示す信号の一部をインポートし、調査します。
load leleccum; indx = 2000:3450; x = leleccum(indx); plot(x) grid on;
この信号は、サンプル 500 近辺以降、ノイズが増加しているようです。そのため、信号の最初の部分では異なるしきい値処理を使用します。cmddenoise
を使用して、ノイズ除去に最適な区間数を決定し、信号のノイズを除去することができます。この例では、'db3' ウェーブレットを使用し、レベル 3 までデータを分解します。
[SIGDEN,~,thrParams,~,BestNbOfInt] = cmddenoise(x,'db3',3);
区間数と、区間を区切るサンプル値を表示します。
BestNbOfInt
BestNbOfInt = 2
thrParams{1}(:,1:2)
ans = 2×2
1 412
412 1451
2 つの区間が特定されました。2 つのセグメントの間の境界を示すサンプルは 412 です。信号をプロットし、2 つの信号セグメントを示すと、サンプル 412 の前後でノイズは異なることがわかります。
plot(x) hold on; plot([412 412],[100 550],'r') hold off;
ノイズ除去後の信号をプロットします。
plot(SIGDEN)
title('Denoised Signal')
イメージのノイズ除去
ウェーブレットを使用してイメージのノイズを除去することもできます。イメージにおいて、エッジはイメージの輝度が急激に変化する場所です。エッジを維持しながらイメージのノイズを除去することが、知覚的品質にとって極めて重要です。従来のローパス フィルター処理はノイズを除去しますが、ほとんどの場合、エッジを平滑化し、画質に悪影響を与えます。ウェーブレットは、知覚的に重要な特徴を保持しながらノイズを除去できます。
ノイズを含むイメージを読み込みます。wdenoise2
を既定の設定で使用してイメージのノイズを除去します。既定では、wdenoise2
は双直交ウェーブレット bior4.4
を使用します。元のイメージとノイズ除去後のイメージを表示するには、出力引数を指定しません。
load('jump.mat')
wdenoise2(jump)
イメージ内のエッジは、ノイズ除去処理によって平滑化されていないことがわかります。