nD Forward and Inverse Discrete Wavelet Transform

_multilevel Multilevel 1D and 2D Discrete Wavelet Transform and Inverse Discrete Wavelet Transform.

Single level - dwtn

pywt.dwtn(data, wavelet, mode='symmetric', axes=None)

Single-level n-dimensional Discrete Wavelet Transform.

Parameters:
data : array_like

n-dimensional array with input data.

wavelet : Wavelet object or name string, or tuple of wavelets

Wavelet to use. This can also be a tuple containing a wavelet to apply along each axis in axes.

mode : str or tuple of string, optional

Signal extension mode used in the decomposition, see Modes. This can also be a tuple of modes specifying the mode to use on each axis in axes.

axes : sequence of ints, optional

Axes over which to compute the DWT. Repeated elements mean the DWT will be performed multiple times along these axes. A value of None (the default) selects all axes.

Axes may be repeated, but information about the original size may be lost if it is not divisible by 2 ** nrepeats. The reconstruction will be larger, with additional values derived according to the mode parameter. pywt.wavedecn should be used for multilevel decomposition.

Returns:
coeffs : dict

Results are arranged in a dictionary, where key specifies the transform type on each dimension and value is a n-dimensional coefficients array.

For example, for a 2D case the result will look something like this:

{'aa': <coeffs>  # A(LL) - approx. on 1st dim, approx. on 2nd dim
 'ad': <coeffs>  # V(LH) - approx. on 1st dim, det. on 2nd dim
 'da': <coeffs>  # H(HL) - det. on 1st dim, approx. on 2nd dim
 'dd': <coeffs>  # D(HH) - det. on 1st dim, det. on 2nd dim
}

For user-specified axes, the order of the characters in the dictionary keys map to the specified axes.

Single level - idwtn

pywt.idwtn(coeffs, wavelet, mode='symmetric', axes=None)

Single-level n-dimensional Inverse Discrete Wavelet Transform.

Parameters:
coeffs: dict

Dictionary as in output of dwtn. Missing or None items will be treated as zeros.

wavelet : Wavelet object or name string, or tuple of wavelets

Wavelet to use. This can also be a tuple containing a wavelet to apply along each axis in axes.

mode : str or list of string, optional

Signal extension mode used in the decomposition, see Modes. This can also be a tuple of modes specifying the mode to use on each axis in axes.

axes : sequence of ints, optional

Axes over which to compute the IDWT. Repeated elements mean the IDWT will be performed multiple times along these axes. A value of None (the default) selects all axes.

For the most accurate reconstruction, the axes should be provided in the same order as they were provided to dwtn.

Returns:
data: ndarray

Original signal reconstructed from input data.

Multilevel decomposition - wavedecn

pywt.wavedecn(data, wavelet, mode='symmetric', level=None, axes=None)

Multilevel nD Discrete Wavelet Transform.

Parameters:
data : ndarray

nD input data

wavelet : Wavelet object or name string, or tuple of wavelets

Wavelet to use. This can also be a tuple containing a wavelet to apply along each axis in axes.

mode : str or tuple of str, optional

Signal extension mode, see Modes. This can also be a tuple containing a mode to apply along each axis in axes.

level : int, optional

Decomposition level (must be >= 0). If level is None (default) then it will be calculated using the dwt_max_level function.

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.

Examples

