任意的一個信號皆可由小波轉換的基底的線性組合所合成,而小波轉換:即是算出此信號中,所含有的每一個基底的分量。

預備知識:
正交 (Orthogonal)




傅立葉轉換 (Fourier Transform) vs. 小波轉換 (Wavelet Transform)

傅立葉轉換的基底,是由一組不同頻率且正交的單頻弦波信號所構成,而任意的一個信號皆可由此組基底的線性組合所合成。
傅立葉轉換即是算出此信號所含有每一個基底的分量。
唯傅立葉轉換的基底是週期性的,時間展衍範圍無限大,所以傳立葉轉換的結果無法顯示每一個基底在此信號的時間位置資訊。

小波轉換的基底,是由一組既代表頻率又代表位置的基底所構成,這些基底之間彼此互相存在著放大、縮小和平移的關係。
而任意的一個信號亦皆可由小波轉換的基底的線性組合所合成。
小波轉換即是算出此信號所含有每一個基底的分量。
小波轉換的基底在一維時,具有時間與頻率的資訊,在二維時,具有空間位置和頻率的資訊。




小波轉換理論分析

以 Ψ(t) 代表小波信號的母函數,利用此函數,可以產生小波轉換的所有基底,以 Ψ(t-T / a) 傳表函數 Ψ(t) 在時間軸上放大或縮小 a 位,平移 T 時間的信號,這些信號將構成小波轉換的基底。
若 a > 1,此函數在時間軸放大,即此信號的頻率變低。
若 a < 1,此函數在時間軸縮小,即此信號的頻率變高。

Haar 小波定義為 ΨH((t-T) / a),其中:
ΨH(k) = 1, if 0 < k < 1/2
ΨH(k) = -1, if 1/2 <= k < 1
ΨH(k) = 0, others

則 ΨH((t-T) / a) 可構為一組小波基底,Haar 小波是其中之一,其基底的一部份為:
a = 2, T = 0
wavelet_001

a = 4, T = 0
wavelet_002

a = 2, T = 2
wavelet_003

a = 2, T = 4
wavelet_004

由圖可以發現 Haar 小波的特性:
  • 這些小波在時間的延展上有一定的範圍
  • 這些小波的頻率並非完全相同
  • 這些小波兩兩正交


雖然小波基底有無限多個,但針對離散信號,可以作合理的近似,而找到一組含有有限個小波當基底,來完成小波轉換。

以 Haar 小波而言,ΨH(t/2) 可視為離散信號能表示的最高頻率成為的一個 Haar 小波信號,因為在 ΨH((t-T) / a) 中, 1/a 的最大值是 1/2,可以 2 的次方值,將此頻率變小,即 1/a 可以取 1/2, 1/4, 1/8 …,同理,T 的值可取 0, 2, 4, 8 ...,如此,可重新定義一組離散 Haar 小波基底,這些基底之間彼此兩兩正交:
Ψi,m(k) = ΨH(2it - m); i = -1, ..., -∞; m = 0, ..., ∞

設 f(t) 為一一維信號,則此信號可以 Ψi,m(k) 線性組合表示成:
f(t) = ΣΣCi,m * Ψi,m(t), 其中 i = -1, ..., -∞; m = 0, ..., ∞
Ci,m 為 f(t) 之一維小波轉換之係數,
接著將上式的兩邊信號和 Ψi,m(t) 作內積:
∫f(t) * Ψi,m(t) dt = ΣΣCi,m * Ψi,m(t) * Ψi,m(t)
由於 Ψi,m(t) 中的基底彼此正交的關係 (內積為 0),接著會變成:
=>∫f(t) * Ψi,m(t) dt = Ci,m * Ψi,m(t) * Ψi,m(t)
=>∫f(t) * Ψi,m(t) dt = Ci,m * 2 -i
所以:
=>Ci,m = 2 i * ∫f(t) * Ψi,m(t) dt

