Table of Contents

NAME

QccWAVWaveletAnalysis3DInt, QccWAVWaveletSynthesis3DInt - integer-valued separable wavelet analysis/synthesis of a 3DInt signal

SYNOPSIS

#include "libQccPack.h"

int QccWAVWaveletAnalysis3DInt(QccVolumeInt volume, int num_frames, int num_rows, int num_cols, int phase_frame, int phase_row, int phase_col, const QccWAVWavelet *wavelet);

int QccWAVWaveletSynthesis3DInt(QccVolumeInt volume, int num_frames, int num_rows, int num_cols, int phase_frame, int phase_row, int phase_col, const QccWAVWavelet *wavelet);

DESCRIPTION

QccWAVWaveletAnalysis3DInt() performs one level of an integer-valued separable 3D wavelet decomposition for a three-dimensional signal, volume, which is represented as a volume of num_frames frames, num_rows rows, and num_cols columns. Essentially, QccWAVWaveletAnalysis3DInt() calls QccWAVWaveletAnalysis2DInt(3) once for each frame of the volume, and then QccWAVWaveletAnalysis1DInt(3) for each vector in the temporal direction. phase_frame, phase_row, and phase_col indicate whether the frames, rows, and columns, respectively, of the image start with even- or odd-indexed samples. Usually, one assumes that the upper corner of the image cube is indexed as (0, 0, 0) - in this case, phase_frame, phase_row, and phase_col would all be QCCWAVWAVELET_PHASE_EVEN. In any event, phase_frame, phase_row, and phase_col are passed with each call to QccWAVWaveletAnalysis2DInt(3) and QccWAVWaveletAnalysis1DInt(3) as appropriate. The result of the separable decomposition is returned in volume. wavelet must indicate an integer-valued lifting scheme (see QccWAVLiftingSchemeInteger(3) ).

QccWAVWaveletSynthesis3DInt() performs one level of separable wavelet synthesis for a 3DInt signal. Subbands in volume are assumed to be organized as described above for the output of QccWAVWaveletAnalysis3DInt(). QccWAVWaveletSynthesis3DInt() calls QccWAVWaveletSynthesis1DInt(3) once for each vector in the temporal direction, then QccWAVWaveletSynthesis2DInt(3) for each frame. The result of the separable wavelet synthesis is returned in volume.

Note: In general, you will probably want to use QccWAVWaveletDyadicDWT3DInt(3) and QccWAVWaveletInverseDyadicDWT3DInt(3) , or QccWAVWaveletPacketDWT3DInt(3) and QccWAVWaveletInversePacketDWT3DInt(3) , for implementing a discrete wavelet transform and its inverse since these routines allow any number of scales, or levels, of decomposition to be performed.

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) , QccWAVWaveletAnalysis2DInt(3) , QccWAVWaveletSynthesis2DInt(3) , QccWAVWaveletDyadicDWT3DInt(3) , QccWAVWaveletInverseDyadicDWT3DInt(3) , QccWAVWaveletPacketDWT3DInt(3) , QccWAVWaveletInversePacketDWT3DInt(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.

B.-J. Kim, Z. Xiong, and W. A. Pearlman, "Low Bit-Rate Scalable Video Coding with 3-D Set Partitioning in Hierarchical Trees (3-D SPIHT)," IEEE Transactions on Circuits and Systems for Video Technology, vol. 10, no. 8, pp. 1374-1387, December 2000.

AUTHOR

Copyright (C) 1997-2021 James E. Fowler


Table of Contents



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