>>> import numpy as np
>>> from pywt import wavedecn, waverecn
>>> coeffs = wavedecn(np.ones((4, 4, 4)), 'db1')
>>> # Levels:
>>> len(coeffs)-1
2
>>> waverecn(coeffs, 'db1')  # doctest: +NORMALIZE_WHITESPACE
array([[[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],
       [[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],
       [[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],
       [[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]]])

Multilevel reconstruction - waverecn

pywt.waverecn(coeffs, wavelet, mode='symmetric', axes=None)

Multilevel nD Inverse Discrete Wavelet Transform.

coeffs : array_like
Coefficients list [cAn, {details_level_n}, … {details_level_1}]
wavelet : Wavelet object or name string, or tuple of wavelets
Wavelet to use. This can also be a tuple containing a wavelet to apply along each axis in axes.
mode : str or tuple of str, optional
Signal extension mode, see Modes. This can also be a tuple containing a mode to apply along each axis in axes.
axes : sequence of ints, optional
Axes over which to compute the IDWT. Axes may not be repeated.
Returns:
nD array of reconstructed data.

Notes

It may sometimes be desired to run waverecn with some sets of coefficients omitted. This can best be done by setting the corresponding arrays to zero arrays of matching shape and dtype. Explicitly removing list or dictionary entries or setting them to None is not supported.

Specifically, to ignore all detail coefficients at level 2, one could do:

coeffs[-2] = {k: np.zeros_like(v) for k, v in coeffs[-2].items()}

Examples

>>> import numpy as np
>>> from pywt import wavedecn, waverecn
>>> coeffs = wavedecn(np.ones((4, 4, 4)), 'db1')
>>> # Levels:
>>> len(coeffs)-1
2
>>> waverecn(coeffs, 'db1')  # doctest: +NORMALIZE_WHITESPACE
array([[[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],
       [[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],
       [[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],
       [[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]]])

Multilevel fully separable decomposition - fswavedecn

pywt.fswavedecn(data, wavelet, mode='symmetric', levels=None, axes=None)

Fully Separable Wavelet Decomposition.

This is a variant of the multilevel discrete wavelet transform where all levels of decomposition are performed along a single axis prior to moving onto the next axis. Unlike in wavedecn, the number of levels of decomposition are not required to be the same along each axis which can be a benefit for anisotropic data.

Parameters:
data: array_like

Input data

wavelet : Wavelet object or name string, or tuple of wavelets

Wavelet to use. This can also be a tuple containing a wavelet to apply along each axis in axes.

mode : str or tuple of str, optional

Signal extension mode, see Modes. This can also be a tuple containing a mode to apply along each axis in axes.

levels : int or sequence of ints, optional

Decomposition levels along each axis (must be >= 0). If an integer is provided, the same number of levels are used for all axes. If levels is None (default), dwt_max_level will be used to compute the maximum number of levels possible for each axis.

axes : sequence of ints, optional

Axes over which to compute the transform. Axes may not be repeated. The default is to transform along all axes.

Returns:
fswavedecn_result : FswavedecnResult object

Contains the wavelet coefficients, slice objects to allow obtaining the coefficients per detail or approximation level, and more. See FswavedecnResult for details.

See also

fswaverecn
inverse of fswavedecn

Notes

This transformation has been variously referred to as the (fully) separable wavelet transform (e.g. refs [1], [3]), the tensor-product wavelet ([2]) or the hyperbolic wavelet transform ([4]). It is well suited to data with anisotropic smoothness.

In [2] it was demonstrated that fully separable transform performs at least as well as the DWT for image compression. Computation time is a factor 2 larger than that for the DWT.

References

[1]PH Westerink. Subband Coding of Images. Ph.D. dissertation, Dept. Elect. Eng., Inf. Theory Group, Delft Univ. Technol., Delft, The Netherlands, 1989. (see Section 2.3) http://resolver.tudelft.nl/uuid:a4d195c3-1f89-4d66-913d-db9af0969509
[2](1, 2) CP Rosiene and TQ Nguyen. Tensor-product wavelet vs. Mallat decomposition: A comparative analysis, in Proc. IEEE Int. Symp. Circuits and Systems, Orlando, FL, Jun. 1999, pp. 431-434.
[3]V Velisavljevic, B Beferull-Lozano, M Vetterli and PL Dragotti. Directionlets: Anisotropic Multidirectional Representation With Separable Filtering. IEEE Transactions on Image Processing, Vol. 15, No. 7, July 2006.
[4]RA DeVore, SV Konyagin and VN Temlyakov. “Hyperbolic wavelet approximation,” Constr. Approx. 14 (1998), 1-26.

Examples

>>> from pywt import fswavedecn
>>> fs_result = fswavedecn(np.ones((32, 32)), 'sym2', levels=(1, 3))
>>> print(fs_result.detail_keys())
[(0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3)]
>>> approx_coeffs = fs_result.approx
>>> detail_1_2 = fs_result[(1, 2)]

Multilevel fully separable reconstruction - fswaverecn

pywt.fswaverecn(fswavedecn_result)

Fully Separable Inverse Wavelet Reconstruction.

Parameters:
fswavedecn_result : FswavedecnResult object

FswavedecnResult object from fswavedecn.

Returns:
reconstructed : ndarray

Array of reconstructed data.

See also

fswavedecn
inverse of fswaverecn

Notes

This transformation has been variously referred to as the (fully) separable wavelet transform (e.g. refs [1], [3]), the tensor-product wavelet ([2]) or the hyperbolic wavelet transform ([4]). It is well suited to data with anisotropic smoothness.

In [2] it was demonstrated that the fully separable transform performs at least as well as the DWT for image compression. Computation time is a factor 2 larger than that for the DWT.

References

[1]PH Westerink. Subband Coding of Images. Ph.D. dissertation, Dept. Elect. Eng., Inf. Theory Group, Delft Univ. Technol., Delft, The Netherlands, 1989. (see Section 2.3) http://resolver.tudelft.nl/uuid:a4d195c3-1f89-4d66-913d-db9af0969509
[2](1, 2) CP Rosiene and TQ Nguyen. Tensor-product wavelet vs. Mallat decomposition: A comparative analysis, in Proc. IEEE Int. Symp. Circuits and Systems, Orlando, FL, Jun. 1999, pp. 431-434.
[3]V Velisavljevic, B Beferull-Lozano, M Vetterli and PL Dragotti. Directionlets: Anisotropic Multidirectional Representation With Separable Filtering. IEEE Transactions on Image Processing, Vol. 15, No. 7, July 2006.
[4]RA DeVore, SV Konyagin and VN Temlyakov. “Hyperbolic wavelet approximation,” Constr. Approx. 14 (1998), 1-26.

Multilevel fully separable reconstruction coeffs - FswavedecnResult

class pywt.FswavedecnResult(coeffs, coeff_slices, wavelets, mode_enums, axes)

Object representing fully separable wavelet transform coefficients.

Parameters:
coeffs : ndarray

The coefficient array.

coeff_slices : list

List of slices corresponding to each detail or approximation coefficient array.

wavelets : list of pywt.DiscreteWavelet objects

The wavelets used. Will be a list with length equal to len(axes).

mode_enums : list of int

The border modes used. Will be a list with length equal to len(axes).

axes : tuple of int

The set of axes over which the transform was performed.

Attributes:
approx

ndarray: The approximation coefficients.

axes

List of str: The axes the transform was performed along.

coeff_slices

List: List of coefficient slices.

coeffs

ndarray: All coefficients stacked into a single array.

levels

List of int: Levels of decomposition along each transformed axis.

modes

List of str: The border mode used along each transformed axis.

ndim

int: Number of data dimensions.

ndim_transform

int: Number of axes transformed.

wavelet_names

List of pywt.DiscreteWavelet: wavelet for each transformed axis.

wavelets

List of pywt.DiscreteWavelet: wavelet for each transformed axis.

Methods

detail_keys(self) Return a list of all detail coefficient keys.