若假設所處理的對象皆為離散信號,且時間範圍在 (0, 8) 間,最小時間單位為 1,以 x[n] = {1, 2, 3, 4, 3, 2, 2, 2} 表示欲處理之訊號。
在 8 維向量中,以小波轉換來說,其基底有:
φ-1,0(t) = φH(t/2) 表示為 φ7[n] = {1, -1, 0, 0, 0, 0, 0, 0}
φ-1,1(t) = φH(t/2 - 1) 表示為 φ6[n] = {0, 0, 1, -1, 0, 0, 0, 0}
φ-1,2(t) = φH(t/2 - 2) 表示為 φ5[n] = {0, 0, 0, 0, 1, -1, 0, 0}
φ-1,3(t) = φH(t/2 - 3) 表示為 φ4[n] = {0, 0, 0, 0, 0, 0, 1, -1}
φ-2,0(t) = φH(t/4) 表示為 φ3[n] = {1, 1, -1, -1, 0, 0, 0, 0}
φ-2,1(t) = φH(t/4 - 1) 表示為 φ2[n] = {0, 0, 0, 0, 1, 1, -1, -1}
φ-3,0(t) = φH(t/8) 表示為 φ1[n] = {1, 1, 1, 1, -1, -1, -1, -1}
φ-4,0(t) = φH(t/16) 表示為 φ0[n] = {1, 1, 1, 1, 1, 1, 1, 1}

其中 ΨH(t/16) 已經是 直流基底,已無再放大之需要,因為在此時間內皆為直流訊號,即為同一個直流基底。

將 x[n] 以這些小波基底的表示方式為:
x[n] = ΣX[k] * φk[n]
= X[0] * φ0[n] + X[1] * φ1[n] + X[2] * φ2[n] +
X[3] * φ3[n] + X[4] * φ4[n] + X[5] * φ5[n] +
X[6] * φ6[n] + X[7] * φ7[n]

如果欲求 X[g] 之值,先將 x[n] 與 φg[n] 作內積,則:
x[n] * φg[n] = {ΣX[k] * φk[n]} * φg[n]
= X[g] * φg[n] * φg[n]
因為這些基底之間兩兩正交,故內積為 0 。
所以
=> X[g] = (x[n] * φg[n]) / (φg[n] * φg[n])

若 g = 1,
則 φ1[n] * φ1[n]
= (1*1) + (1*1) + (1*1) + (1*1) + ((-1) * (-1)) + ((-1) * (-1)) + ((-1) * (-1)) + ((-1) * (-1))
= 8,
且 x[n] * φ1[n]
= 1 *1 + 2*1 + 3*1 + 4*1 + 3*(-1) + 2*(-1) + 2*(-1) + 2*(-1)
= 1
可以得到 X[1] = 1 / 8 = 0.125

若 g = 7,
則 φ7[n] * φ7[n]
= (1*1) + ((-1) * (-1)) + 0 + 0 + 0 + 0 + 0 + 0
= 2
且 x[n] * φ7[n]
= 1 *1 + 2*(-1) + 3*0 + 4*0 + 3*0 + 2*0 + 2*0 + 2*0
= -1
可以得到 X[7] = -1 / 2 = -0.5

將小波轉換以矩陣表示為:
[1, 2, 3, 4, 3, 2, 2, 2]T =
  1   1   1   0   1   0   0   0      (19 / 8)
  1   1   1   0  -1   0   0   0      ( 1 / 8)
  1   1  -1   0   0   1   0   0      (-4 / 4)
  1   1  -1   0   0  -1   0   0   x  ( 1 / 4)
  1  -1   0   1   0   0   1   0      (-1 / 2)
  1  -1   0   1   0   0  -1   0      (-1 / 2)
  1  -1   0  -1   0   0   0   1      ( 1 / 2)
  1  -1   0  -1   0   0   0  -1      ( 0 / 2)





多層次的 Haar 小波轉換

以上例的基底為例,可以發現有 4 種不同的頻率,其中 4 個最高頻為 X[4] ~ X[7],2個次高頻為 X[2] 及 X[3],最低頻率為 X[1],直流成份為 X[0],利用前面公式,可以觀察出:
X[4+k] = {x[2k] - x[2k+1]} / 2, when k = 0, 1, 2, 3
X[2+k] = {x[4k] + x[4k+1] - x[4k+2] - x[4k+3]} / 4, when k = 0, 1
X[1] = {x[8k+0] + x[8k+1] + x[8k+2] + x[8k+3] - x[8k+4] - x[8k+5] - x[8k+6] - x[8k+7]} / 8
X[0] = {x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7]} / 8

