图像处理-小波变换
? ? ? 小波指的是一種能量在時域非常集中的波,它的能量有限,都集中在某一點附近,而且積分的值為零,這說明它與傅里葉波一樣是正交波。
????圖像的傅里葉變換是將圖像信號分解為各種不同頻率的正弦波。同樣,小波變換是將圖像信號分解為由原始小波位移和縮放之后的一組小波。小波在圖像處理里被稱為圖像顯微鏡,原因在于它的多分辨率分解能力可以將圖片信息一層一層分解剝離開來。剝離的手段就是通過低通和高通濾波器。
? ? ?小波變換可以和傅里葉變換結合起來理解。傅里葉變換是用一系列不同頻率的正余弦函數去分解原函數,變換后得到是原函數在正余弦不同頻率下的系數。小波變換使用一系列的不同尺度的小波去分解原函數,變換后得到的是原函數在不同尺度小波下的系數。不同的小波通過平移與尺度變換分解,平移是為了得到原函數的時間特性,尺度變換是為了得到原函數的頻率特性。
小波變換步驟:
1.把小波w(t)和原函數f(t)的開始部分進行比較,計算系數C。系數C表示該部分函數與小波的相似程度。
2.把小波向右移k單位,得到小波w(t-k),重復1。重復該步驟直至函數f結束.
3.擴展小波w(t),得到小波w(t/2),重復步驟1,2.
4.不斷擴展小波,重復1,2,3.
haar小波:
我這里使用的haar小波,縮放函數是[1 1],小波函數是[1 -1]。是最簡單的小波了。
圖像二維離散小波變換 :
? ? ?圖像的二維離散小波分解和重構過程如下圖所示,分解過程可描述為:首先對圖像的每一行進行 1D-DWT,獲得原始圖像在水平方向上的低頻分量 L 和高頻分量 H,然后對變換所得數據的每一列進行 1D-DWT,獲得原始圖像在水平和垂直方向上的低頻分量 LL、水平方向上的低頻和垂直方向上的高頻 LH、水平方向上的高頻和垂直方向上的低頻 HL 以及水平和垂直方向上的的高頻分量 HH。
? ? 重構過程可描述為:首先對變換結果的每一列進行以為離散小波逆變換,再對變換所得數據的每一行進行一維離散小波逆變換,即可獲得重構圖像。由上述過程可以看出,圖像的小波分解是一個將信號按照低頻和有向高頻進行分離的過程,分解過程中還可以根據需要對得到的 LL 分量進行進一步的小波分解,直至達到要求。
對于二維圖像Haar變換不再從一個方向進行濾波,而是從水平和豎直兩個方向進行低通和高通濾波(水平和豎直先后不影響),用圖像表述如圖所示:圖中a表示原圖,圖b表示經過一級小波變換的結果,h1?表示水平反向的細節,v1?表示豎直方向的細節,c1表示對角線方向的細節,b表示下2采樣的圖像。圖c中表示繼續進行Haar小波變換。一級Haar小波變換實際效果如圖3所示
? ? ? ? ? ? ? ? ? ? ???
matlab實例
小波去噪實現步驟:
(1)二維信號的小波分解。選擇一個小波和小波分解的層次N,然后計算信號s到第N層的分解。
(2)對高頻系數進行閾值量化。對于從1~N的每一層,選擇一個閾值,并對這一層的高頻系數進行軟閾值量化處理。
(3)二維小波重構。根據小波分解的第N層的低頻系數和經過修改的從第一層到第N的各層高頻系數,計算二維信號的小波重構
Matlab函數介紹
1、dwt2是二維單尺度小波變換,其可以通過指定小波或者分解濾波器進行二維單尺度小波分解。DWT2的一種語法格式:[cA,cH,cV,cD]=dwt2(X,'wname');也就是說DWT2只能對某個輸入矩陣X進行一次分解。
[cA1, cH1, cV1, cD1] = dwt2(I_noise, 'haar'); figure subplot(221), imshow(cA1, []); subplot(222), imshow(cH1, []); subplot(223), imshow(cV1, []); subplot(224), imshow(cD1, []);?
可以看出,第一張圖是圖像的近似,相當于圖像的低頻部分,而其它三張圖是圖像的輪廓,也就是水平,垂直和對角三個方向的細節。是圖像的高頻部分。至此,各變量的維數如下所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2、wavedec2函數
? ? ?該函數用于對多尺度二維小波進行分解,其常用調用格式:[C,S] = wavedec2(X,N,'wname'):
- X:要進行小波分解的圖像;?
- N :指定分解的層數;?
- wname:指定用什么小波基進行分解。?
- 輸出:?
- c:為各層分解系數;?
- s: 各層分解系數長度,也就是大小。
用小波函數wname對信號X在尺度N上的二維分解,其中N為大于1的正整數。可以對輸入矩陣X進行N次分解。C代表分解系數的組合,是一個向量:? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?C的大小為 [1,img_height×img_width];A(N)是圖像第N層的近似表示,尺度最小,在金字塔中就是每層的下采樣的圖像,而H、V、D分別表示圖像的水平高頻分量,垂直高頻分量,對角高頻分量。正如我們在金字塔概念中所了解的,在第N-1層下采樣到N層,N層的圖像維度(尺度)是變小了,也就意味著在下采樣過程中丟失了信息,而這些丟失的信息實質是高頻信息,那么這些信息在小波分解中可以通過HVD這些高頻分量來保存。?
? ? 這里貼上小波分解之后的結果圖,直觀地感受一下。這里對原始圖像進行三層小波分解。紅框a表示的就是近似圖像。
?
? ? 需要指出的是,每一次的小波分解都是在近似圖像上進行分解。S 是儲存各層分解系數長度的,即第一行是A(N)的長度,第二行是H(N)|V(N)|D(N)|的長度,第三行是?H(N-1)|V(N-1)|D(N-1)的長度,倒數第二行是H(1)|V(1)|D(1)長度,最后一行是原始圖像img的長度(大小)。?這里原始圖像是512×512,并進行了3層的小波分解。對應的s內容如下圖:?
??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
S表示每一層分解結果的維數,如果進行n層小波分解,S 的大小是(n+1)*2,最后一行表示的是原始圖像的size。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
3、wdcbm2函數
? ? ?[thr,nkeep] = wdcbm2(c,s,alpha,m) 返回與level相關的閾值thr和要保持的系數數NKEEP,?函數用于去噪或壓縮。使用基于Birge-Massart策略的小波系數選擇規則獲得thr。通常,alpha= 1.5用于壓縮,alpha= 3用于去噪。使用wdcbm2選擇各層的獨立閾值。
? ? ?[C,S]是要由wavedec2函數得到的進行去噪或壓縮的圖像的小波分解結構,level?j = size(S,1)-2.
? ? THR是3*j的矩陣,THR(:,j)包含對于level j情況下,水平,對角線和垂直三個方向的閾值。 NKEEP是長度為j的向量,NKEEP(j)包含要保持在級別j情況下系數的數量。
j,M和ALPHA定義策略:
4、wdencmp函數
? ? [XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',C,S,'wname',N,THR,SORH)?
??????函數wdencmp用于一維或二維信號的消噪或壓縮。wname是所用的小波函數,gbl(global的縮寫)表示每層都采用同一個閾值進行處理,lvd表示每層用不同的閾值進行處理,N表示小波分解的層數,THR為閾值3*N,SORH表示選擇軟閾值還是硬閾值(分別取為’s’和’h’),XC是消噪或壓縮后的信號,[CXC,LXC]是XC的小波分解結構,PERF0和PERFL2是恢復和壓縮L^2的范數百分比, 是用百分制表明降噪或壓縮所保留的能量成分。
5、wrcoef2函數
? ?wrcoef2函數是用來重建一幅圖像的系數,其實就是根據小波分解之后的系數c來重建其對應的圖像。重建好的圖像的尺度與原始圖像一致。即無論你要重構哪個層的系數,最終它的維度都是和原始圖像的尺度一致。其調用形式如下:?
? ? ? ? X = wrcoef2(‘type’,c,s,’wname’,N)?
- type :指定要進行重構的小波系數,如a –近似圖像 ;h – 水平高頻分量;v – 垂直高頻分量;d–對角高?
- 頻分量;?
- c: 是小波分解函數wavedec2分解的小波系數;?
- s: 是wavedec2分解形成的尺度;?
- wname :指定小波基;?
- N :指定重構的小波系數所在的層。?默認重構最大層的系數,N = size(S,1)-2。N所指的層數是如何表示的?比如將圖像小波分解成3層,那么N = 3是代表256×256那一層,還是64×64那一層?N=3 代表的是64×64那一層。
wrcoef2 的過程就相當于 appcoef2 或者 detcoef2 (抽取系數)后再進行 upcoef2(重構)。
clear; close all;file = 'lena_gray_512.tif'; img = imread(file); img = double(img); % 對圖像進行3層的小波分解 N = 3; % 設置分解層數 [c,s] = wavedec2(img,N,'db1');% 對各層的近似圖像a進行重構 a1 = wrcoef2('a',c,s,'db1',1); a2 = wrcoef2('a',c,s,'db1',2); a3 = wrcoef2('a',c,s,'db1',3);6、appcoef2 函數
appcoef2適用于2維圖像,其主要是為了提取小波分解中形成的近似圖像,即低頻分量。?
?A = appcoef2(c,s,’wname’,N)??
- c:小波分解的小波系數?
- s:小波分解的對應尺度?
- wname :指定小波基?
- N :指定小波系數所在的層數?
7、detcoef2
函數detcoef2 用來對二維離散小波變換的高頻部分系數進行提取。?其調用形式為:?
D = detcoef2(O,c,s,N)??
- O:指定提取哪個高頻分量,取值分別為:’h’ –水平高頻 or ‘v’ – 垂直高頻 or ‘d’ – 對角高頻;?
- c:小波系數矩陣;?
- s:尺度矩陣;
8、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'時,為硬閾值。
9、重構函數 waverec2
? ? waverec2函數是wavedec2的反函數,返回的結果X就是原始圖像。其基于小波分解結構[c,s]對矩陣X進行多級小波重構,其中[c,s]是wavedec2函數的返回值。其調用格式如下:?
? ? ? X = waverec2(c,s,’wname’)?)??
- c: 系數矩陣?
- s: 尺度矩陣?
- wname : 指定小波基?
值得注意的是,X = waverec2(c,s,’wname’) 相當于 X = appcoef2(c,s,’wname’,0)。
如何進行小波分解:
假設{x1,x2}是一個由兩個元素組成的信號,定義這兩個元素的平準和細節為:
a = (x1+x2)/2 ;d=(x1-x2)/2
變換實例如下:
? ??
from:https://blog.csdn.net/qq_39936376/article/details/80809770
from:http://blog.sina.com.cn/s/blog_84024a4a0101fn02.html
from:https://blog.csdn.net/Chaolei3/article/details/80940459
總結
- 上一篇: 视频直播画质核心影响因素分析:分辨率、帧
- 下一篇: ”不怎么动的运动“塑造完美翘臀