import pywt
for family in pywt.families():
print("%s family: " % family + ', '.join(pywt.wavelist(family)))
========================
haar family: haar
db family: db1, db2, db3, db4, db5, ... , db35, db36, db37, db38
sym family: sym2, sym3, sym4, sym5, ... , sym15, sym16, sym17, sym18, sym19, sym20
coif family: coif1, coif2, coif3, coif4, coif5, ..., coif13, coif14, coif15, coif16, coif17
bior family: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, bior6.8
rbio family: rbio1.1, rbio1.3, rbio1.5, rbio2.2, rbio2.4, rbio2.6, rbio2.8, rbio3.1, rbio3.3, rbio3.5, rbio3.7, rbio3.9, rbio4.4, rbio5.5, rbio6.8
dmey family: dmey
gaus family: gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8
mexh family: mexh
morl family: morl
cgau family: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8
shan family: shan
fbsp family: fbsp
cmor family: cmor
Max(2Nr,2Nd)+26N2N[-4, 4][-5, 5]对称性对称近似对称不对称近似对称近似对称对称对称小波函数消失矩阶数1NNr-12NN--尺度函数消失矩阶数--2N-1---
| 小波函数 | Gaus (gaus) | Dmeyer (dmey) | ReverseBior (rbioNr.Nd) | Cgau (cgau) | Cmor (cmor) | Fbsp (fbsp) | Shan (shan) |
|---|
| 表示形式 |
cgauN | cmor | fbsp | shan |
| 紧支撑正交性 | 无 | 无 | 无 | 无 | 无 | 无 | 无 |
| 紧支撑双正交性 | 无 | 无 | 有 | 无 | 无 | 无 | 无 |
| 连续小波变换 | 可以 | 不可以 | 可以 | 不可以 | 不可以 | 不可以 | 不可以 |
| 离散小波变换 | 不可以 | 可以 | 可以 | 不可以 | 不可以 | 不可以 | 不可以 |
| 对称性 | 对称 | 对称 | 对称 | 对称 | 对称 | 对称 | 对称 |
| 小波函数消失矩阶数 | - | - | - | - | - | - | - |
| 尺度函数消失矩阶数 | - | - | Nr-1 | - | - | - | - |
-
Haar (haar)
Haar函数是小波分析中最早用到的一个具有紧支撑的正交小波函数,也是最简单的一个小波函数,它是支撑域在t∈[0,1]范围内的单个矩形波。Haar小波在时域上是不连续的,所以作为基本小波性能不是特别好。
-
Daubechies (db) 多贝西小波 小波函数
biorNr.Nd 小波的主要特征表现在具有线性相位特性。一般来说为了获得线性相位,需要降低对于正交性的局限,为此该双正交小波降低了对于正交性的要求,保留了正交小波的一部分正交性,使小波攻得了线性相位和较短支集的特性。
-
Reverse biorthogonal (rbio)
-
“Discrete” FIR approximation of Meyer wavelet (dmey)
Dmeyer即离散的Meyer小波,它是Meyer小波基于FIR的近似,用于快速离散小波变换的计算。
-
Gaussian wavelets (gaus)
Gaussian小波是高斯密度函数的微分形式,它是一种非正交与非双正交的小波,没有尺度函数。
-
Mexican hat wavelet (mexh)
Mexican Hat函数为Gauss函数的二阶导数。因数它的形状像墨西哥帽的截面,所以我们称这个函数为墨西哥草帽函数。它在时域和频率都有很好的局部化,但不存在尺度函数,所以此小波函数不具有正交性。
morl(x)=exp(−2
x2)∗cos(5x)
-
Complex Gaussian wavelets (cgau)
属于一类复小波,没有尺度函数。
-
Shannon wavelets (shan)
-
Frequency B-Spline wavelets (fbsp)
样条函数(splinefunction)指一类分段(片)光滑、并且在各段交接处也有一定光滑性的函数,简称样条。
-
Complex Morlet wavelets (cmor)
Morlet小波是一种单频复正弦调制高斯波,也是最常用的复值小波该小波,在时频两域均具有良好的分辨率,将此小波加以改造特别适用于地震资料的分析。
效果展示:https://blog.csdn.net/HanFeiKei/article/details/83584963
文档查看 2
代码演示
import pywt
db3 = pywt.Wavelet('db3')
print(db3)
Family name: Daubechies
Short name: db
Filters length: 6 #滤波器长度
Orthogonal: True #正交
Biorthogonal: True #双正交
Symmetry: asymmetric #对称性,不对称
DWT: True #离散小波变换
CWT: False #连续小波变换
def dwt_and_idwt():
DWT 与 IDWT (离散的小波变换=>分解与重构)
使用db2 小波函数做dwt
x = [3, 7, 1, 1, -2, 5, 4, 6]
cA, cD = pywt.dwt(x, 'db2')
print(cA)
print(cD)
print(pywt.idwt(cA, cD, 'db2'))
w = pywt.Wavelet('sym3')
cA, cD = pywt.dwt(x, wavelet=w, mode='constant')
print(cA, cD)
print(pywt.Modes.modes)
print(pywt.idwt([1, 2, 0, 1], None, 'db3', 'symmetric'))
print(pywt.idwt([1, 2, 0, 1], [0, 0, 0, 0], 'db3', 'symmetric'))
def wavelet_packets():
X = [1, 2, 3, 4, 5, 6, 7, 8]
wp = pywt.WaveletPacket(data=X, wavelet='db3', mode='symmetric', maxlevel=3)
print(wp.data)
print(wp.level)
print(wp['ad'].maxlevel)
print(wp['a'].data)
print(wp['a'].path)
print(wp['aa'].data)
print(wp['ad'].data)
print(wp['aa'].path)
print(wp['ad'].path)
print(wp['aaa'].data)
print([node.path for node in wp.get_level(3, 'natural')])
print([node.path for node in wp.get_level(3, 'freq')])
X = [1, 2, 3, 4, 5, 6, 7, 8]
wp = pywt.WaveletPacket(data=X, wavelet='db1', mode='symmetric', maxlevel=3)
print(wp['ad'].data)
new_wp = pywt.WaveletPacket(data=None, wavelet='db1', mode='symmetric')
new_wp['a'] = wp['a']
new_wp['aa'] = wp['aa'].data
new_wp['ad'] = wp['ad'].data
new_wp['d'] =
wp['d']
print(new_wp.reconstruct(update=False))
print(new_wp)
print(new_wp.reconstruct(update=True))
print(new_wp)
print([node.path for node in new_wp.get_leaf_nodes(decompose=False)])
print([node.path for node in new_wp.get_leaf_nodes(decompose=True)])
dummy = wp.get_level(2)
for i in wp.get_leaf_nodes(False):
print(i.path, i.data)
node = wp['ad']
print(node)
del wp['ad']
for i in wp.get_leaf_nodes(False):
print(i.path, i.data)
print(wp.reconstruct())
wp['ad'].data = node.data
print(wp.reconstruct())
assert wp.a == wp["a"]
print(wp["a"])
if __name__ == '__main__':
dwt_and_idwt()
wavelet_packets()
import numpy as np
import pywt
import cv2
raw_img = cv2.imread("./len_std.jpg")
coeffs = pywt.dwt2(raw_img, 'haar')
cA, (cH, cV, cD) = coeffs
re_raw_img = pywt.idwt2(coeffs, 'haar')
cv2.imshow("re_raw_img", re_raw_img.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
import pywt
from PIL import Image
img = Image.open("len_std.jpg")
imgarr = np.array(img)
coeffs = pywt.dwt2(imgarr, 'haar')
re_img = pywt.idwt2(coeffs, 'haar')
import numpy as np
import pywt
import cv2
import matplotlib.pyplot as plt
def haar_img():
img_u8 = cv2.imread("len_std.jpg")
img_f32 = cv2.cvtColor(img_u8, cv2.COLOR_BGR2GRAY).astype(np.float32)
plt.figure('二维小波一级变换')
coeffs = pywt.dwt2(img_f32, 'haar')
cA, (cH, cV, cD) = coeffs
AH = np.concatenate([cA, cH], axis=1)
VD = np.concatenate([cV, cD], axis=1)
img = np.concatenate([AH, VD], axis=0)
return img
if __name__ == '__main__':
img = haar_img()
plt.imshow(img, 'gray')
plt.title('img')
plt.show()
左图为img,右图为三个高频+255后显示的图片。查看更多示例

import numpy as np
import pywt
from matplotlib import pyplot as plt
from pywt._doc_utils import wavedec2_keys, draw_2d_wp_basis
x = pywt.data.camera().astype(np.float32)
shape = x.shape
max_lev = 3
label_levels = 3
fig, axes = plt.subplots(2, 4, figsize=[14, 8])
for level in range(0, max_lev + 1):
if level == 0:
axes[0, 0].set_axis_off()
axes[1, 0].imshow(x, cmap=plt.cm.gray)
axes[1, 0].set_title('Image')
axes[1, 0].set_axis_off()
continue
c = pywt.wavedec2(x, 'db2', mode='periodization', level=level)
c[0] /= np.abs(c[0]).max()
for detail_level in range(level):
c[detail_level + 1] = [d / np.abs(d).max() for d in c[detail_level + 1]]
arr, slices = pywt.coeffs_to_array(c)
axes[1, level].imshow(arr, cmap=plt.cm.gray)
axes[1, level].set_title('Coefficients\n({} level)'.format(level))
axes[1, level].set_axis_off()
plt.tight_layout()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import pywt
import pywt.data
def test_pywt():
original = pywt.data.camera()
titles = ['Approximation', ' Horizontal detail', 'Vertical detail', 'Diagonal detail']
coeffs2 = pywt.dwt2(original, 'bior1.3')
LL, (LH, HL, HH) = coeffs2
plt.imshow(original)
plt.colorbar(shrink=0.8)
fig = plt.figure(figsize=(12, 3))
for i, a in enumerate([LL, LH, HL, HH]):
ax = fig.add_subplot(1, 4, i + 1)
ax.imshow(a, interpolation="nearest", cmap=plt.cm.gray)
ax.set_title(titles[i], fontsize=10)
ax.set_xticks([])
ax.set_yticks([])
fig.tight_layout()
plt.show()
if __name__ == '__main__':
test_pywt()
鸣谢:
一维离散小波变换:
https://www.jianshu.com/p/fbbc8573f7ed#
https://www.jianshu.com/p/56733f6c0a10
文章目录一、小波变换离散小波变换函数二、Haar 变换2.1 一维Haar变换2.2 二维离散小波变换三、代码演示简便安装:pip install PyWavelets 或者 conda install PyWavelets源码安装:下载源码tar zxvf PyWavelets-1.1.1.tar.gz PyWavelets-1.1.1cd PyWavelets-1.1.1sudo python3 setup.py buildsudo python3 setup.py install使用文
pip install PyWavelets (https://pywavelets.readthedocs.io/en/latest/install.html)
而不是VS2017中默认的pip install pywt,真是坑啊。
验证是否安装成功的例子:
>>> import pywt
>>> x = [
小波作为一种信号处理的工具在脑波分析中应用很多,常用的有连续小波变换、小波包分析等等。小波涉及的相关介绍和公式推导有很多资料,推荐下面几个连接,本文主要介绍连续小波变换,小波包分解重构,对应频段能量计算这3种应用在Python中的实现。
小波变换:
https://www.cnblogs.com/jfdwd/p/9249850.html
https://blog.csdn.net/weixin_42943114/article/details/89603208
https://my.oschina.
尺度函数 : scaling function (在一些文档中又称为父函数 father wavelet )
小波函数 : wavelet function(在一些文档中又称为母函数 mother wavelet)
连续的小波变换 :CWT
离散的小波变换 :DWT
小波变换的基本知识:
不同的小波基函数,是由同一个基本小波函数经缩放和平移生成的。
小波变换是将原始图像与小波基函数以及尺度函数进...
本文档的内容参考了pyWavelet 0.1.6的User Guide和ver. 0.2.0的网上例子,主要是把我目前所需要的内容进行了翻译和整理得到的。 主要包含了1D、2D的分解与重构方法,和稳态小波分解重构等内容。 小波包的部分没有翻译,日后有需要的话可能增加。
下载地址:http://www.pybytes.com/pywavelets