再經過觀察,最高頻率和原始信號相關的點有 2 個,次高頻率和原始信號相關的點有 4 個,依此類推,可以假設 a1[k] 及 b1[k]:
其中 a0[k] = x[k],在 k = 0, 1, 2, 3 時
a1[k] = {a0[2k] + a0[2k+1]} / 2
b1[k] = {a0[2k] - a0[2k+1]} / 2
又此時 b1[k] 與 X[4+k] 為相等,X[4+k] = b1[k]
經過第一層處理後,可以得到 8 個點的信號表示為:
{a1[0], a1[1], a1[2], a1[3], b1[0], b1[1], b1[2], b1[3]}

可以將 a1[k] 視為 x[k] 經過低通濾波後,再間隔取點的結果,
b1[k] 視為 x[k] 經過高通濾波後,再間隔取點的結果。

以同樣的關係,推導下一層,唯第 2 層的輸出,只和 a1[k] 有關:
a2[k] = {a1[2k] + a1[2k+1]} / 2
b2[k] = {a1[2k] - a1[2k+1]} / 2
= {a0[4k] + a0[4k+1] - a0[4k+2] - a0[4k+3]} / 4
又此時 b2[k] 與 X[2+k] 為相等,X[2+k] = b2[k],
經過第二層處理後,此 8 個點的信號變成:
{a2[0], a2[1], b2[0], b2[1], b1[0], b1[1], b1[2], b1[3]}

在算式中,發現次高頻率的成份,可以由前一層的低通濾波結果係數中求得。
最後,
X[0] = a3[k] = {a2[2k] + a2[2k+1]} / 2
= {a0[0] + a0[1] + a0[2] + a0[3] + a0[4] + a0[5] + a0[6] + a0[7]} / 8
X[1] = b3[k] = {a2[2k] - a2[2k+1]} / 2
= {a0[0] + a0[1] + a0[2] + a0[3] - a0[4] - a0[5] - a0[6] - a0[7]} / 8
最後的 8 點信號為:
{a3[0], b3[0], b2[0], b2[1], b1[0], b1[1], b1[2], b1[3]}
此即為原信號 x[n] 之離散小波轉換。

結論:對於 8 層的信號,只需計算 3 層,即可將所有小波轉換的結果算出來,同理,如果有 N 點之信號,只需計 log2N 層。
亦即,從第 i 層到第 i+1 層的正小波轉換的關係式為:
ai+1[k] = {ai[2k] + ai[2k+1]} / 2
bi+1[k] = {ai[2k] - ai[2k+1]} / 2

以上述例子中,x[n] = {1, 2, 3, 4, 3, 2, 2, 2} 為例:
a1[n] = {1.5, 3.5, 2.5, 2}
b1[n] = {-0.5, -0.5, 0.5, 0}

a2[n] = {2.5, 2.25}
b2[n] = {-1, 0.25}

a3[n] = {2.375}
b3[n] = {0.125}

X[k] = {2.375, 0.125, -1, 0.25, -0.5, -0.5, 0.5, 0}
其中 2.375 即是 x[k] 之直流值,即是 x[n] 之平均值。
另一種展示多層次小波轉換的方式如下,往下為正小波轉換,往上為反小波轉換:
 1       2      3     4     3     2     2     2
 1.5     3.5    2.5   2     -0.5  -0.5  0.5   0
 2.5     2.25   -1    0.25
 2.375   0.125





二維階層式 Haar 小波轉換

之前介紹的階層式的一維 Haar 小波轉換演算法,執行一次可將一個 N 點的信號 x[n] 轉換成兩個 N/2 的信號 XL[n] 和 XH[n],二維階層式 Haar 小波轉換演算法,可以利用一維階層式演算法求得:
(1) 先針對影像中的每一列,先執行一次一階一維小波轉換
wavelet_011
(2) 再針對步驟 (1) 的影像結果的每一行,執行一次一階一維小波轉換
wavelet_012
最後結果的影像中,左上方的區塊為原始影像的 (N/2) x (N/2) 大小的低通濾波後的圖像,其餘區塊為高通濾波後的圖像。

以相同的方法,可將左上方的區塊再分解,可得二階的小波轉換:
wavelet_013

依此類推,可依此方式持續往下一層作小波轉換。




Reference:
"數位影像處理" - 連國珍 著

如有侵權,請告知,謝謝。
創作者介紹

拾人牙慧點滴

silverwind1982 發表在 痞客邦 PIXNET 留言(0) 人氣()