您當前的位置:首頁 > 攝影

小波影象去噪及matlab例項

作者:由 陽光下有點甜 發表于 攝影時間:2021-08-22

小波影象去噪及matlab例項

影象去噪

影象去噪是訊號處理的一個經典問題,傳統的去噪方法多采用平均或線性方法進行,常用的是維納濾波,但是去噪效果不太好(維納濾波在影象復原中的作用)。

小波影象去噪及matlab例項

小波去噪

隨著小波理論的日益完善,其以自身良好的時頻特性在影象去噪領域受到越來越多的關注,開闢了用非線性方法去噪的先河。具體來說,小波能夠去噪主要得益於小波變換有如下特點:

(1)低熵性。小波係數的稀疏分佈,使影象變換後的熵降低。意思是對訊號(即影象)進行分解後,有更多小波基係數趨於0(噪聲),而訊號主要部分多集中於某些小波基,採用閾值去噪可以更好的保留原始訊號。

(2)多解析度特性。由於採用了多分辨方法,所以可以非常好地刻畫訊號的非平穩性,如突變和斷點等(例如0-1突變是傅立葉變化無法合理表示的),可以在不同解析度下根據訊號和噪聲的分佈來消除噪聲。

(3)去相關性。小波變換可對訊號去相關,且噪聲在變換後有白化趨勢,所以小波域比時域更利於去噪。

(4)基函式選擇靈活。小波變換可靈活選擇基函式,也可根據訊號特點和去噪要求選擇多帶小波和小波包等(小波包對高頻訊號再次分解,可提高時頻解析度),對不同場合,選擇不同小波基函式。

根據基於小波係數處理方式的不同,常見去噪方法可分為三類:

(1)基於小波變換模極大值去噪(訊號與噪聲模極大值在小波變換下會呈現不同變化趨勢)

(2)基於相鄰尺度小波係數相關性去噪(噪聲在小波變換的各尺度間無明顯相關性,訊號則相反)

(3)基於小波變換閾值去噪

小波閾值去噪是一種簡單而實用的方法,應用廣泛,因此重點介紹。

閾值函式選擇

閾值處理函式分為軟閾值和硬閾值,設w是小波係數的大小,wλ是施加閾值後小波係數大小,λ為閾值。

(1)硬閾值

當小波係數的絕對值小於給定閾值時,令其為0,而大於閾值時,保持其不變,即:

小波影象去噪及matlab例項

(2)軟閾值

當小波係數的絕對值小於給定閾值時,令其為0,大於閾值時,令其都減去閾值,即:

小波影象去噪及matlab例項

如下圖,分別是原始訊號,硬閾值處理結果,軟閾值處理結果。硬閾值函式在|w| = λ處是不連續的,容易造成去噪後圖像在奇異點附近出現明顯的偽吉布斯現象。

小波影象去噪及matlab例項

閾值大小的選取

閾值的選擇是離散小波去噪中最關鍵的一部。在去噪過程中,小波閾值λ起到了決定性作用:如果閾值太小,則施加閾值後的小波係數將包含過多的噪聲分量,達不到去噪的效果;反之,閾值太大,則去除了有用的成分,造成失真。小波閾值估計方法很多,這裡暫不介紹。

小波去噪實現步驟

(1)二維訊號的小波分解。選擇一個小波和小波分解的層次N,然後計算訊號s到第N層的分解。

(2)對高頻係數進行閾值量化。對於從1~N的每一層,選擇一個閾值,並對這一層的高頻係數進行軟閾值量化處理。

(3)二維小波重構。根據小波分解的第N層的低頻係數和經過修改的從第一層到第N的各層高頻係數,計算二維訊號的小波重構

Matlab函式介紹

(1)wavedec2函式

該函式用於對多尺度二維小波進行分解,其常用呼叫格式:

[C,S] = wavedec2(X,N,‘wname’):用小波函式wname對訊號X在尺度N上的二維分解,N是嚴格正整數。

(2)wrcoef2函式

該函式用於對二維小波係數進行單支重構,其呼叫格式:

X = wrcoef2(‘type’,C,S,‘wname’,N):用指定的小波函式wname進行N尺度重構。當type = ‘a’時,僅對訊號的低頻部分進行重構,此時N可以為0;當type = ‘h’(或‘v’/‘d’)時,對訊號(水平、垂直、對角)的高頻進行重構,N為嚴格正整數。

(3)wthcoef2函式

該函式用於對二維訊號的小波係數閾值進行處理,常用呼叫格式:

NC = wthcoef2(‘type’,C,S,N,T,SORH):返回經過小波分解結構[C,S]進行處理後的新的小波分解向量NC,[NC,S]即構成一個新的小波分解結構。N是一個包含高頻尺度的向量,T是相應的閾值,且N和T長度須相等。返回‘type’(水平、垂直、對角線)方向的小波分解向量NC。引數SORH用來對閾值方式進行選擇,當SORH = ‘s’時,為軟閾值,當SORH = ‘h’時,為硬閾值。

小波去噪Matlab例項

clear all;

load facets;

subplot(2,2,1);image(X);

colormap(map);

xlabel(‘(a)原始影象’);

axis square

%產生含噪聲影象

init = 2055615866;

randn(‘seed’,init);

x = X + 50*randn(size(X));

subplot(2,2,2);image(x);

colormap(map);

xlabel(‘(b)含噪聲影象’);

axis square

%下面進行影象的去噪處理

%用小波函式coif3對x進行2層小波分解

[c,s] = wavedec2(x,2,‘coif3’);

%提取小波分解中第一層的低頻影象,即實現了低通濾波去噪

%設定尺度向量

n = [1,2];

%設定閾值向量p

p = [10。12,23。28];

%對三個方向高頻係數進行閾值處理

nc = wthcoef2(‘h’,c,s,n,p,‘s’);

nc = wthcoef2(‘v’,nc,s,n,p,‘s’);

nc = wthcoef2(‘d’,nc,s,n,p,‘s’);

%對新的小波分解結構[c,s]進行重構

x1 = waverec2(nc,s,‘coif3’);

subplot(2,2,3);image(x1);

colormap(map);

xlabel(‘(c)第一次去噪影象’);

axis square

%對nc再次進行濾波去噪

xx = wthcoef2(‘v’,nc,s,n,p,‘s’);

x2 = waverec2(xx,s,‘coif3’);

subplot(2,2,4);image(x2);

colormap(map);

xlabel(‘(d)第二次去噪影象’);

小波影象去噪及matlab例項

由於例子簡單,處理效果一般,但可以明顯地看出高頻噪聲得到了抑制

標簽: 閾值  小波  係數  訊號  分解