1、小波去噪實(shí)現(xiàn)步驟
(1)二維信號(hào)的小波分解。選擇一個(gè)小波和小波分解的層次N,然后計(jì)算信號(hào)s到第N層的分解。
(2)對高頻系數(shù)進(jìn)行閾值量化。對于從1~N的每一層,選擇一個(gè)閾值,并對這一層的高頻系數(shù)進(jìn)行軟閾值量化處理。
(3)二維小波重構(gòu)。根據(jù)小波分解的第N層的低頻系數(shù)和經(jīng)過修改的從第一層到第N的各層高頻系數(shù),計(jì)算二維信號(hào)的小波重構(gòu)
2、Matlab函數(shù)介紹
(1)wavedec2函數(shù)
該函數(shù)用于對多尺度二維小波進(jìn)行分解,其常用調(diào)用格式:
[C,S] = wavedec2(X,N,‘wname’):用小波函數(shù)wname對信號(hào)X在尺度N上的二維分解,N是嚴(yán)格正整數(shù)。
(2)wrcoef2函數(shù)
該函數(shù)用于對二維小波系數(shù)進(jìn)行單支重構(gòu),其調(diào)用格式:
X = wrcoef2(‘type’,C,S,‘wname’,N):用指定的小波函數(shù)wname進(jìn)行N尺度重構(gòu)。當(dāng)type = ‘a(chǎn)’時(shí),僅對信號(hào)的低頻部分進(jìn)行重構(gòu),此時(shí)N可以為0;當(dāng)type = ‘h’(或‘v’/‘d’)時(shí),對信號(hào)(水平、垂直、對角)的高頻進(jìn)行重構(gòu),N為嚴(yán)格正整數(shù)。
(3)wthcoef2函數(shù)
該函數(shù)用于對二維信號(hào)的小波系數(shù)閾值進(jìn)行處理,常用調(diào)用格式:
NC = wthcoef2(‘type’,C,S,N,T,SORH):返回經(jīng)過小波分解結(jié)構(gòu)[C,S]進(jìn)行處理后的新的小波分解向量NC,[NC,S]即構(gòu)成一個(gè)新的小波分解結(jié)構(gòu)。N是一個(gè)包含高頻尺度的向量,T是相應(yīng)的閾值,且N和T長度須相等。返回‘type’(水平、垂直、對角線)方向的小波分解向量NC。參數(shù)SORH用來對閾值方式進(jìn)行選擇,當(dāng)SORH = ‘s’時(shí),為軟閾值,當(dāng)SORH = ‘h’時(shí),為硬閾值。
3、小波去噪Matlab實(shí)例
實(shí)例1:
clear all;
load facets;
subplot(2,2,1);image(X);
colormap(map);
xlabel(‘(a)原始圖像’);
axis square
%產(chǎn)生含噪聲圖像
init = 2055615866;
randn(‘seed’,init);
x = X + 50*randn(size(X));
subplot(2,2,2);image(x);
colormap(map);
xlabel(‘(b)含噪聲圖像’);
axis square
%下面進(jìn)行圖像的去噪處理
%用小波函數(shù)coif3對x進(jìn)行2層小波分解
[c,s] = wavedec2(x,2,‘coif3’);
%提取小波分解中第一層的低頻圖像,即實(shí)現(xiàn)了低通濾波去噪
%設(shè)置尺度向量
n = [1,2];
%設(shè)置閾值向量p
p = [10.12,23.28];
%對三個(gè)方向高頻系數(shù)進(jìn)行閾值處理
nc = wthcoef2(‘h’,c,s,n,p,‘s’);
nc = wthcoef2(‘v’,nc,s,n,p,‘s’);
nc = wthcoef2(‘d’,nc,s,n,p,‘s’);
%對新的小波分解結(jié)構(gòu)[c,s]進(jìn)行重構(gòu)
x1 = waverec2(nc,s,‘coif3’);
subplot(2,2,3);image(x1);
colormap(map);
xlabel(‘(c)第一次去噪圖像’);
axis square
%對nc再次進(jìn)行濾波去噪
xx = wthcoef2(‘v’,nc,s,n,p,‘s’);
x2 = waverec2(xx,s,‘coif3’);
subplot(2,2,4);image(x2);
colormap(map);
xlabel(‘(d)第二次去噪圖像’);
axis square《span style=“font-size:14px”》《span style=“font-size:14px”》《span style=“font-size:18px; color:#3366ff”》
實(shí)例2:
首先使用函數(shù)wnoisest獲取噪聲方差,然后使用函數(shù)wbmpen獲取小波去噪閾值,最后使用wdencmp實(shí)現(xiàn)信號(hào)消噪。
load leleccum;
indx = 1:1024;
x = leleccum(indx);
%產(chǎn)生含噪信號(hào)
init = 2055615886;
randn(‘seed’,init);
nx = x + 18*randn(size(x));
%使用小波函數(shù)‘db6’對信號(hào)進(jìn)行3層分解
[c,l] = wavedec(nx,3,‘db6’);
%估計(jì)尺度1的噪聲標(biāo)準(zhǔn)差
sigma = wnoisest(c,l,1);
alpha = 2;
%獲取消噪過程中的閾值
thr = wbmpen(c,l,sigma,alpha);
keepapp = 1;
%對信號(hào)進(jìn)行消噪
xd = wdencmp(‘gbl’,c,l,‘db6’,3,thr,‘s’,keepapp);
subplot(221);
plot(x);
title(‘原始信號(hào)’);
subplot(222);
plot(nx);
title(‘含噪信號(hào)’);
subplot(223);
plot(xd);
title(‘消噪后的信號(hào)’);
實(shí)例3:
本例中,對小波分解系數(shù)使用函數(shù)wthcoef進(jìn)行閾值處理,然后利用閾值處理后的小波系數(shù)進(jìn)行重構(gòu)達(dá)到去噪目的。
load leleccum;
indx = 1:1024;
x = leleccum(indx);
%產(chǎn)生含噪信號(hào)
init = 2055615866;
randn(‘seed’,init);
nx = x + 18*randn(size(x));
%使用小波函數(shù)‘db5’對信號(hào)進(jìn)行3層分解
[c,l] = wavedec(nx,3,‘db5’);
%設(shè)置尺度向量
n = [1,2,3];
%設(shè)置閾值向量
p = [100,90,80];
%對高頻系數(shù)進(jìn)行閾值處理
nc = wthcoef(‘d’,c,l,n,p);
%對修正后的小波分解結(jié)構(gòu)進(jìn)行重構(gòu)
rx = waverec(nc,l,‘db5’);
subplot(221);
plot(x);
title(‘原始信號(hào)’);
subplot(222);
plot(nx);
title(‘含噪信號(hào)’);
subplot(223);
plot(rx);
title(‘消噪后的信號(hào)’);
實(shí)例4:
本例中,使用一維信號(hào)的自動(dòng)消噪函數(shù)wden對信號(hào)進(jìn)行消噪。
load leleccum;
indx = 1:1024;
x = leleccum(indx);
%產(chǎn)生含噪信號(hào)
init = 2055615866;
randn(‘seed’,init);
nx = x + 18*randn(size(x));
%將信號(hào)nx使用小波函數(shù)‘sym5’分解到第5層
%使用mimimaxi閾值選擇系數(shù)進(jìn)行處理,消除噪聲信號(hào)
lev = 5;
xd = wden(nx,‘minimaxi’,‘s’,‘mln’,lev,‘sym5’);
subplot(221);
plot(x);
title(‘原始信號(hào)’);
subplot(222);
plot(nx);
title(‘含噪信號(hào)’);
subplot(223);
plot(xd);
title(‘消噪后的信號(hào)’);
評(píng)論
查看更多