⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavelet.hh

📁 本程序是用c语言实现的小波变换
💻 HH
字号:
/*---------------------------------------------------------------------------*/// Baseline Wavelet Transform Coder Construction Kit//// Geoff Davis// gdavis@cs.dartmouth.edu// http://www.cs.dartmouth.edu/~gdavis//// Copyright 1996 Geoff Davis 9/11/96//// Permission is granted to use this software for research purposes as// long as this notice stays attached to this software.///*---------------------------------------------------------------------------*/#ifndef _WAVELET_#define _WAVELET_#include "global.hh"/*---------------------------------------------------------------------------*/class Filter {public:  int size, firstIndex, center;  Real *coeff;  Filter () {coeff = NULL; size = 0; firstIndex = 0;};  Filter (int size, int firstIndex = 0, Real *coeff = NULL)            { init (size, firstIndex, coeff); };  Filter (const Filter &filter) {coeff=NULL; copy(filter);};  ~Filter ();    void init (int size, int firstIndex, Real *coeff);  Filter& operator= (const Filter &filter) {copy(filter); return *this;};  Real& operator[] (int index) {return coeff[index-firstIndex];};protected:  void copy (const Filter &filter);};/*---------------------------------------------------------------------------*/class FilterSet {public:  FilterSet () {symmetric = FALSE; analysisLow = analysisHigh =		synthesisLow = synthesisHigh = NULL;};  FilterSet (int symmetric, 	     Real *anLow, int anLowSize, int anLowFirst,  	     Real *synLow = NULL, int synLowSize = 0, int	     synLowFirst = 0);  FilterSet (const FilterSet &filterset);  ~FilterSet ();  void init (int symmetric, 	     Real *anLow, int anLowSize, int anLowFirst, 	     Real *synLow, int synLowSize, int synLowFirst);  FilterSet& operator= (const FilterSet filterset);  int symmetric;  Filter *analysisLow, *analysisHigh, *synthesisLow,    *synthesisHigh;protected:  void copy (const FilterSet& filterset);};/*---------------------------------------------------------------------------*//*---------------------------------------------------------------------------*/class Wavelet {public:  Wavelet (FilterSet *filterset);  ~Wavelet ();    void transform1d (Real *input, Real *output, int size,		     int nsteps, int sym_ext = -1);  void invert1d (Real *input, Real *output, int size,		  int nsteps, int sym_ext = -1);    void transform2d (Real *input, Real *output, int hsize, int vsize,		     int nsteps, int sym_ext = -1);  void invert2d (Real *input, Real *output, int hsize, int vsize, 		  int nsteps, int sym_ext = -1);  Filter *analysisLow, *analysisHigh;    // H and G  Filter *synthesisLow, *synthesisHigh;  // H~ and G~  int symmetric;  // TRUE if filter set is symmetric  void symmetric_extension (Real *output, int size, int left_ext, int			    right_ext, int symmetry);  void periodic_extension (Real *output, int size);  int npad;   protected:  void transform_step (Real *input, Real *output, int size, int sym_ext);  void invert_step (Real *input, Real *output, int size, int sym_ext);  // copy length elements from p1 to p2  void copy (const Real *p1, Real *p2, const int length)  {int temp = length; while(temp--) *p2++ = *p1++;}  void copy (const Real *p1, const int stride1, Real *p2, 	     const int length)  {int temp = length; while(temp--) {*p2++ = *p1; p1 += stride1;}}  void copy (const Real *p1, Real *p2, const int stride2,	     const int length)  {int temp = length; while(temp--) {*p2 = *p1++; p2 += stride2;}}};/*---------------------------------------------------------------------------*///enum { SPLINE, HAAR, ADELSON, DAUB4, DAUB6, DAUB8 };//extern const Wavelet *(wavelets[]);//extern const char *(wavelet_name[]);extern FilterSet Haar, Daub4, Daub6, Daub8, Antonini, Villa, Adelson,  Brislawn, Brislawn2, Villa1, Villa2, Villa3, Villa4, Villa5, Villa6,   Odegard;/*---------------------------------------------------------------------------*/#endif/*---------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -