1. 程式人生 > >[Python ]小波變化庫——Pywalvets 學習筆記

[Python ]小波變化庫——Pywalvets 學習筆記

相關資料

筆記

  • 術語(中英對照):

    • 尺度函式 : scaling function (在一些文件中又稱為父函式 father wavelet )
    • 小波函式 : wavelet function(在一些文件中又稱為母函式 mother wavelet)
    • 連續的小波變換
      :CWT
    • 離散的小波變換 :DWT
  • 小波變換的基本知識

    • 不同的小波基函式,是由同一個基本小波函式縮放平移生成的。
    • 小波變換是將原始影象與小波基函式以及尺度函式進行內積運算,所以一個尺度函式和一個小波基函式就可以確定一個小波變換
    • 小波變換後低頻分量
  • 基本的小波變換函式

Pywalvets API 說明

下面是我使用過程中對Pywalvets 提供的API 的部分理解與說明(裡面如果有不對的地方請指出,大家也可以直接看官方提供的API說明文件)

  • 小波函式

    我在文章開頭就提供了一個檢視小波族的網址,在Pywalvets中也提供了API,你可以用這個函式來檢視它提供哪些小波族,每個小波族下又有哪些係數

    • 檢視小波族 pywt.families

    • 檢視每個小波族中提供的係數 pywt.wavelist

      pywt.wavelist(family=None, kind=’all’)

      family: 小波族的名稱

      kind:可以檢視小波族下全部、離散或者連續的小波

  • 二維小波變換(一維和n維類似):

    • 單層變換 pywt.dwt2

      pywt.dwt2(data, wavelet, mode=’symmetric’, axes=(-2, -1))

      data: 輸入的資料

      wavelet:小波基

      mode: 預設是對稱的

      return: (cA, (cH, cV, cD))要注意返回的值,分別為低頻分量,水平高頻、垂直高頻、對角線高頻。高頻的值包含在一個tuple中。

    • 單層逆變換 pywt.idwt2

      pywt.idwt2(coeffs, wavelet, mode, axes)

      coeffs: 經小波變換後得到的各層的係數

      wavelet:小波基

    • 多尺度變換 wavedec2

      pywt.wavedec2(data, wavelet, mode=’symmetric’, level=None, axes=(-2, -1))

      data: 輸入的資料

      wavelet:小波基

      level: 尺度(要變換多少層)

      return: 返回的值要注意,每一層的高頻都是包含在一個tuple中,例如三層的話返回為 [cA3, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)]

    • 閾值函式 pywt.threshold

      pywt.threshold (data, value, mode=, substitute=)

      data: 輸入的資料

      value:閾值

      mode:閾值函式的型別 ,API提供四種類型(soft hard greater less),具體實現效果可以參考API的例項來理解

      substitute:要替換的值(經閾值函式處理後的值)

利用小波變換對影象進行處理時注意的問題

  我想通過小波變換來提取影象的特徵。在此過程中遇到一些問題分享給大家。

  • 小波基的選擇問題

      可以看到API給出了很多小波族,每個小波族又有很多係數可供我們去選擇,那我們在處理圖片時要怎麼去選擇呢?其實這個問題是沒有標準答案的。我在實驗的過程中,主要是用最後的結果 ——“相同類的統計特徵相近,不同類的統計特徵相差很大”,來挑選小波基函式。

      小波基的選擇也是研究人員在實驗時要考慮的(據我看的論文所得)大家在實踐中可以查閱相關的文章作為參考,或者就拿結果來衡量。

  • 多尺度(多次)小波變化中層數的選擇

       多尺度小波變換一般是3~4層,但是要注意的是,如果實踐中所用的圖片太小,或者紋理並不豐富,其實用單層的小波變換就足夠了。如果你用多層的小波變換,Pywalvets 仍只會返回給你一層變換的結果,因為資訊量過小導致不能取樣來進一步進行變換。