【小波变换】wavedecn方法

wavedecn

 wavedecn(data, wavelet, mode='symmetric', level=None, axes=None)
    Multilevel nD Discrete Wavelet Transform.

    Parameters
    ----------
    data : ndarray
        nD input data
    
    # 可通过设置axes参数,来确定小波变化的维度
    axes : sequence of ints, optional
        Axes over which to compute the DWT. Axes may not be repeated. The
        default is None, which means transform all axes
        (``axes = range(data.ndim)``).


    Returns
    -------
    [cAn, {details_level_n}, ... {details_level_1}] : list
        Coefficients list.  Coefficients are listed in descending order of
        decomposition level.  `cAn` are the approximation coefficients at
        level `n`.  Each `details_level_i` element is a dictionary
        containing detail coefficients at level `i` of the decomposition.  As
        a concrete example, a 3D decomposition would have the following set of
        keys in each `details_level_i` dictionary::

            {'aad', 'ada', 'daa', 'add', 'dad', 'dda', 'ddd'}

        where the order of the characters in each key map to the specified
        `axes`.
        # 字符顺序与axes的顺序一致
        # 若输入三维data,aad分别对应channel,height,width
        

2D_DWT

在这里插入图片描述

import numpy as np
import pywt

input = np.ones((4, 4))
coeffs = pywt.wavedecn(input, wavelet='haar', level=2)

2D coefficient dictionary和 2D array之间的转换关系:
Handling DWT Coefficients

3D_DWT

三维图像经过一级小波变换可以得到八张子图。
在这里插入图片描述
在这里插入图片描述


import cv2
import numpy as np
import pywt

file = '1.jpg'
img = cv2.imread(file)
# img  (224,224,3)
img = cv2.resize(img, (224, 224))
# img  (3,224,224)
img = np.array([img[:, :, i] for i in range(3)])
coeffs = pywt.wavedecn(img, wavelet='haar', level=3)

print(coeffs[3]['aad'].shape)  # (2, 112, 112)
print(coeffs[2]['aad'].shape)  # (1, 56, 56)
print(coeffs[1]['aad'].shape)  # (1, 28, 28)

(1,H,W)的图像进行小波变换,{'daa', 'dad', 'dda', 'ddd'}结果都为0

input = np.arange(4).reshape((2, 2))
print(pywt.wavedecn(input, wavelet='haar', level=1))
# [array([[3.]]), {'ad': array([[-1.]]), 'da': array([[-2.]]), 'dd': array([[0.]])}]


input = np.arange(4).reshape((1, 2, 2))
print(pywt.wavedecn(input, wavelet='haar', level=1))
# [array([[[4.24264069]]]), 
# {'aad': array([[[-1.41421356]]]), 
# 'ada': array([[[-2.82842712]]]), 
# 'add': array([[[-2.22044605e-16]]]), 
# 'daa': array([[[0.]]]), 'dad': array([[[0.]]]), 
# 'dda': array([[[0.]]]), 'ddd': array([[[0.]]])}]

参考:Matlab Code for 3D DWT (3 Dimensonal Discrete Wavelet Transform

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值