**Name**

**iowave2** Reconstructs an image from an orthogonal wavelet transform

**Command Synopsis**

**iowave2** [-r *NLevel*] [-h *HaarNLevel*] [-e *EdgeMode*] [-p *PrecondMode*] [-i] [-n *FilterNorm*] *WavTrans* *RecompImage* *ImpulseResponse* [*EdgeIR* ]

-rNLevel: Start reconstruction from level NLevel (default 0)

-hHaarNLevel: Start reconstruction with Haar filter from level HaarNLevel down to level NLevel + 1

-eEdgeMode: Edge processing mode (0/1/2/3, default 3)

-pPrecondMode: Edge preconditionning mode (0/1/2, default 0)

-i : Invertible transform

-nFilterNorm: Filter taps normalization (0/1/2, default 2)

WavTrans: Input wavelet transform (wtrans2d)

RecompImage: Output reconstructed image (fimage)

ImpulseResponse: Impulse response of inner filters (fsignal)

EdgeIR: Impulse reponses of edge and preconditionning filters (fimage)

**Function Summary**

void iowave2 (NumRec , Haar , Edge , Precond , Inverse , FilterNorm , Wtrans , Output , Ri , Edge_Ri )

int *NumRec ;

int *Haar ;

int *Edge ;

int *Precond ;

int *Inverse ;

int *FilterNorm ;

Wtrans2d Wtrans ;

Fimage Output ;

Fsignal Ri ;

Fimage Edge_Ri ;

**Description**

*iowave2* reconstructs an image from a sequence of sub-images forming
a wavelet decomposition, according to the pyramidal algorithm of
S. Mallat [Mal89].
The notations that are used here have been already defined in *owave1*
and *owave2* modules' documentation, so the reader is refered
there to see their signification.

*WavTrans* is the prefix name of a sequence of files containing
the coefficients of a wavelet decomposition
*D*^{1}_{1}, *D*^{1}_{2},..., *D*^{1}_{J}, *D*^{2}_{1},...*D*^{2}_{J}, *D*^{3}_{1},..., *D*^{3}_{J}, *A*_{J}.
*iowave2* computes *A*_{0}, i.e. the inverse wavelet transform
of *WavTrans*.

As for *owave2* this is a semi-separable and recursive transformation :
*A*_{j-1} is computed from *A*_{j} *D*^{1}_{j}, *D*^{2}_{j},
and *D*^{3}_{j}. One applies the one-dimensional inverse wavelet transform
to each pair of corresponding lines in *A*_{j} and *D*^{1}_{j} and in
*D*^{2}_{j}, and *D*^{3}_{j}. Then one applies the one-dimensional inverse
wavelet transform to each pair of corresponding columns in the two resulting
sub-images.

The edge processing methods are corresponding to those described for
*iowave1*.

The complexity of the algorithm is roughly the same as for *owave2*.

The name of the files containing the sub-signals
*D*^{1}_{1}, *D*^{1}_{2},..., *D*^{1}_{J}, *D*^{2}_{1},...*D*^{2}_{J}, *D*^{3}_{1},..., *D*^{3}_{J}, *A*_{J} must have the same prefix *WavTrans*,
and their syntax obeys the rules described in *owave2*.
The sample values of the reconstructed signal are stored in the file
*RecompImage*.

The coefficients *h*_{k} of the filter's impulse response are read
in the file *ImpulseResponse*. The coefficients of the filter's
impulse response for computing the edge coefficients are read in the file
*EdgeIR*.

- The -r option specifies that the reconstruction should start from level
*NLevel*. The default is the number of level in*WavTrans*. - The -h option specifies that the reconstruction should start from level
*HaarNLevel*up to level*NLevel + 1*with the Haar filter. - The -e option specifies the edge processing mode (see
*owave1*). - The -p option specifies the preconditionning mode (see
*iowave1*). - The -i option enables to have invertible transform. Since the transform is invertible when EdgeMode is equal to 1 or 3, this only makes sense when EdgeMode is equal to 0 or 2.
- The -n option specifies the normalisation mode of the filter impulse responses' coefficients. It should be selected according to the mode used for the decomposition in order to get exact reconstruction.

These options should be tuned in the same way as they were
for the decomposition (with the *owave2* module).

**See Also**

**Version 1.3**

Last Modification date : Thu Jan 31 15:11:14 2002

**Author**

Jean-Pierre D'Ales