【问题标题】:Python: wavelets, problems with PyWaveletsPython:小波,PyWavelets 的问题
【发布时间】:2015-05-10 14:17:40
【问题描述】:

我正在尝试对图像进行一些小波分析,我需要一些多尺度分解的方法。我正在试验 PyWavelets 包。但是,dwt2idwt2 方法仅提供单一比例。我可以迭代这些方法,并将单尺度分解应用于图像的较小区域;如果dwt2 的结果由 4 个数组组成:

---------
| A | B |
---------
| C | D |
---------

然后我可以将dwt2 应用于子数组A 等等。然而,这里的困难在于许多小波产生的数组比输入大。请注意,在PyWavelets example page 上使用的小波是db1。但是如果我们尝试db2:

>>> import pywt
>>> x = [3, 7, 1, 1, -2, 5, 4, 6]
>>> db2 = pywt.Wavelet('db2')
>>> X = pywt.wavedec(x, db2)
>>> print X[0]
[ 5.65685425  7.39923721  0.22414387  3.33677403  7.77817459]

>>> print X[1][0] 
-2.44948974278

>>> print X[1][1]
-1.60368225335

>>> print X[1][2]
-4.44140056379

所以我似乎无法使用db1(即 Haar 小波)执行多级分解除了

我知道其他包中有各种小波实现,但我不知道它们是否提供了对多维数据的稳健多尺度分解。我最好的选择是什么?

【问题讨论】:

    标签: python image-processing signal-processing wavelet pywavelets


    【解决方案1】:

    问题是您的输入向量相对于小波的支持宽度非常短。给定输入长度和过滤器长度的最大有用分解级别由下式给出:

    max_level = floor(log2(input_len / (filter_len - 1)))
    

    max_level 是至少一个小波系数仍然正确的最深层次。在您的情况下,信号长度为 8,小波分解滤波器长度(db2.dec_len)为 4,因此:

    max_level = floor(log2(8 / 3))
              = floor(~1.415)
    

    Haar 小波的滤波器长度为 2,最大深度为 3。PyWavelets 提供了方便的函数 pywt.dwt_max_level() 来检查这一点。

    您可以通过将level= 参数传递给pywt.wavedec() 来强制任意高的分解级别:

    X2 = pywt.wavedec(x, db2, level=10)
    
    print(X2)
    # [array([ 132.53206536,  133.27955261,  139.11658525]),
    #  array([-0.3417812 ,  1.65856932, -1.31678812]),
    #  array([-0.24371917,  1.27639144, -1.03267227]),
    #  array([-0.15012416,  0.98850433, -0.83838017]),
    #  array([-0.04137053,  0.77800706, -0.73663653]),
    #  array([ 0.11632636,  0.63709966, -0.75342601]),
    #  array([ 0.38650452,  0.57015757, -0.95666209]),
    #  array([ 0.89346983,  0.60133166, -1.49480149]),
    #  array([ 0.04651697, -5.29123125,  4.49828673]),
    #  array([-1.0669873 , -3.81458256,  1.97307621, -0.0669873 ]),
    #  array([-2.44948974, -1.60368225, -4.44140056, -0.41361256,  1.22474487])]
    
    print(pywt.waverec(X2, db2))
    # [ 3.  7.  1.  1. -2.  5.  4.  6.]
    

    不过,这毫无意义:您只会得到虚假系数,因为小波滤波器和信号之间不再有足够的重叠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 2020-07-28
      • 2016-03-07
      相关资源
      最近更新 更多