c09 Chapter Contents
c09 Chapter Introduction
NAG Library Manual

# NAG Library Function Documentnag_dwt_3d (c09fac)

## 1  Purpose

nag_dwt_3d (c09fac) computes the three-dimensional discrete wavelet transform (DWT) at a single level. The initialization function nag_wfilt_3d (c09acc) must be called first to set up the DWT options.

## 2  Specification

 #include #include
 void nag_dwt_3d (Integer m, Integer n, Integer fr, const double a[], Integer lda, Integer sda, Integer lenc, double c[], Integer icomm[], NagError *fail)

## 3  Description

nag_dwt_3d (c09fac) computes the three-dimensional DWT of some given three-dimensional input data, considered as a number of two-dimensional frames, at a single level. For a chosen wavelet filter pair, the output coefficients are obtained by applying convolution and downsampling by two to the input data, $A$, first over columns, next over rows and finally across frames. The three-dimensional approximation coefficients are produced by the low pass filter over columns, rows and frames. In addition there are 7 sets of three-dimensional detail coefficients, each corresponding to a different order of low pass and high pass filters (see the c09 Chapter Introduction). All coefficients are packed into a single array. To reduce distortion effects at the ends of the data array, several end extension methods are commonly used. Those provided are: periodic or circular convolution end extension, half-point symmetric end extension, whole-point symmetric end extension and zero end extension. The total number, ${n}_{\mathrm{ct}}$, of coefficients computed is returned by the initialization function nag_wfilt_3d (c09acc).

## 4  References

Daubechies I (1992) Ten Lectures on Wavelets SIAM, Philadelphia

## 5  Arguments

1:     mIntegerInput
On entry: the number of rows of each two-dimensional frame.
Constraint: this must be the same as the value m passed to the initialization function nag_wfilt_3d (c09acc).
2:     nIntegerInput
On entry: the number of columns of each two-dimensional frame.
Constraint: this must be the same as the value n passed to the initialization function nag_wfilt_3d (c09acc).
3:     frIntegerInput
On entry: the number of two-dimensional frames.
Constraint: this must be the same as the value fr passed to the initialization function nag_wfilt_3d (c09acc).
4:     a[$\mathit{dim}$]const doubleInput
Note: the dimension, dim, of the array a must be at least ${\mathbf{lda}}×{\mathbf{sda}}×{\mathbf{fr}}$.
On entry: the $m$ by $n$ by $\mathit{fr}$ three-dimensional input data $A$, where ${A}_{ijk}$ is stored in ${\mathbf{a}}\left[\left(k-1\right)×{\mathbf{lda}}×{\mathbf{sda}}+\left(j-1\right)×{\mathbf{lda}}+i-1\right]$.
5:     ldaIntegerInput
On entry: the stride separating row elements of each of the sets of frame coefficients in the three-dimensional data stored in a.
Constraint: ${\mathbf{lda}}\ge {\mathbf{m}}$.
6:     sdaIntegerInput
On entry: the stride separating corresponding coefficients of consecutive frames in the three-dimensional data stored in a.
Constraint: ${\mathbf{sda}}\ge {\mathbf{n}}$.
7:     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 wavelet coefficients, as returned by nag_wfilt_3d (c09acc).
8:     c[lenc]doubleOutput
On exit: the coefficients of the discrete wavelet transform. If you need to access or modify the approximation coefficients or any specific set of detail coefficients then the use of nag_wav_3d_coeff_ext (c09fyc) or nag_wav_3d_coeff_ins (c09fzc) is recommended. For completeness the following description provides details of precisely how the coefficients are stored in c but this information should only be required in rare cases.
The $8$ sets of coefficients are stored in the following order: approximation coefficients (LLL) first, followed by $7$ sets of detail coefficients: LLH, LHL, LHH, HLL, HLH, HHL, HHH, where L indicates the low pass filter, and H the high pass filter being applied to, respectively, the columns of length m, the rows of length n and then the frames of length fr. Note that for computational efficiency reasons each set of coefficients is stored in the order ${n}_{\mathrm{cfr}}×{n}_{\mathrm{cm}}×{n}_{\mathrm{cn}}$ (see output arguments nwcfrnwct and nwcn in nag_wfilt_3d (c09acc)). See Section 10 for details of how to access each set of coefficients in order to perform extraction from c following a call to this function, or insertion into c before a call to the three-dimensional inverse function nag_idwt_3d (c09fbc).
9:     icomm[$260$]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_3d (c09acc).
On exit: contains additional information on the computed transform.
10:   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 communication array icomm has been corrupted or there has not been a prior call to the initialization function nag_wfilt_3d (c09acc).
The initialization function was called with ${\mathbf{wtrans}}=\mathrm{Nag_MultiLevel}$.
NE_INT
On entry, ${\mathbf{fr}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{fr}}=⟨\mathit{\text{value}}⟩$, the value of fr on initialization (see nag_wfilt_3d (c09acc)).
On entry, ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$, the value of m on initialization (see nag_wfilt_3d (c09acc)).
On entry, ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$, the value of n on initialization (see nag_wfilt_3d (c09acc)).
NE_INT_2
On entry, ${\mathbf{lda}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{lda}}\ge {\mathbf{m}}$.
On entry, ${\mathbf{lenc}}=⟨\mathit{\text{value}}⟩$ and ${n}_{\mathrm{ct}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{lenc}}\ge {n}_{\mathrm{ct}}$, where ${n}_{\mathrm{ct}}$ is the number of DWT coefficients returned by nag_wfilt_3d (c09acc) in argument nwct.
On entry, ${\mathbf{sda}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{sda}}\ge {\mathbf{n}}$.
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.

## 8  Parallelism and Performance

nag_dwt_3d (c09fac) is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.

None.

## 10  Example

This example computes the three-dimensional discrete wavelet decomposition for $5×4×3$ input data using the Haar wavelet, ${\mathbf{wavnam}}=\mathrm{Nag_Haar}$, with half point end extension, prints the wavelet coefficients and then reconstructs the original data using nag_idwt_3d (c09fbc). This example also demonstrates in general how to access any set of coefficients following a single level transform.

### 10.1  Program Text

Program Text (c09face.c)

### 10.2  Program Data

Program Data (c09face.d)

### 10.3  Program Results

Program Results (c09face.r)