00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __it_wavelet2D_h
00026 #define __it_wavelet2D_h
00027
00028 #include <it/types.h>
00029 #include <it/mat.h>
00030 #include <it/wavelet.h>
00031 #include <it/transform2D.h>
00032
00033
00034
00035
00036
00037
00038 typedef struct _it_wavelet2D_ {
00039 it_extends (it_transform2D_t);
00040
00041 it_wavelet_lifting_t *lifting;
00042 int level;
00043 int levels;
00044 int width, height;
00045 vec buffer;
00046
00047 void (*it_overloaded (destructor)) (it_object_t * it_this);
00048
00049 int (*copy) (struct _it_wavelet2D_ * it_this,
00050 struct _it_wavelet2D_ * source);
00051
00052 } it_wavelet2D_t;
00053
00054 #define IT_WAVELET2D(x) IT_CAST(it_wavelet2D_t, x)
00055
00056 it_instanciate (it_wavelet2D_t);
00057
00058 static inline it_wavelet2D_t *it_wavelet2D_new (it_wavelet_lifting_t const
00059 *lifting, int level) {
00060 return (it_new_va (it_wavelet2D_t) (it_va, lifting, level));
00061 }
00062 #define it_wavelet2D_copy(a, b) a->copy(a, b)
00063
00064 #define it_wavelet2D_transform(t, m) ((mat) it_transform2D(IT_WAVELET2D(t), m))
00065 #define it_wavelet2D_itransform(t, m) ((mat) it_itransform2D(IT_WAVELET2D(t), m))
00066
00067 mat it_dwt2D (mat m, it_wavelet_lifting_t const *lifting, int levels);
00068 mat it_idwt2D (mat t, it_wavelet_lifting_t const *lifting, int levels);
00069
00070
00071
00072
00073 mat *it_wavelet2D_split (mat wav, int nb_levels);
00074 mat it_wavelet2D_merge (mat * subbands, int nb_level);
00075
00076
00077
00078 #endif