c09 Chapter Contents
c09 Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_imldwt_2d (c09edc)

## 1  Purpose

nag_imldwt_2d (c09edc) computes the inverse two-dimensional multi-level discrete wavelet transform (DWT). This function reconstructs data from (possibly filtered or otherwise manipulated) wavelet transform coefficients calculated by nag_mldwt_2d (c09ecc) from an original input matrix. The initialization function nag_wfilt_2d (c09abc) must be called first to set up the DWT options.

## 2  Specification

 #include #include
 void nag_imldwt_2d (Integer nwl, Integer lenc, const double c[], Integer m, Integer n, double b[], Integer ldb, const Integer icomm[], NagError *fail)

## 3  Description

nag_imldwt_2d (c09edc) performs the inverse operation of nag_mldwt_2d (c09ecc). That is, given a set of wavelet coefficients, computed by nag_mldwt_2d (c09ecc) using a DWT as set up by the initialization function nag_wfilt_2d (c09abc), on a real matrix, $A$, nag_imldwt_2d (c09edc) will reconstruct $A$. The reconstructed matrix is referred to as $B$ in the following since it will not be identical to $A$ when the DWT coefficients have been filtered or otherwise manipulated prior to reconstruction. If the original input matrix is level $0$, then it is possible to terminate reconstruction at a higher level by specifying fewer than the number of levels used in the call to nag_mldwt_2d (c09ecc). This results in a partial reconstruction.

None.

## 5  Arguments

1:     nwlIntegerInput
On entry: the number, ${n}_{l}$, of levels to be used in the inverse multi-level transform.
Constraint: $1\le {\mathbf{nwl}}\le {n}_{\mathrm{fwd}}$, where ${n}_{\mathrm{fwd}}$ is the value used in a preceding call to nag_mldwt_2d (c09ecc).
2:     lencIntegerInput
On entry: the dimension of the array c.
Constraint: ${\mathbf{lenc}}\ge {n}_{\mathrm{ct}}$, where ${n}_{\mathrm{ct}}$ is the total number of coefficients that correspond to a transform with ${n}_{\mathrm{fwd}}$ levels and is unchanged from the preceding call to nag_mldwt_2d (c09ecc).
3:     c[lenc]const doubleInput
On entry: the coefficients of a multi-level wavelet transform of the original matrix, $A$, which may have been filtered or otherwise manipulated.
Let $q\left(\mathit{i}\right)$ be the number of coefficients (of each type) at level $\mathit{i}$, for $\mathit{i}={n}_{\mathrm{fwd}},{n}_{\mathrm{fwd}}-1,\dots ,1$. Then, setting ${k}_{1}=q\left({n}_{\mathrm{fwd}}\right)$ and ${k}_{j+1}={k}_{j}+q\left({n}_{\mathrm{fwd}}-⌈j/3⌉+1\right)$, for $j=1,2,\dots ,3{n}_{\mathrm{fwd}}$, the coefficients are stored in c as follows:
${\mathbf{c}}\left[\mathit{i}-1\right]$, for $\mathit{i}=1,2,\dots ,{k}_{1}$
Contains the level ${n}_{\mathrm{fwd}}$ approximation coefficients, ${a}_{{n}_{\mathrm{fwd}}}$.
${\mathbf{c}}\left[\mathit{i}-1\right]$, for $\mathit{i}={k}_{j}+1,\dots ,{k}_{j+1}$
Contains the level ${n}_{\mathrm{fwd}}-⌈j/3⌉+1$ vertical, horizontal and diagonal coefficients. These are:
• vertical coefficients if ;
• horizontal coefficients if ;
• diagonal coefficients if ,
for $j=1,\dots ,3{n}_{\mathrm{fwd}}$.
4:     mIntegerInput
On entry: the number of elements, $m$, in the first dimension of the reconstructed matrix $B$. For a full reconstruction of ${n}_{\mathrm{fwd}}$ levels this is the same as parameter m in nag_mldwt_2d (c09ecc). For a partial reconstruction of ${n}_{l}<{n}_{\mathrm{fwd}}$ levels this will be equal to ${\mathbf{dwtlvm}}\left[{n}_{l}\right]$ as returned from nag_mldwt_2d (c09ecc).
5:     nIntegerInput
On entry: the number of elements, $n$, in the second dimension of the reconstructed matrix $B$. For a full reconstruction of ${n}_{\mathrm{fwd}}$ levels this is the same as parameter n in nag_mldwt_2d (c09ecc). For a partial reconstruction of ${n}_{l}<{n}_{\mathrm{fwd}}$ levels this will be equal to ${\mathbf{dwtlvn}}\left[{n}_{l}\right]$ as returned from nag_mldwt_2d (c09ecc).
6:     b[${\mathbf{ldb}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix $B$ is stored in ${\mathbf{b}}\left[\left(j-1\right)×{\mathbf{ldb}}+i-1\right]$.
On exit: the $m$ by $n$ reconstructed matrix, $B$, based on the input multi-level wavelet transform coefficients and the transform options supplied to the initialization function nag_wfilt_2d (c09abc).
7:     ldbIntegerInput
On entry: the stride separating matrix row elements in the array b.
Constraint: ${\mathbf{ldb}}\ge {\mathbf{m}}$.
8:     icomm[$180$]const IntegerCommunication Array
On entry: contains details of the discrete wavelet transform and the problem dimension as setup in the call to the initialization function nag_wfilt_2d (c09abc).
9:     failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
NE_INITIALIZATION
Either the initialization function has not been called first or icomm has been corrupted.
Either the initialization function was called with ${\mathbf{wtrans}}=\mathrm{Nag_SingleLevel}$ or icomm has been corrupted.
NE_INT
On entry, ${\mathbf{lenc}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{lenc}}\ge 〈\mathit{\text{value}}〉$, the total number of coefficients generated by the preceding call to nag_mldwt_2d (c09ecc).
On entry, ${\mathbf{m}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{m}}\ge 〈\mathit{\text{value}}〉$, the number of coefficients in the first dimension at the required level of reconstruction.
On entry, ${\mathbf{n}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{n}}\ge 〈\mathit{\text{value}}〉$, the number of coefficients in the second dimension at the required level of reconstruction.
On entry, ${\mathbf{nwl}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{nwl}}\ge 1$.
NE_INT_2
On entry, ${\mathbf{ldb}}=〈\mathit{\text{value}}〉$ and ${\mathbf{m}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{ldb}}\ge {\mathbf{m}}$.
On entry, ${\mathbf{nwl}}=〈\mathit{\text{value}}〉$ and ${n}_{\mathrm{fwd}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{nwl}}\le {n}_{\mathrm{fwd}}$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.

## 7  Accuracy

The accuracy of the wavelet transform depends only on the floating point operations used in the convolution and downsampling and should thus be close to machine precision.