標籤:style blog http color os strong ar for 資料
【DWT筆記】基於小波變換的降噪技術一、前言
在現實生活和工作中,雜訊無處不在,在許多領域中,如天文、醫學映像和電腦視覺方面收集到的資料常常是含有雜訊的。雜訊可能來自擷取資料的過程,也可能來自環境影響。由於種種原因,總會存在雜訊,雜訊的存在往往會掩蓋訊號本身所要表現的資訊,所以在實際的訊號處理中,常常需要對訊號進行預先處理,而預先處理最主要的一個步驟就是降噪。
小波分析是近年來發展起來的一種新的訊號處理工具,這種方法源於傅立葉分析,小波(wavelet),即小地區的波,僅僅在非常有限的一段區間有非零值,而不是像正弦波和餘弦波那樣無始無終。小波可以沿時間軸前後平移,也可按比例伸展和壓縮以擷取低頻和高頻小波,構造好的小波函數可以用於濾波或壓縮訊號,從而可以提取出已含雜訊訊號中的有用訊號。
二、小波去噪的原理
從訊號學的角度看 ,小波去噪是一個訊號濾波的問題。儘管在很大程度上小波去噪可以看成是低通濾波 ,但由於在去噪後 ,還能成功地保留訊號特徵 ,所以在這一點上又優於傳統的低通濾波器。由此可見 ,小波去噪實際上是特徵提取和低通濾波的綜合 ,其流程圖如下所示:
一個含噪的模型可以表示如下:
其中 ,f( k)為有用訊號,s(k)為含雜訊訊號,e(k)為雜訊,ε為雜訊係數的標準差。
假設,e(k)為高斯白色雜訊,通常情況下有用訊號表現為低頻部分或是一些比較平穩的訊號,而雜訊訊號則表現為高頻的訊號,我們對 s(k)訊號進行小波分解的時候,則雜訊部分通常包含在HL、LH、HH中,如所示,只要對HL、LH、HH作相應的小波係數處理,然後對訊號進行重構即可以達到消噪的目的。
我們可以看到,小波去噪的原理是比較簡單類,類似以往我們常見的低通濾波器的方法,但是由於小波去找保留了特徵提取的部分,所以效能上是優於傳統的去噪方法的。
三、小波去噪的基本方法
一般來說, 一維訊號的降噪過程可以分為 3個步驟
訊號的小波分解。選擇一個小波並確定一個小波分解的層次N,然後對訊號進行N層小波分解計算。
小波分解高頻係數的閾值量化。對第1層到第N層的每一層高頻係數(三個方向), 選擇一個閾值進行閾值量化處理.
這一步是最關鍵的一步,主要體現在閾值的選擇與量化處理的過程,在每層閾值的選擇上matlab提供了很多自適應的方法, 這裡不一一介紹,量化處理方法主要有硬閾值量化與軟閾值量化。是二者的區別:
上面左圖是硬閾值量化,右圖是軟閾值量化。採用兩種不同的方法,達到的效果是,硬閾值方法可以很好地保留訊號邊緣等局部特徵,軟閾值處理相對要平滑,但會造成邊緣模糊等失真現象。
訊號的小波重構。根據小波分解的第 N層的低頻係數和經過量化處理後的第1層到第N 層的高頻係數,進行訊號的小波重構。
四、模擬實驗
在這裡,我採用lena的256*256的標準圖進行分析,採用 coif2的兩層小波分解,並從三個方向上對小波係數進行軟閾值量化,為了方便起見,閾值的選擇我採用手動設定的方法,最後對映像進行小波重構,後面部分會給出重構的和相應的峰值信噪比。代碼如下:
1 clear; 2 clc; 3 X=imread(‘lena256.bmp‘); 4 %X=rgb2gray(X); 5 figure(1); 6 subplot(121); 7 imshow(X); 8 title(‘原始映像‘); 9 X=double(X);10 11 XX=X+10*randn(size(X)); 12 subplot(122);13 imshow(uint8(XX));14 title(‘含噪映像‘);15 16 [c,l]=wavedec2(XX,2,‘coif2‘); 17 18 n=[1,2];19 p=[10.28,10.08]; 20 21 nc_h=wthcoef2(‘h‘,c,l,n,p,‘s‘);22 23 X1=waverec2(nc_h,l,‘coif2‘);24 figure(2);25 subplot(131);26 imshow(uint8(X1));27 title(‘第一次消噪後的映像‘); 28 29 30 nc_v=wthcoef2(‘v‘,nc_h,l,n,p,‘s‘);31 32 X2=waverec2(nc_v,l,‘coif2‘);33 subplot(132);34 imshow(uint8(X2));35 title(‘第二次消噪後的映像‘);36 37 38 nc_d=wthcoef2(‘d‘,nc_v,l,n,p,‘s‘);39 40 X3=waverec2(nc_d,l,‘coif2‘);41 subplot(133);42 imshow(uint8(X3));43 title(‘第三次消噪後的映像‘);44 45 psnr0=psnr(X,XX);46 psnr1=psnr(X,X1);47 psnr2=psnr(X,X2);48 psnr3=psnr(X,X3);
下面給出啟動並執行,為了顯示方便,我重新排版了下,是原圖和加噪後的映像:
下面給出去噪的:
信噪比資料為:
1 psnr0 = 2 28.1782 3 4 psnr1 = 5 29.1551 6 7 psnr2 = 8 30.0441 9 10 psnr3 =11 31.6952
為了增加實驗室可信度,可以寫一個簡單的基於DCT變換的低通濾波器的去噪的方法,如下所示:
1 clear; 2 clc; 3 4 X=imread(‘lena256.bmp‘); 5 %X=rgb2gray(X); 6 figure(1); 7 subplot(141); 8 imshow(X); 9 title(‘原始映像‘);10 % 產生含噪映像並圖示11 X=double(X);12 13 % 添加隨機雜訊14 XX=X+10*randn(size(X)); 15 16 Y1=dct2(XX);17 18 [m,n]=size(Y1)19 for i=1:m20 for j=1:n21 if abs(Y1(i,j))<20 %這個閾值要根據實際情況設定22 Y1(i,j)=0;23 end24 end25 end26 27 YY1=idct2(Y1);28 subplot(142)29 imshow(uint8(XX));30 31 subplot(143)32 imshow(uint8(YY1));33 34 psnr0=psnr(X,XX)35 psnr4=psnr(X,YY1)
啟動並執行為:
啟動並執行結果為:
1 psnr0 =2 3 28.10684 5 6 psnr4 =7 8 28.6162
由此,我們可以看出,小波變換去噪能力還是比較突出的。
五、小結
離散小波變換(DWT)在影像處理中的運用還是十分廣泛的,去噪只是其中一個。有時間會跟大家一起總結下其他的應用。
我的新浪微博:http://weibo.com/3109428257/profile?rightmod=1&wvr=5&mod=personinfo
【DWT筆記】基於小波變換的降噪技術