单级未抽取小波在3D numpy数组错误中变换

时间:2017-03-07 13:26:04

标签: python numpy wavelet wavelet-transform pywavelets

我一直在尝试使用python包pywavelets中的函数swtn将一级非抽取小波变换应用于3D numpy排列,如下所示:

import numpy as np
from pywavelts import swtn

img = np.random.rand(4,4,5)
WT = swtn(img, 'coif1', level = 1, start_level = 0) 

出现错误:

Traceback (most recent call last):

  File "<ipython-input-60-1f6f4144a239>", line 1, in <module>
    pywt.swtn(img, 'coif1', level=1, start_level =0, axes=None)

  File "/usr/local/lib/python2.7/dist-packages/pywt/_swt.py", line 387, in swtn
    axis=axis)[0]

  File "pywt/_extensions/_swt.pyx", line 100, in pywt._extensions._swt.swt_axis (pywt/_extensions/_swt.c:6203)

  File "pywt/_extensions/_swt.pyx", line 116, in pywt._extensions._swt.swt_axis (pywt/_extensions/_swt.c:5035)

ValueError: start_level must be less than 0. 

然而,这对我来说没有意义,因为小波分解不允许小于0的起始电平值。有人可以看看并指出我缺少的东西吗?

2 个答案:

答案 0 :(得分:0)

我发生了同样的错误。这是由于你使用的数组的大小:因为它不能被2整除,最大级别数由函数给出:

pywt.swt_max_level

是0.例如,这个:

img = np.random.rand(4,4,6)
WT = swtn(img, 'coif1', level = 1, start_level = 0) 

适合我。

答案 1 :(得分:0)

来自 pywt.swtn documentation page 上的“备注”

<块引用>

.... 要求沿变换轴的信号长度是 2**level 的倍数。如果不是这种情况,用户应该使用诸如 numpy.pad 之类的函数填充到适当的大小。

在您的情况下,您的第三个轴的维度应该是 2 的倍数。