網上找了好多文章都沒有提到這個東西,沒有說明 wavedec2 函數各個返回值究竟是什么意思
我們先看看 wavedec2 函數的大概形式,
pywt.wavedec2(data, wavelet, mode=’symmetric’, level=None, axes=(-2, -1))
data: 輸入的數據
wavelet: 小波基
level: 尺度(要變換多少層)
return: 返回的值要注意,每一層的高頻都是包含在一個tuple中,例如三層的話返回為 [cl, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)]
單單這么看可能不太好懂,所以來個實例,我的目的是把11.xlsx
里面的灰度圖像進行3層的小波變換,並要提取變換后的低頻分量的系數和高頻分量的系數
實例
import pywt
import xlrd
import numpy as np
def excel2matrix(path): # 把xlsx文件的數據變成np.array數組
data = xlrd.open_workbook(path)
table = data.sheets()[0]
nrows = table.nrows # 行數
ncols = table.ncols # 列數
datamatrix = np.zeros((nrows, ncols))
for i in range(nrows):
rows = table.row_values(i)
datamatrix[i,:] = rows
return datamatrix
pathX = '11.xlsx' # 數據路徑
x = excel2matrix(pathX) # 我的灰度圖數據
w = 'sym4' # 小波基類型
l = 3 # 小波變換層次
coeffs = pywt.wavedec2(x,w,l)
[cl, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)] = coeffs
說一下這個 coeffs
返回值究竟是個啥,它是個列表,里面主要有兩個東西:1)低頻系數,以數組形式存放。2)高頻系數,每一層的(水平、垂直、對角線)高頻系數構成一個 3 維元組,所以有幾層小波分解就有幾個元組
有的同學可能不知道怎么設置看到代碼運行后各變量的值 ,可以參考我這篇文章 pycharm 設置在控制台運行,顯示代碼涉及到的變量值(類似matlab的工作空間)
使用 wavedec2 函數時注意輸入參數的匹配,盡量用名稱指定,不要用參數位置匹配,如果用參數位置匹配,一定要檢查是否每個參數都匹配正確。不然可能會出現我這篇文章里面的錯誤 ValueError: too many values to unpack (expected 4)錯誤,小波變換函數 wavedec2 使用時提示的
數據集鏈接
鏈接:https://pan.baidu.com/s/1kqIBkgNecK2sJl5cnwc-cg
提取碼:m600