wavedecn
wavedecn(data, wavelet, mode='symmetric', level=None, axes=None)
Multilevel nD Discrete Wavelet Transform.
Parameters
----------
data : ndarray
nD input data
# 可通过设置axes参数,来确定小波变化的维度
axes : sequence of ints, optional
Axes over which to compute the DWT. Axes may not be repeated. The
default is None, which means transform all axes
(``axes = range(data.ndim)``).
Returns
-------
[cAn, {details_level_n}, ... {details_level_1}] : list
Coefficients list. Coefficients are listed in descending order of
decomposition level. `cAn` are the approximation coefficients at
level `n`. Each `details_level_i` element is a dictionary
containing detail coefficients at level `i` of the decomposition. As
a concrete example, a 3D decomposition would have the following set of
keys in each `details_level_i` dictionary::
{'aad', 'ada', 'daa', 'add', 'dad', 'dda', 'ddd'}
where the order of the characters in each key map to the specified
`axes`.
# 字符顺序与axes的顺序一致
# 若输入三维data,aad分别对应channel,height,width
2D_DWT
import numpy as np
import pywt
input = np.ones((4, 4))
coeffs = pywt.wavedecn(input, wavelet='haar', level=2)
2D coefficient dictionary和 2D array之间的转换关系:
Handling DWT Coefficients
3D_DWT
三维图像经过一级小波变换可以得到八张子图。
import cv2
import numpy as np
import pywt
file = '1.jpg'
img = cv2.imread(file)
# img (224,224,3)
img = cv2.resize(img, (224, 224))
# img (3,224,224)
img = np.array([img[:, :, i] for i in range(3)])
coeffs = pywt.wavedecn(img, wavelet='haar', level=3)
print(coeffs[3]['aad'].shape) # (2, 112, 112)
print(coeffs[2]['aad'].shape) # (1, 56, 56)
print(coeffs[1]['aad'].shape) # (1, 28, 28)
(1,H,W)的图像进行小波变换,{'daa', 'dad', 'dda', 'ddd'}结果都为0
input = np.arange(4).reshape((2, 2))
print(pywt.wavedecn(input, wavelet='haar', level=1))
# [array([[3.]]), {'ad': array([[-1.]]), 'da': array([[-2.]]), 'dd': array([[0.]])}]
input = np.arange(4).reshape((1, 2, 2))
print(pywt.wavedecn(input, wavelet='haar', level=1))
# [array([[[4.24264069]]]),
# {'aad': array([[[-1.41421356]]]),
# 'ada': array([[[-2.82842712]]]),
# 'add': array([[[-2.22044605e-16]]]),
# 'daa': array([[[0.]]]), 'dad': array([[[0.]]]),
# 'dda': array([[[0.]]]), 'ddd': array([[[0.]]])}]
参考:Matlab Code for 3D DWT (3 Dimensonal Discrete Wavelet Transform