Table of Contents

NAME

QccWAVWaveletLWT3DInt, QccWAVWaveletInverseLWT3DInt - forward and inverse separable 3D integer-valued lazy wavelet transform

SYNOPSIS

#include "libQccPack.h"

int QccWAVWaveletLWT3DInt(const QccVolumeInt input_volume, QccVolumeInt output_volume, int num_frames, int num_rows, int num_cols, int origin_frame, int origin_row, int origin_col, int subsample_pattern_frame, int subsample_pattern_row, int subsample_pattern_col);
int QccWAVInverseWaveletLWT3DInt(const QccVolumeInt input_volume, QccVolumeInt output_volume, int num_frames, int num_rows, int num_cols, int origin_frame, int origin_row, int origin_col, int subsample_pattern_frame, int subsample_pattern_row, int subsample_pattern_col);

DESCRIPTION

QccWAVWaveletLWT3DInt() implements a separable lazy wavelet transform (LWT). Essentially, the input_volume is partitioned into eight subsets: the even-frame-even-row-even-column samples, the even-frame-even-row-odd-column samples, the even-frame-odd-row-even-column samples, the even-frame-odd-row-odd-column samples, the odd-frame-even-row-even-column samples, the odd-frame-even-row-odd-column samples, the odd-frame-odd-row-even-column samples, and the odd-frame-odd-row-odd-column samples. These eight subsets lie in the eight octants of output_volume.

origin_frame, origin_row, and origin_col give the frame, row, and column index numbers of the upper-corner sample of input_volume and are used to determine the phases of subsampling in each level of the signal decomposition. In most cases, input_volume starts at (0, 0, 0), so origin_frame, origin_row, and origin_col are all 0.

subsample_pattern_frame, subsample_pattern_row, and subsample_pattern_col may be either QCCWAVWAVELET_PHASE_EVEN or QCCWAVWAVELET_PHASE_ODD, indicating whether even- or odd-phase subsampling is desired along each frame, row, and column, respectively. In the usual case, even subsampling is normally used.

In the case that num_frames is even, all eight "subbands" of the LWT have the same number of frames. On the other hand, if num_frames is odd, four of the eight subbands will be one frame longer than the others. Which subbands will be longer will depend on whether origin_frame is odd or even. Likewise, num_rows and origin_rows, and num_cols and origin_col, determine if the subbands have the same number of rows and columns, respectively, and which ones are wider if not.

QccWAVWaveletLWT3DInt() is implemented as a separable decomposition using 1D LWTs via calls to QccWAVWaveletLWTInt() and 2D LWTs via calls to QccWAVWaveletLWT2DInt().

QccWAVWaveletInverseLWT3DInt() performs the opposite operation as QccWAVWaveletLWT3DInt(). That is, the subbands are extracted from input_volume and "interleaved" to produce output_volume.

For both of these routines, output_volume must be allocated to sufficient size before calling the routine.

RETURN VALUES

Both QccWAVWaveletLWT3DInt() and QccWAVWaveletInverseLWT3DInt() return 0 on success and 1 on error.

SEE ALSO

QccWAVWaveletLWTInt(3) , QccWAVWaveletInverseLWTInt(3) , QccWAVWaveletLWT2DInt(3) , QccWAVWaveletInverseLWT2DInt(3) , QccPackWAV(3) , QccPack(3)

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