BRLCAD

This is a standard wavelet library that takes a given data buffer of some data type and then performs a wavelet transform on that data. More...
#include "common.h"
#include <stdio.h>
#include <string.h>
#include "vmath.h"
#include "bu/log.h"
#include "bu/malloc.h"
#include "bn/wavelet.h"
Go to the source code of this file.
Macros  
#define  decompose_1d(DATATYPE) bn_wlt_haar_1d_ ## DATATYPE ## _decompose 
#define  make_wlt_haar_1d_decompose(DATATYPE) 
#define  reconstruct(DATATYPE) bn_wlt_haar_1d_ ## DATATYPE ## _reconstruct 
#define  make_wlt_haar_1d_reconstruct(DATATYPE) 
#define  decompose_2d(DATATYPE) bn_wlt_haar_2d_ ## DATATYPE ## _decompose 
#define  make_wlt_haar_2d_decompose(DATATYPE) 
#define  reconstruct_2d(DATATYPE) bn_wlt_haar_2d_ ## DATATYPE ## _reconstruct 
#define  make_wlt_haar_2d_reconstruct(DATATYPE) 
#define  decompose_2d_2(DATATYPE) bn_wlt_haar_2d_ ## DATATYPE ## _decompose2 
#define  make_wlt_haar_2d_decompose2(DATATYPE) 
This is a standard wavelet library that takes a given data buffer of some data type and then performs a wavelet transform on that data.
The transform operations available are to either decompose or reconstruct a signal into its corresponding wavelet form based on the haar wavelet.
Wavelet decompose/reconstruct operations
 bn_wlt_haar_1d_double_decompose(tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_1d_float_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_1d_char_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_1d_short_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_1d_int_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_1d_long_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_1d_double_reconstruct(tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_1d_float_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_1d_char_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_1d_short_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_1d_int_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_1d_long_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_2d_double_decompose(tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_2d_float_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_2d_char_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_2d_short_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_2d_int_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_2d_long_decompose (tbuffer, buffer, dimen, channels, limit)  bn_wlt_haar_2d_double_reconstruct(tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_2d_float_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_2d_char_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_2d_short_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_2d_int_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_2d_long_reconstruct (tbuffer, buffer, dimen, channels, sub_sz, limit)  bn_wlt_haar_2d_double_decompose2(tbuffer, buffer, width, height, channels, limit)  bn_wlt_haar_2d_float_decompose2 (tbuffer, buffer, width, height, channels, limit)  bn_wlt_haar_2d_char_decompose2 (tbuffer, buffer, width, height, channels, limit)  bn_wlt_haar_2d_short_decompose2 (tbuffer, buffer, width, height, channels, limit)  bn_wlt_haar_2d_int_decompose2 (tbuffer, buffer, width, height, channels, limit)  bn_wlt_haar_2d_long_decompose2 (tbuffer, buffer, width, height, channels, limit)  bn_wlt_haar_2d_double_reconstruct2(tbuffer, buffer, width, height, channels, sub_sz, limit)  bn_wlt_haar_2d_float_reconstruct2 (tbuffer, buffer, width, height, channels, sub_sz, limit)  bn_wlt_haar_2d_char_reconstruct2 (tbuffer, buffer, width, height, channels, sub_sz, limit)  bn_wlt_haar_2d_short_reconstruct2 (tbuffer, buffer, width, height, channels, sub_sz, limit)  bn_wlt_haar_2d_int_reconstruct2 (tbuffer, buffer, width, height, channels, sub_sz, limit)  bn_wlt_haar_2d_long_reconstruct2 (tbuffer, buffer, width, height, channels, sub_sz, limit)
For greatest accuracy, it is preferable to convert everything to "double" and decompose/reconstruct with that. However, there are useful properties to performing the decomposition and/or reconstruction in various data types (most notably char).
Rather than define all of these routines explicitly, we define 2 macros "decompose" and "reconstruct" which embody the structure of the function (which is common to all of them). We then instantiate these macros once for each of the data types. It's ugly, but it assures that a change to the structure of one operation type (decompose or reconstruct) occurs for all data types.
bn_wlt_haar_1d_*_decompose(tbuffer, buffer, dimen, channels, limit)
Perform a Haar wavelet decomposition on the data in buffer "buffer". The decomposition is done "in place" on the data, hence the values in "buffer" are not preserved, but rather replaced by their decomposition. The number of original samples in the buffer (parameter "dimen") and the decomposition limit ("limit") must both be a power of 2 (e.g. 512, 1024). The buffer is decomposed into "average" and "detail" halves until the size of the "average" portion reaches "limit". Simultaneous decomposition of multiplane (e.g. pixel) data, can be performed by indicating the number of planes in the "channels" parameter.
(1) The process requires a temporary buffer which is 1/2 the size of the longest span to be decomposed. If the "tbuffer" argument is nonnull then it is a pointer to a temporary buffer. If the pointer is NULL, then a local temporary buffer will be allocated (and freed).
performs complete decomposition on the data in array "dbuffer".
This will completely decompose the data in buffer. The first sample will be the average of all the samples. Alternatively:
bn_wlt_haar_1d_double_decompose(tbuffer, buffer, 512, 3, 64);
decomposes buffer into a 64sample "average image" and 3 "detail" sets.
bn_wlt_haar_1d_*_reconstruct(tbuffer, buffer, dimen, channels, sub_sz, limit)
Definition in file wavelet.c.
#define decompose_1d  (  DATATYPE  )  bn_wlt_haar_1d_ ## DATATYPE ## _decompose 
#define reconstruct  (  DATATYPE  )  bn_wlt_haar_1d_ ## DATATYPE ## _reconstruct 
#define decompose_2d  (  DATATYPE  )  bn_wlt_haar_2d_ ## DATATYPE ## _decompose 
#define make_wlt_haar_2d_decompose  (  DATATYPE  ) 
#define reconstruct_2d  (  DATATYPE  )  bn_wlt_haar_2d_ ## DATATYPE ## _reconstruct 
#define make_wlt_haar_2d_reconstruct  (  DATATYPE  ) 
#define decompose_2d_2  (  DATATYPE  )  bn_wlt_haar_2d_ ## DATATYPE ## _decompose2 
#define make_wlt_haar_2d_decompose2  (  DATATYPE  ) 