Python:小波,py小波的问题

2024-09-28 05:20:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

所以我似乎不能执行多级分解,除了使用db1(Haar小波)的。在

我知道在其他软件包中有各种各样的小波实现,但我不知道其中是否有任何一个提供了多维数据的鲁棒多尺度分解。我最好的选择是什么?在


Tags: 方法图像区域examplepage数组尺度db2
1条回答
网友
1楼 · 发布于 2024-09-28 05:20:38

问题是你的输入向量相对于小波的支持宽度很短。给定输入长度和滤波器长度的最大有效分解水平如下所示:

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

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

^{pr2}$

Haar小波的滤波器长度为2,最大深度为3。pywavelts提供了方便函数^{}来检查这一点。

通过将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.]

但这是毫无意义的:你只会得到杂散系数,因为在小波滤波器和信号之间不再有足够的重叠。

相关问题 更多 >

    热门问题