Table of Contents

NAME

QccWAVWaveletDWT1DInt, QccWAVWaveletInverseDWT1DInt - integer-valued discrete wavelet transform and inverse transform for a 1D signal

SYNOPSIS

#include "libQccPack.h"

int QccWAVWaveletDWT1DInt(QccVectorInt signal, int signal_length, int signal_origin, int subsample_pattern, int num_scales, const QccWAVWavelet *wavelet);
int QccWAVWaveletInverseDWT1DInt(QccVectorInt signal, int signal_length, int signal_origin, int subsample_pattern, int num_scales, const QccWAVWavelet *wavelet);

DESCRIPTION

QccWAVWaveletDWT1DInt() performs an integer-valued discrete wavelet transform (DWT) of a one-dimensional signal. num_scales gives the number of scales, or levels, of the decomposition. QccWAVWaveletDWT1DInt() implements a dyadic decomposition of signal; that is, the lowpass subband is recursively decomposed into lowpass and highpass bands for each level of decomposition. The transform is critically sampled; that is, each subband produced in each decomposition level has roughly half as many samples as the lowpass band of the preceding level. The subbands output from the DWT are returned in signal, overwriting the original input signal. The output subbands are nested in signal starting with the lowpass subband of the lowest (coarsest) level of decomposition (i.e., the baseband) with subsequent highpass subbands of increasing resolution following.

Essentially, QccWAVWaveletDWT1DInt() calls QccWAVWaveletAnalysis1DInt(3) for each level of decomposition; QccWAVWaveletAnalysis1DInt(3) in turn calls QccWAVLiftingAnalysisInt(3) . signal_origin indicates the sample index at which signal starts. wavelet must indicate an integer-valued lifting scheme (see QccWAVLiftingSchemeInteger(3) ).

QccWAVWaveletInverseDWT1DInt() performs the inverse DWT of signal which is assumed to have been produced by QccWAVWaveletDWT1DInt(). num_scales gives the number of levels of decomposition that exist in signal. Essentially, QccWAVWaveletInverseDWT1DInt() calls QccWAVWaveletSynthesis1DInt(3) for each level of synthesis; QccWAVWaveletSynthesis1DInt(3) in turn calls QccWAVFilterBankSynthesisInt(3) . signal_origin indicates the sample index at which signal starts.

subsample_pattern indicates the even- or odd-phase subsampling to be used at each level of decomposition. In most applications, even subsampling at all levels is desired, in which case subsample_pattern should be set to zero. In more general settings, when some mixture of even- and odd-phase subsampling is desired, subsample_pattern can be an integer between 0 and 2^num_levels - 1. In this integer, the jth bit (where j = 1 is the least-significant bit) indicates whether the jth level of decomposition employs even or odd subsampling (0 = even, 1 = odd). For example, if subsample_pattern is 5, then the first and third decompositions use odd-phase subsampling, while all others use even subsampling.

INTEGER-TO-INTEGER WAVELET TRANSFORMS

Transforms generally provide perfect reconstruction in that the inverse transform will perfectly invert transform coefficients into an exact representation of the original signal. However, when implemented in floating-point arithmetic, the potential for loss arises due to the limits of finite precision in both the forward and inverse transforms. On the other hand, transforms that map integer-valued signals into integer-valued transforms coefficients can guarantee perfect reconstruction, provided an inverse transform can be found. For this reason, lifting schemes, in which inverse transforms are trivial, are favored for the implementation of integer-valued wavelet transforms. Typically, the general approach proposed by Calderbank et al. is followed wherein rounding of floating-point values to integers is performed at each prediction and update step in a lifting scheme. Integer versions of several popular biorthogonal wavelets were created in this manner by Calderbank et al., as well as by Xiong et al.

In traditional floating-point lifting, the prediction and update steps are generally followed by a single application of scaling by a constant in order to produce the usual unitary normalization. This scaling step is somewhat problematic for integer-valued lifting since the scaling constant is usually not an integer. In applications wherein unitary scaling is not required (e.g., in some applications that process each subband completely independently), the scaling step is simply dropped in order to implement an integer-valued version of the transform. Alternatively, one can append three additional lifting steps to implement the scaling; these additional lifting steps can then be rendered integer-valued via appropriate rounding (e.g., Xiong et al.) making the transforms approximately normalized. This latter approach of scaling via additional lifting steps is employed in the integer-valued lifting schemes implemented in QccPack.

RETURN VALUES

These routines return 0 on success and 1 on error.

SEE ALSO

QccWAVWaveletAnalysis1DInt(3) , QccWAVWaveletSynthesis1DInt(3) , QccWAVLiftingAnalysisInt(3) , QccWAVLiftingSynthesisInt(3) , QccWAVWavelet(3) , QccPackWAV(3) , QccPack(3)

A. R. Calderbank, I. Daubechies, W. Sweldens, B.-L. Yeo, "Lossless Image Compression Using Integer to Integer Wavelet Transforms", in Proceedings of the International Conference on Image Processing, Lausanne, Switzerland, pp. 596-599, September 1997.

Z. Xiong, X. Wu, S. Cheng, J. Hua, "Lossy-to-Lossless Compression of Medical Volumetric Data Using Three-Dimensional Integer Wavelet Transforms," IEEE Transactions on Medical Imaging, vol. 22, pp. 459-470, March 2003.

I. Daubechies and W. Sweldens, "Factoring Wavelet Transforms Into Lifting Steps," J. Fourier Anal. Appl., vol. 4, no. 3, pp. 245-267, 1998.

AUTHOR

Copyright (C) 1997-2021 James E. Fowler


Table of Contents



Get QccPack at SourceForge.net. Fast, secure and Free Open Source software downloads