📄 spihtwav.h
字号:
#ifndef SPIHTWAV_H
#define SPIHTWAV_H
#include "spiht.h"
#include "spihtsq.h"
/* filter_bank.c */
#define QCCWAVFILTERBANK_MAGICNUM "FBK"
#define QCCWAVFILTERBANK_ORTHOGONAL 0
#define QCCWAVFILTERBANK_BIORTHOGONAL 1
#define QCCWAVFILTERBANK_GENERAL 2
#define QCCWAVFILTERBANK_PHASE_EVEN 0
#define QCCWAVFILTERBANK_PHASE_ODD 1
typedef struct
{
QccString filename;
QccString magic_num;
int major_version;
int minor_version;
int orthogonality;
QccFilter lowpass_analysis_filter;
QccFilter highpass_analysis_filter;
QccFilter lowpass_synthesis_filter;
QccFilter highpass_synthesis_filter;
} QccWAVFilterBank;
int QccWAVFilterBankInitialize(QccWAVFilterBank *filter_bank);
int QccWAVFilterBankAlloc(QccWAVFilterBank *filter_bank);
void QccWAVFilterBankFree(QccWAVFilterBank *filter_bank);
int QccWAVFilterBankMakeOrthogonal(QccWAVFilterBank *filter_bank,
const QccFilter *primary_filter);
int QccWAVFilterBankMakeBiorthogonal(QccWAVFilterBank *filter_bank,
const QccFilter *primary_filter,
const QccFilter *dual_filter);
int QccWAVFilterBankRead(QccWAVFilterBank *filter_bank);
int QccWAVFilterBankAnalysis(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int phase,
const QccWAVFilterBank *filter_bank,
int boundary_extension);
int QccWAVFilterBankSynthesis(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int phase,
const QccWAVFilterBank *filter_bank,
int boundary_extension);
/* lazy_wavelet.c */
int QccWAVWaveletLWT(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int signal_origin,
int subsample_pattern);
int QccWAVWaveletInverseLWT(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int signal_origin,
int subsample_pattern);
/* lifting.c */
#define QCCWAVLIFTINGSCHEME_MAGICNUM "LFT"
#define QCCWAVLIFTINGSCHEME_LWT 0
#define QCCWAVLIFTINGSCHEME_Daubechies4 1
#define QCCWAVLIFTINGSCHEME_CohenDaubechiesFeauveau9_7 2
#define QCCWAVLIFTINGSCHEME_CohenDaubechiesFeauveau5_3 3
typedef struct
{
QccString filename;
QccString magic_num;
int major_version;
int minor_version;
int scheme;
} QccWAVLiftingScheme;
int QccWAVLiftingSchemeInitialize(QccWAVLiftingScheme *lifting_scheme);
int QccWAVLiftingSchemeRead(QccWAVLiftingScheme *lifting_scheme);
int QccWAVLiftingAnalysis(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int phase,
const QccWAVLiftingScheme *lifting_scheme,
int boundary);
int QccWAVLiftingSynthesis(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int phase,
const QccWAVLiftingScheme *lifting_scheme,
int boundary);
/* lifting_daubechies4.c */
int QccWAVLiftingAnalysisDaubechies4(QccVector signal,
int signal_length,
int phase,
int boundary);
int QccWAVLiftingSynthesisDaubechies4(QccVector signal,
int signal_length,
int phase,
int boundary);
/* lifting_cdf9_7.c */
int QccWAVLiftingAnalysisCohenDaubechiesFeauveau9_7(QccVector signal,
int signal_length,
int phase,
int boundary);
int QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7(QccVector signal,
int signal_length,
int phase,
int boundary);
/* lifting_cdf5_3.c */
int QccWAVLiftingAnalysisCohenDaubechiesFeauveau5_3(QccVector signal,
int signal_length,
int phase,
int boundary);
int QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3(QccVector signal,
int signal_length,
int phase,
int boundary);
/* wavelet.c */
#define QCCWAVWAVELET_PATH_ENV "QCCPACK_WAVELET_PATH"
#define QCCPACK_WAVELET_PATH_DEFAULT "QCCPACK_WAVELET_PATH_DEFAULT"
#define QCCWAVWAVELET_DEFAULT_WAVELET "CohenDaubechiesFeauveau.9-7.lft"
#define QCCWAVWAVELET_IMPLEMENTATION_FILTERBANK 0
#define QCCWAVWAVELET_IMPLEMENTATION_LIFTED 1
#define QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION \
QCCFILTER_SYMMETRIC_EXTENSION
#define QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION QCCFILTER_PERIODIC_EXTENSION
#define QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET \
(QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION + 1)
#define QCCWAVWAVELET_PHASE_EVEN QCCWAVFILTERBANK_PHASE_EVEN
#define QCCWAVWAVELET_PHASE_ODD QCCWAVFILTERBANK_PHASE_ODD
typedef struct
{
int implementation;
int boundary;
QccWAVLiftingScheme lifting_scheme;
QccWAVFilterBank filter_bank;
} QccWAVWavelet;
int QccWAVInit();
int QccWAVWaveletInitialize(QccWAVWavelet *wavelet);
void QccWAVWaveletFree(QccWAVWavelet *wavelet);
int QccWAVWaveletCreate(QccWAVWavelet *wavelet,
const QccString wavelet_filename,
const QccString boundary);
int QccWAVWaveletAnalysis1D(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int phase,
const QccWAVWavelet *wavelet);
int QccWAVWaveletSynthesis1D(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int phase,
const QccWAVWavelet *wavelet);
int QccWAVWaveletAnalysis2D(const QccMatrix input_matrix,
QccMatrix output_matrix,
int num_rows,
int num_cols,
int phase_row,
int phase_col,
const QccWAVWavelet *wavelet);
int QccWAVWaveletSynthesis2D(const QccMatrix input_matrix,
QccMatrix output_matrix,
int num_rows,
int num_cols,
int phase_row,
int phase_col,
const QccWAVWavelet *wavelet);
/* dwt.c */
int QccWAVWaveletDWTSubbandLength(int original_length, int level,
int highband, int signal_origin,
int subsample_pattern);
int QccWAVWaveletDWT1D(const QccVector input_signal,
QccVector output_signal,
int signal_length,
int signal_origin,
int subsample_pattern,
int num_scales,
const QccWAVWavelet *wavelet);
int QccWAVWaveletDWT2D(const QccMatrix input_matrix,
QccMatrix output_matrix,
int num_rows,
int num_cols,
int origin_row,
int origin_col,
int subsample_pattern_row,
int subsample_pattern_col,
int num_scales,
const QccWAVWavelet *wavelet);
int QccWAVWaveletInverseDWT2D(const QccMatrix input_matrix,
QccMatrix output_matrix,
int num_rows,
int num_cols,
int origin_row,
int origin_col,
int subsample_pattern_row,
int subsample_pattern_col,
int num_scales,
const QccWAVWavelet *wavelet);
/* sadwt.c */
int QccWAVWaveletInverseShapeAdaptiveDWT2D(const QccMatrix input_data,
const QccMatrix input_mask,
QccMatrix output_data,
QccMatrix output_mask,
int num_rows,
int num_cols,
int num_scales,
const QccWAVWavelet *wavelet);
/* subband_pyramid.c */
#define QCCWAVSUBBANDPYRAMID_MAGICNUM "SBP"
typedef struct
{
QccString filename;
QccString magic_num;
int major_version;
int minor_version;
int num_levels;
int num_rows;
int num_cols;
int origin_row;
int origin_col;
int subsample_pattern_row;
int subsample_pattern_col;
QccMatrix matrix;
} QccWAVSubbandPyramid;
int QccWAVSubbandPyramidInitialize(QccWAVSubbandPyramid *subband_pyramid);
int QccWAVSubbandPyramidAlloc(QccWAVSubbandPyramid *subband_pyramid);
void QccWAVSubbandPyramidFree(QccWAVSubbandPyramid *subband_pyramid);
int QccWAVSubbandPyramidNumLevelsToNumSubbands(int num_levels);
int QccWAVSubbandPyramidCalcLevelFromSubband(int subband, int num_levels);
int QccWAVSubbandPyramidSubbandSize(const QccWAVSubbandPyramid
*subband_pyramid,
int subband,
int *subband_num_rows,
int *subband_num_cols);
int QccWAVSubbandPyramidSubbandOffsets(const QccWAVSubbandPyramid
*subband_pyramid,
int subband,
int *row_offset,
int *col_offset);
int QccWAVSubbandPyramidAddMean(QccWAVSubbandPyramid *subband_pyramid,
double mean);
int QccWAVSubbandPyramidDWT(QccWAVSubbandPyramid *subband_pyramid,
int num_levels,
const QccWAVWavelet *wavelet);
int QccWAVSubbandPyramidInverseDWT(QccWAVSubbandPyramid *subband_pyramid,
const QccWAVWavelet *wavelet);
int QccWAVSubbandPyramidInverseShapeAdaptiveDWT(QccWAVSubbandPyramid
*subband_pyramid,
QccWAVSubbandPyramid *mask,
const QccWAVWavelet *wavelet);
/* perceptual_weights.c */
#define QCCWAVPERCEPTUALWEIGHTS_MAGICNUM "PCP"
typedef struct
{
QccString filename;
QccString magic_num;
int major_version;
int minor_version;
int num_subbands;
QccVector perceptual_weights;
} QccWAVPerceptualWeights;
int QccWAVPerceptualWeightsInitialize(QccWAVPerceptualWeights
*perceptual_weights);
int QccWAVPerceptualWeightsAlloc(QccWAVPerceptualWeights *perceptual_weights);
void QccWAVPerceptualWeightsFree(QccWAVPerceptualWeights *perceptual_weights);
int QccWAVPerceptualWeightsRead(QccWAVPerceptualWeights *perceptual_weights);
int QccWAVPerceptualWeightsRemove(QccWAVSubbandPyramid
*subband_pyramid,
const QccWAVPerceptualWeights
*perceptual_weights);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -