1. 程式人生 > >Haar小波變換

Haar小波變換

這邊主要用簡單的例子來介紹下Haar小波的使用情況。

例如:有a=[8,7,6,9]四個數,並使用b[4]陣列來儲存結果.

則一級Haar小波變換的結果為:

        b[0]=(a[0]+a[1])/2,                      b[2]=(a[0]-a[1])/2

       b[1]=(a[2]+a[3])/2,                      b[3]=(a[2]-a[3])/2

即依次從陣列中取兩個數字,計算它們的和以及差,並將和一半和差的一半依次儲存在陣列的前半部分和後半部分。

例如:有a[8],要進行一維Haar小波變換,結果儲存在b[8]

則一級Haar

小波變換的結果為:

       b[0]=(a[0]+a[1])/2,                       b[4]=(a[0]-a[1])/2

       b[1]=(a[2]+a[3])/2,                       b[5]=(a[2]-a[3])/2

       b[2]=(a[4]+a[5])/2,                       b[6]=(a[4-a[5]])/2

       b[3]=(a[6]+a[7])/2,                       b[7]=(a[6]-a[7])/2

如果需要進行二級Haar小波變換的時候,只需要對b[0]-b[3]

進行Haar小波變換.

對於二維的矩陣來講,每一級Haar小波變換需要先後進行水平方向和豎直方向上的兩次一維小波變換,行和列的先後次序對結果不影響。

小波變換的基本思想是用一組小波函式或者基函式表示一個函式或者訊號,例如影象訊號。為了理解什麼是小波變換,下面用一個具體的例子來說明小波變換的過程。

1. 求有限訊號的均值和差值

   [例] 假設有一幅解析度只有4個畫素 的一維影象,對應的畫素值或者叫做影象位置的係數分別為: 
                  [9  7  3  5]
 計算它的哈爾小波變換系數。

計算步驟如下:
    步驟1:求均值(averaging)。計算相鄰畫素對的平均值,得到一幅解析度比較低的新影象,它的畫素數目變成了2個,即新的影象的解析度是原來的1/2,相應的畫素值為:

            [8 4]

步驟2:求差值(differencing)。很明顯,用2個畫素表示這幅影象時,影象的資訊已經部分丟失。為了能夠從由2個畫素組成的影象重構出由4個畫素組成的原始影象,就需要儲存一些影象的細節係數(detail coefficient),以便在重構時找回丟失的資訊。方法是把畫素對的第一個畫素值減去這個畫素對的平均值,或者使用這個畫素對的差值除以2。在這個例子中,第一個細節係數是(9-8)=1,因為計算得到的平均值是8,它比9小1而比7大1,儲存這個細節係數就可以恢復原始影象的前兩個畫素值。使用同樣的方法,第二個細節係數是(3-4)=-1,儲存這個細節係數就可以恢復後2個畫素值。因此,原始影象就可以用下面的兩個平均值和兩個細節係數表示,

               [8 4 1 -1]

步驟3:重複第1,2步,把由第一步分解得到的影象進一步分解成解析度更低的影象和細節係數。在這個例子中,分解到最後,就用一個畫素的平均值6和三個細節係數2,1和-1表示整幅影象。

               [6  2  1  -1]

這個分解過程如表8-1所示。

8-1 哈爾變換過程

解析度

平均值

細節係數

4

[9  7  3  5]

2

[8  4]

[1  -1]

1

[6]

[2]

    由此可見,通過上述分解就把由4畫素組成的一幅影象用一個平均畫素值和三個細節係數表示,這個過程就叫做哈爾小波變換(Haar wavelet transform),也稱哈爾小波分解(Haar wavelet decomposition)。這個概念可以推廣到使用其他小波基的變換。
    從這個例子中我們可以看到:
  ① 變換過程中沒有丟失資訊,因為能夠從所記錄的資料中重構出原始影象。
  ② 對這個給定的變換,我們可以從所記錄的資料中重構出各種解析度的影象。例如,在解析度為1的影象基礎上重構出解析度為2的影象,在解析度為2的影象基礎上重構出解析度為4的影象。
  ③ 通過變換之後產生的細節係數的幅度值比較小,這就為影象壓縮提供了一種途徑,例如去掉一些微不足道的細節係數並不影響對重構影象的理解。

圖1 是Haar 小波對二維影象的一級及三級分解子帶圖, 在右圖中最低頻a3 子帶影象與原始影象極其相似, 只是尺寸變小, 它包含了原圖的絕大部分能量,對恢復影象質量影響較大, 其餘高頻子帶的小波係數大多非常小。在同一層, 由於v 及h 子圖表示的邊緣子影象的小波係數和方差比d 子圖要大, 因此d 子圖在重構影象時不是很重要[4 ]。