Analisi wavelet discreta
Il software Wavelet Toolbox™ consente di analizzare segnali, immagini e dati tridimensionali utilizzando l’analisi wavelet discreta ortogonale e biortogonale a campionamento critico. L’analisi wavelet discreta a campionamento critico è nota anche come analisi wavelet discreta decimata. L’analisi wavelet discreta decimata è l’analisi maggiormente appropriata per la compressione di dati, la riduzione del rumore e la rappresentazione rada di certe classi di segnali e di immagini.
Nell’analisi wavelet discreta, le scale e le traslazioni sono diadiche.
Riduzione del rumore wavelet monodimensionale
Questo esempio mostra come ridurre il rumore di un segnale utilizzando l’analisi wavelet discreta.
Creare un segnale di riferimento.
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
Aggiungere un rumore gaussiano bianco con media zero e con una varianza di 0,25.
rng default x = xref + 0.5*randn(size(xref)); plot(tt,x) axis tight
Ridurre il rumore del segnale fino al livello 3 utilizzando la wavelet asimmetrica minima di Daubechies con 4 momenti di fuga. Utilizzare la regola di selezione della soglia universale di Donoho e Johnstone con una soglia morbida basata sui coefficienti della DWT al livello 1. Utilizzare la modalità di estensione del segnale di periodizzazione — dwtmode('per')
. Tracciare il risultato insieme al segnale di riferimento per il confronto.
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')
Ripristinare la modalità di estensione originale.
dwtmode(origmode,'nodisplay')
Analisi wavelet discreta decimata bidimensionale
Questo esempio mostra come ottenere la DWT bidimensionale di un’immagine in ingresso.
Caricare e visualizzare l’immagine. L’immagine è composta da strutture verticali, orizzontali e diagonali.
load tartan
imagesc(X)
colormap(gray)
Ottenere la DWT bidimensionale al livello 1 utilizzando la wavelet B-spline biortogonale e filtri di demoltiplicazione con 2 momenti di fuga nei filtri di analisi e con 4 momenti di fuga nei filtri di sintesi.
[C,S] = wavedec2(X,1,'bior2.4');
Estrarre i coefficienti wavelet orizzontali, verticali e diagonali, nonché i coefficienti di approssimazione.
[H,V,D] = detcoef2('all',C,S,1); A = appcoef2(C,S,'bior2.4');
Visualizzare i risultati.
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')
Si noti che i dettagli wavelet sono sensibili a particolari orientamenti dell’immagine in ingresso. I coefficienti di approssimazione sono un’approssimazione passa-basso dell’immagine originale.
Analisi wavelet discreta non decimata
Questo esempio mostra come ottenere la trasformata wavelet (stazionaria) non decimata di un segnale rumoroso modulato in frequenza.
Caricare il segnale rumoroso Doppler e ottenere la trasformata wavelet stazionaria fino al livello 4.
load noisdopp swc = swt(noisdopp,4,'sym8');
Tracciare il segnale originale e i coefficienti wavelet del livello 1 e 3. Tracciare l’approssimazione del livello 4.
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',[])
I coefficienti wavelet e di approssimazione a ciascun livello sono di lunghezza pari al segnale di ingresso. Il rumore additivo è quasi totalmente localizzato nei coefficienti di dettaglio del livello uno. I coefficienti di dettaglio del livello 3 acquisiscono le oscillazioni ad alta frequenza all’inizio del segnale Doppler. I coefficienti di approssimazione del livello 4 sono un’approssimazione passa-basso sul segnale Doppler.
Ottenere la trasformata wavelet non decimata bidimensionale di un’immagine. Utilizzare la wavelet asimmetrica minima di Daubechies sym4
e ottenere l’analisi multirisoluzione fino al livello 3. Caricare l’immagine. Utilizzare wcodemat
per ridimensionare la matrice per la visualizzazione.
load tartan
nbcol = size(map,1);
cod_X = wcodemat(X,nbcol);
Ottenere l’analisi multirisoluzione non decimata fino al livello 3.
[ca,chd,cvd,cdd] = swt2(X,3,'sym4');
Visualizzare l'immagine originale e i coefficienti di approssimazione e di dettaglio a ciascun livello.
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