寫在前面
- 本文對小波變換進行公式整理,小波變換的公式設計真的是整齊而漂亮
- 本文只涉及基礎的小波變換部分,達到進行圖像處理的程度
- 主要參考岡薩雷斯的《數字圖像處理》第4版英文版,這一版的第7章小波變換內容改動非常大。第7章首先從基於矩陣的變換的角度開始講解,並把離散的餘弦變換、正弦變化、哈特利變換、沃爾什——哈達瑪變換、斜變換(Slant Transform)、哈爾變換、小波變換、等等,都放到了這一類當中。總之讀下來醍醐灌頂,非常舒服
基於矩陣的變換(Matrix-based Transforms)
(如果想直接看小波變換,可以跳過這一節,從小波變換的基本原理開始看)
首先考慮如下形式的離散餘弦變換(DCT),該變換爲:
t(u)=x=0∑N−1f(x)s(x,u)
其中s(x,u)是變換核,形式爲
s(x,u)=α(u)cos(Nuπ(x+21))
其中
α(u)=⎩⎨⎧N1N2 if u=0 if u=1,2,...,N−1
離散餘弦變換有很多種寫法,這些寫法上存在細微的差異,這裏採用這種離散餘弦變換寫成這樣的好處是變換的基向量是正交的。
什麼意思呢?我們等會會解答,先看另一個問題。
把一個週期的一維離散頻率域信號寫成列向量的形式f∈RN×1,對應的頻率域序列爲t∈RN×1,上式可以寫成
t=⎣⎢⎢⎡s0Tfs1Tf...sN−1Tf⎦⎥⎥⎤=⎣⎢⎢⎡s0Ts1T...sN−1T⎦⎥⎥⎤f
其中si=[s(0,i)s(1,i)...s(N−1,i)]T. 進一步令A=[s0s1...sN−1]T,易得
t=Af
會發現原信號與變換後的信號中間只是一個基於矩陣的變換,這種變換非常多,(其實最常用的傅里葉變換也可以看作是一種基於矩陣的變換),這種變換對應的逆變換也有可能是基於矩陣的變換(例如傅里葉變換)
正交變換
好了,回到離散餘弦變換,剛纔說的變換基向量正交即各個s之間是正交的
AAT=⎣⎢⎢⎢⎡s0Ts0s1Ts0⋮sN−1Ts0s0Ts1s1Ts1⋮sN−1Ts1⋯⋯⋱⋯s0TsN−1s1TsN−1⋮sN−1TsN−1⎦⎥⎥⎥⎤=I
也即A是一個正交矩陣,所以逆變換就直接爲f=ATt
這也基於矩陣變換中非常特殊的一類:正交變換。
正交變換的優勢包括:
- 內積不變:即⟨f1,f2⟩=⟨t1,t2⟩=⟨Af1,Af2⟩
- 夾角不變
- 距離不變
各種變換核展示
二維情況
如果信號是二維的,例如
t(u,v)=x=0∑N−1y=0∑N−1f(x,y)s(x,y,u,v)
如果變換核是可分離的:s(x,y,u,v)=s1(x,u)s2(y,v),而且是對稱的,即s1≡s2,且分離後的一維變換核是實正交的,那麼二維變換可以寫成
t=AfATf=ATtA
其中f,t∈RN×N是二維信號的矩陣形式。上式中對f的左乘A和右乘AT分別對應列變換和行變換(類似二維離散傅里葉變換的行列可分離性)
小波變換的基本原理
- 小波變換的思想是利用尺度函數表示原始信號,隨着尺度級的下降,尺度越來越大,對原始信號的表示也越來越粗糙模糊,和原始信號的差異越來越大,怎麼辦呢?這時引入小波函數來對尺度函數表示部分和原始信號之間的差異進行表示,最終尺度函數+小波函數可以精確的表示原信號。
- 施加在尺度函數和小波函數上的係數就是小波變換的結果。用這些係數,可以復原出原信號。
- 可以理解爲尺度函數大致粗糙地表示了原始信號中,而小波函數則精確的描述了兩者之間的差異
- 具體地,原始信號可以看作是最高(精細)的尺度,隨着尺度級逐漸下降,尺度函數從最精細的表示逐漸變得粗糙,在這過程中,小波函數不斷地表示兩者之間的差異部分,小波函數自身也不斷地變得粗糙
- 這樣做的優勢是能對時間(空間)頻率的局部化分析,通過伸縮平移運算對信號(函數)逐步進行多尺度細化,最終達到高頻處時間細分,低頻處頻率細分——摘自百度百科
尺度函數(Father Scaling Function)
基本概念
尺度函數的作用是大致地表示原始信號,尺度函數φ(x)由實數、平方可積的函數組成,將尺度函數進行冪爲2的伸縮和整數倍的平移得到函數集合{φj,k(x)∣j,k∈Z},其中:
φj,k(x)=2j/2φ(2jx−k)(1)
k決定了φj,k的位置,j決定了寬度和高度。
如果限制j=j0,那麼{φj0,k∣k∈Z}則張成了一個可以表示的空間的基,我麼記
Vj0={φj0,k∣k∈Z}(2)增大j0會增強Vj0的表達能力,因爲φj0,k更窄,可以表示出更精細的部分。
注意φ0,0=φ.
哈爾尺度函數
一種常見的尺度函數是哈爾尺度函數:
φ(x)={10 if 0≤x<1 otherwise (3)
從式(3)可以得出φ0,k=21φ1,2k+21φ1,2k+1,尤其是φ(x)=φ(2x)+φ(2x−1)。
下圖是一個例子
尺度函數的要求
可以作爲尺度函數要滿足四條MRA(Multi-Resolution Analysis)要求:
- 尺度函數對其整數平移是正交的
- 低尺度長成的函數空間嵌套在高尺度內,即:
V−∞⊂...⊂V−1⊂V0⊂V1...⊂V∞(4)
- 唯一一個任何尺度都能表達的函數是f(x)=0
- 當尺度趨於無窮時,所有可測的,平方可積的一維函數L2(R)都可以表達成尺度函數的線性組合,即V∞=L2(R)
其他性質
由這四條要求,尺度函數可以表達爲高一級尺度下的線性組合
φ(x)=k∈Z∑hφ(k)2φ(2x−k)(5)
該式叫做“細化或膨脹方程”(refinement or dilation equation),其中hφ(k)叫做“擴展係數”(expansion coefficients),其所組成的有序集合{hφ(k)∣k=0,1,2,...}通常叫做尺度函數係數(scaling function coefficients)。對於正交的尺度函數,提供一種hφ的求法:
hφ(k)=⟨φ(x),2φ(2x−k)⟩=∫φ(x)2φ(2x−k)dx(6)
這是由於不同k的2φ(2x−k)之間是互相正交的,所以由式(5)可以推出式(6).
小波函數(Mother Wavelet Function)
基本概念
小波函數修正了尺度函數表示和原始信號之間的差異。在給定尺度函數φ(x)後,一定存在一個小波函數ψ(x),類似尺度函數的冪爲2的伸縮和整數倍的平移,得到函數
ψj,k(x)=2j/2ψ(2jx−k)(7)
其中j,k∈Z。小波函數有啥用呢?如果我們令Wj0表示小波函數集合{ψj0,k∣k∈Z}所張成的空間,那麼
Vj0+1=Vj0⊕Wj0(8)
其中⊕表示所張成空間的並。形象地說,從Vj0+1到Vj0之間模糊部分,可以用Wj0填補。
而且Wj0和Vj0中的基函數是正交的,即
⟨φj0,k(x),ψj0,l(x)⟩=0 for k=l(9)
尺度空間和小波空間之間的關係如下圖所示
實際上,兩者之間的聯繫可以寫成是
ψ(x)=k∑hψ(k)2φ(2x−k)(10)
其中hψ(k)叫做小波函數係數(wavelet function coefficients),可以寫成是有序集合{hψ(k)∣k=0,1,2,...}.
而且,由於小波函數對整數平移之間是正交的,同時由式(9)和(10),可以證明
hψ(k)=(−1)khφ(1−k)(11)
哈爾小波函數
哈爾尺度函數對應的小波函數爲
ψ(x)=⎩⎪⎨⎪⎧1−100≤x<0.50.5≤x<1 elsewhere (12)
下圖是一個例子
小波級數展開(Wavelet Series Expansion)
注意到
L2(R)=Vj0⊕Wj0⊕Wj0+1⊕...(13)
其中j0是一個任意起點。我們定義f(x)∈L2(R)的小波級數展開爲:
f(x)=k∑cj0(k)φj0,k(x)+j=j0∑∞k∑dj(k)ψj,k(k)(14)
其中cj0和dj (j≥j0)分別叫做近似和精細係數(approximation and detail coefficients)。式(14)的第一項是對f(x)的j0級近似,第二項是更高級的不斷精細修正。如果尺度函數和小波函數是正交的,那麼有
cj0dj=⟨f(x),φj0,k(x)⟩=⟨f(x),ψj0,k(x)⟩(15)
其中,內積的含義類似式(6).
這裏給出一個例子
對應展開爲
一維離散小波變換(1-D Discrete Wavelet Transform, DWT)
類似離散傅里葉變換,對於N個點的離散信號(N=2J),取j0=0,則有
f(x)=N1[Tφ(0,0)φ0,0(x)+j=0∑J−1k=0∑2j−1Tψ(j,k)ψj,k(x)](16)其中
Tφ(0,0)Tψ(j,k)=⟨f(x),φ0,0(x)⟩=⟨f(x),φ(x)⟩=N1x=0∑N−1f(x)φ∗(x)=⟨f(x),ψj,k(x)⟩=N1x=0∑N−1f(x)ψj,k∗(x)(18)
以上,j=0,1,...,J−1,且k=0,1,...,2j−1,和連續情況類似,式(18)中的係數分別叫做近似和精細係數(approximation and detail coefficients)。如果尺度函數和小波函數是實函數,那麼式(18)中的共軛操作“∗”可以不要。
一個例子:如果4個點的信號,f(0)=1,f(1)=4,f(2)=−3,f(3)=0,那麼N=4,J=2,
從正交變換的角度,也即
後記
讀到這裏,小波變換到這裏記本上已經講清楚了這個過程。知道小波變換在幹什麼,這篇文章的目的就達到了。
其實後面還有一些東西,這裏只粗淺的簡記一下,想深入瞭解的,建議去看原版書。
快速小波變換(The Fast Wavelet Transform)
對於近似和精細係數,其實有以下關係:
- 連續情況
cj(k)=n∑hφ(n−2k)cj+1(n)dj(k)=n∑hψ(n−2k)cj+1(n)
- 離散情況
Tφ(j,k)=n∑hφ(n−2k)Tφ(j+1,n)Tψ(j,k)=n∑hψ(n−2k)Tφ(j+1,n)
在離散的情況下,可以用卷積的方式計算係數
Tφ(j,k)=Tφ(j+1,n)★hφ(−n)Tψ(j,k)=Tφ(j+1,n)★hψ(−n)
記下采樣y2↓(n)=y(2n),(n=1,2,…),
用子帶編碼,係數可以採用如下的方式計算
時間複雜度從O(Nlog2N)降爲O(N).
下面是一個例子:
反變換爲:
二維快速小波變換
反變換爲
小波包(Wavelet Packets)
對每一層都嵌套的進行小波變換
參考文獻:
[1] Gonzales, Rafael C., and Richard E. Woods. “Digital image processing. Fourth Edition” (2018).