我一直在尝试使用来自Python的Package 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整体,最大级别数,由功能给出:
给出。pywt.swt_max_level
是0。例如,此:
img = np.random.rand(4,4,6)
WT = swtn(img, 'coif1', level = 1, start_level = 0)
为我工作。
从"注意"可在pywt.swtn文档页面上找到
....要求沿变换轴的信号长度为2 **级别的倍数。如果不是这种情况,则用户应使用numpy.pad.
等函数达到适当的尺寸。
在您的情况下,第三轴的尺寸应为2的倍数。