New documentation location
PyWavelets documentation has moved to pywavelets.readthedocs.io. You will be automatically redirected there in 10 seconds.

# 2D Forward and Inverse Discrete Wavelet Transform¶

## Single level `dwt2`¶

`pywt.``dwt2`(data, wavelet, mode='symmetric', axes=(-2, -1))

2D Discrete Wavelet Transform.

Parameters: data : ndarray 2D array with input data wavelet : Wavelet object or name string Wavelet to use mode : str, optional Signal extension mode, see Modes (default: ‘symmetric’) axes : 2-tuple of ints, optional Axes over which to compute the DWT. Repeated elements mean the DWT will be performed multiple times along these axes. (cA, (cH, cV, cD)) : tuple Approximation, horizontal detail, vertical detail and diagonal detail coefficients respectively. Horizontal refers to array axis 0.

Examples

```>>> import numpy as np
>>> import pywt
>>> data = np.ones((4,4), dtype=np.float64)
>>> coeffs = pywt.dwt2(data, 'haar')
>>> cA, (cH, cV, cD) = coeffs
>>> cA
array([[ 2.,  2.],
[ 2.,  2.]])
>>> cV
array([[ 0.,  0.],
[ 0.,  0.]])
```

The relation to the other common data layout where all the approximation and details coefficients are stored in one big 2D array is as follows:

```                            -------------------
|        |        |
| cA(LL) | cH(LH) |
|        |        |
(cA, (cH, cV, cD))  <--->   -------------------
|        |        |
| cV(HL) | cD(HH) |
|        |        |
-------------------
```

PyWavelets does not follow this pattern because of pure practical reasons of simple access to particular type of the output coefficients.

## Single level `idwt2`¶

`pywt.``idwt2`(coeffs, wavelet, mode='symmetric', axes=(-2, -1))

2-D Inverse Discrete Wavelet Transform.

Reconstructs data from coefficient arrays.

Parameters: coeffs : tuple (cA, (cH, cV, cD)) A tuple with approximation coefficients and three details coefficients 2D arrays like from dwt2() wavelet : Wavelet object or name string Wavelet to use mode : str, optional Signal extension mode, see Modes (default: ‘symmetric’) axes : 2-tuple of ints, optional Axes over which to compute the IDWT. Repeated elements mean the IDWT will be performed multiple times along these axes.

Examples

```>>> import numpy as np
>>> import pywt
>>> data = np.array([[1,2], [3,4]], dtype=np.float64)
>>> coeffs = pywt.dwt2(data, 'haar')
>>> pywt.idwt2(coeffs, 'haar')
array([[ 1.,  2.],
[ 3.,  4.]])
```

## 2D multilevel decomposition using `wavedec2`¶

`pywt.``wavedec2`(data, wavelet, mode='symmetric', level=None)

Multilevel 2D Discrete Wavelet Transform.

Parameters: data : ndarray 2D input data wavelet : Wavelet object or name string Wavelet to use mode : str, optional Signal extension mode, see Modes (default: ‘symmetric’) level : int, optional Decomposition level (must be >= 0). If level is None (default) then it will be calculated using the `dwt_max_level` function. [cAn, (cHn, cVn, cDn), ... (cH1, cV1, cD1)] : list Coefficients list

Examples

```>>> import pywt
>>> import numpy as np
>>> coeffs = pywt.wavedec2(np.ones((4,4)), 'db1')
>>> # Levels:
>>> len(coeffs)-1
2
>>> pywt.waverec2(coeffs, 'db1')
array([[ 1.,  1.,  1.,  1.],
[ 1.,  1.,  1.,  1.],
[ 1.,  1.,  1.,  1.],
[ 1.,  1.,  1.,  1.]])
```

## 2D multilevel reconstruction using `waverec2`¶

`pywt.``waverec2`(coeffs, wavelet, mode='symmetric')

Multilevel 2D Inverse Discrete Wavelet Transform.

coeffs
: list or tuple
Coefficients list [cAn, (cHn, cVn, cDn), ... (cH1, cV1, cD1)]
wavelet
: Wavelet object or name string
Wavelet to use
mode
: str, optional
Signal extension mode, see Modes (default: ‘symmetric’)
Returns: 2D array of reconstructed data.

Examples

```>>> import pywt
>>> import numpy as np
>>> coeffs = pywt.wavedec2(np.ones((4,4)), 'db1')
>>> # Levels:
>>> len(coeffs)-1
2
>>> pywt.waverec2(coeffs, 'db1')
array([[ 1.,  1.,  1.,  1.],
[ 1.,  1.,  1.,  1.],
[ 1.,  1.,  1.,  1.],
[ 1.,  1.,  1.,  1.]])
```