Diskrete Wavelet-Analyse
Die Software Wavelet Toolbox™ ermöglicht die Analyse von Signalen, Bildern und 3D-Daten mithilfe der orthogonalen und biorthogonalen kritisch abgetasteten diskreten Wavelet-Analyse. Die kritisch abgetastete diskrete Wavelet-Analyse wird auch als dezimierte diskrete Wavelet-Analyse bezeichnet. Die dezimierte diskrete Wavelet-Analyse eignet sich am besten für Datenkompression, Rauschunterdrückung (Entrauschen) und die sparsame Darstellung bestimmter Signal- und Bildklassen.
Bei der dezimierten diskreten Wavelet-Analyse sind die Skalierungen und Translationen dyadisch.
1D-Wavelet-Rauschunterdrückung
Dieses Beispiel zeigt, wie ein Signal mithilfe der diskreten Wavelet-Analyse entrauscht werden kann.
Erstellen Sie ein Referenzsignal.
len = 2^11; h = [4 -5 3 -4 5 -4.2 2.1 4.3 -3.1 5.1 -4.2]; t = [0.1 0.13 0.15 0.23 0.25 0.40 0.44 0.65 0.76 0.78 0.81]; h = abs(h); w = 0.01*[0.5 0.5 0.6 1 1 3 1 1 0.5 0.8 0.5]; tt = linspace(0,1,len); xref = zeros(1,len); for j=1:11 xref = xref+(h(j)./(1+((tt-t(j))/w(j)).^4)); end
Fügen Sie weißes Gauß‘sches Rauschen mit dem Mittelwert null und einer Varianz von 0,25 hinzu.
rng default x = xref + 0.5*randn(size(xref)); plot(tt,x) axis tight
Entrauschen Sie das Signal bis Ebene 3 unter Verwendung des Least Assymetric Daubechies-Wavelets mit 4 verschwindenden Momenten. Verwenden Sie die universelle Schwellenwert-Auswahlregel von Donoho und Johnstone mit „Soft-Thresholding“ auf Grundlage der DWT-Koeffizienten auf Ebene 1. Verwenden Sie den Signalerweiterungsmodus „Periodisierung“ – dwtmode('per')
. Stellen Sie das Ergebnis zusammen mit dem Referenzsignal zu Vergleichszwecken grafisch dar.
origmode = dwtmode('status','nodisplay'); dwtmode('per','nodisplay') xd = wdenoise(x,3,'Wavelet','sym4', ... 'DenoisingMethod','UniversalThreshold','NoiseEstimate','LevelIndependent'); plot(tt,xd) axis tight hold on plot(tt,xref,'r') hold off legend('Denoised','Reference')
Stellen Sie den ursprünglichen Erweiterungsmodus wieder her.
dwtmode(origmode,'nodisplay')
Dezimierte diskrete 2D-Wavelet-Analyse
Dieses Beispiel zeigt, wie Sie die 2D DWT eines Eingangsbilds ermitteln.
Laden Sie das Bild und zeigen Sie es an. Das Bild besteht aus vertikalen, horizontalen und diagonalen Mustern.
load tartan
imagesc(X)
colormap(gray)
Ermitteln Sie die 2D DWT auf Ebene 1 mithilfe der biorthogonalen B-Spline-Wavelet- und Skalierungsfilter mit 2 verschwindenden Momenten in den Analysefiltern und 4 verschwindenden Momenten in den Synthesefiltern.
[C,S] = wavedec2(X,1,'bior2.4');
Extrahieren Sie die horizontalen, vertikalen und diagonalen Wavelet-Koeffizienten und die Approximationskoeffizienten.
[H,V,D] = detcoef2('all',C,S,1); A = appcoef2(C,S,'bior2.4');
Zeigen Sie die Ergebnisse an.
tiledlayout(2,2) nexttile imagesc(A) title('Approximation Level 1') colormap(gray) nexttile imagesc(H) title('Horizontal Details') nexttile imagesc(V) title('Vertical Details') nexttile imagesc(D) title('Diagonal Details')
Sie sehen, dass die Wavelet-Details empfindlich auf bestimmte Orientierungen im Eingangsbild reagieren. Die Approximationskoeffizienten sind eine Tiefpass-Approximation an das Originalbild.
Nicht dezimierte diskrete Wavelet-Analyse
Dieses Beispiel zeigt, wie Sie die nicht dezimierte (stationäre) Wavelet-Transformation eines verrauschten frequenzmodulierten Signals erhalten.
Laden Sie das verrauschte Doppler-Signal und ermitteln Sie die stationäre Wavelet-Transformation bis Ebene 4.
load noisdopp swc = swt(noisdopp,4,'sym8');
Stellen Sie das Originalsignal und die Wavelet-Koeffizienten der Ebenen 1 und 3 grafisch dar. Stellen Sie die Approximation der Ebene 4 grafisch dar.
tiledlayout('vertical') nexttile plot(noisdopp) axis tight nexttile plot(swc(1,:)) axis tight ylabel('D1') set(gca,'ytick',[]) nexttile plot(swc(3,:)) axis tight ylabel('D3') set(gca,'ytick',[]) nexttile plot(swc(5,:)) axis tight ylabel('A4') set(gca,'ytick',[])
Die Wavelet- und Approximationskoeffizienten auf jeder Ebene sind genauso lang wie das Eingangssignal. Das additive Rauschen befindet sich fast vollständig in den Detailkoeffizienten der Ebene 1. Die Detailkoeffizienten der Ebene 3 erfassen die hochfrequenten Schwingungen am Anfang des Doppler-Signals. Die Approximationskoeffizienten der Ebene 4 sind eine Tiefpass-Approximation an das Doppler-Signal.
Ermitteln Sie die nicht dezimierte 2D-Wavelet-Transformation eines Bilds. Verwenden Sie das Least Assymetric Daubechies-Wavelet, sym4
, und ermitteln Sie die Multiskalenanalyse bis Ebene 3. Laden Sie das Bild. Verwenden Sie wcodemat
, um die Matrix für die Anzeige zu skalieren.
load tartan
nbcol = size(map,1);
cod_X = wcodemat(X,nbcol);
Ermitteln Sie die nicht dezimierte Multiskalenanalyse bis Ebene 3.
[ca,chd,cvd,cdd] = swt2(X,3,'sym4');
Zeigen Sie das Originalbild sowie die Approximation und Detailkoeffizienten auf jeder Ebene an.
tiledlayout(2,2) nexttile image(cod_X) title('Original Image') colormap(map) for k = 1:3 cod_ca = wcodemat(ca(:,:,k),nbcol); cod_chd = wcodemat(chd(:,:,k),nbcol); cod_cvd = wcodemat(cvd(:,:,k),nbcol); cod_cdd = wcodemat(cdd(:,:,k),nbcol); decl = [cod_ca,cod_chd;cod_cvd,cod_cdd]; nexttile image(decl) title(['SWT: Approx. ', ... 'and Det. Coefs (Lev. ',num2str(k),')']) colormap(gray) end