int main () { it_wavelet_t *wavelet; it_wavelet2D_t *wavelet2D; it_separable2D_t *separable; const char *image_in = "../data/test.pgm"; const char *image_out = "out.pgm"; const char *sound_in = "../data/test.wav"; const char *sound_out = "out.wav"; char pnm_type, comments[1000]; int width, height, maxval; int levels; int length, channels, srate, depth; mat m, mt; vec v, vt; levels = 4; /* Read the sound */ if (!wav_info (sound_in, &channels, &srate, &depth, &length)) { fprintf (stderr, "unable to open file %s\n", sound_in); return (1); } printf ("file name = %s\nchannels = %d\nsampling rate = %d\ndepth = %d\nlength = %d samples/channel\n", sound_in, channels, srate, depth, length); m = mat_wav_read (sound_in); v = m[0]; /* consider only the first channel */ /* Transform the sound */ vt = it_dwt (v, it_wavelet_lifting_53, levels); vec_delete (v); /* Write down the coefficients */ v = vec_new_eval (vt, rescale_sound, NULL); m[0] = v; mat_wav_write ("wavelet.wav", m, srate, depth); vec_delete (v); /* Reconstruct the sound */ v = it_idwt (vt, it_wavelet_lifting_53, levels); vec_delete (vt); m[0] = v; mat_wav_write (sound_out, m, srate, depth); mat_delete (m); /* Test the separable transform */ /* Warning: note that for the wavelet with more than 1 level of */ /* decomposition, the transform obtained by applying the wavelet */ /* on the rows, then on the columns of the image is *not* what is */ /* usually called the separable wavelet. See this example: */ /* separable(wavelet1D) wavelet2D */ /* */ /* +------+------+------+ +------+------+------+ */ /* | L1L1 | L1H1 | L1H0 | | L1L1 | LH1 | | */ /* +------+------+------+ +------+------+ LH0 | */ /* | H1L1 | H1H1 | H1H0 | | HL1 | HH1 | | */ /* +------+------+------+ +------+------+------+ */ /* | | | | | | | */ /* | H0L1 | H0H1 | H0H0 | | HL0 | HH0 | */ /* +------+------+------+ +-------------+------+ */ m = mat_pgm_read (image_in); printf ("PGM %dx%d\n", mat_height (m), mat_width (m)); levels = 1; /* create a 1D wavelet object */ wavelet = it_wavelet_new (it_wavelet_lifting_97, levels); /* create a separable transform out of the wavelet */ separable = it_separable2D_new (wavelet); /* Transform the image */ mt = (mat) it_transform2D (separable, m); mat_delete (m); /* Write down the coefficients (shifted & saturated) */ m = mat_new_eval (mt, rescale_image, NULL); mat_pgm_write ("wavelet_separable.pgm", m); mat_delete (m); /* Reconstruct the image */ m = (mat) it_itransform2D (separable, mt); mat_delete (mt); it_delete (separable); it_delete (wavelet); mat_pgm_write ("separable.pgm", m); mat_delete (m); /* Read the image */ pnm_info (image_in, &pnm_type, &width, &height, &maxval, comments, 1000); printf ("file name = %s\npnm type = %c\n%dx%d -> maxval=%d\ncomments=%s\n", image_in, pnm_type, width, height, maxval, ""); m = mat_pgm_read (image_in); printf ("height(m) = %d\tmaxheight(m) = %d\nwidth(m) = %d\tmaxwidth(m) = %d\n", mat_height (m), mat_height_max (m), mat_width (m), mat_width_max (m)); levels = 5; /* create a 2D wavelet object */ wavelet2D = it_wavelet2D_new (it_wavelet_lifting_97, levels); /* Transform the image */ mt = it_wavelet2D_transform (wavelet2D, m); mat_delete (m); /* Write down the coefficients (shifted & saturated) */ m = mat_new_eval (mt, rescale_image, NULL); mat_pgm_write ("wavelet.pgm", m); mat_delete (m); /* Reconstruct the image */ m = it_wavelet2D_itransform (wavelet2D, mt); mat_delete (mt); it_delete (wavelet2D); mat_pgm_write (image_out, m); mat_delete (m); return 0; }
int main(){ tree_t * tree = init_tree(100); iterator_t* it = it_init(NULL); it = it_init(tree); it_left(it); it_right(it); it_current(NULL); it_up(NULL); it_right(NULL); it_left(NULL); insert_item(NULL, 0, it, RIGHT); insert_item(tree, 200, it, 10); insert_item(tree, 30, it, LEFT); insert_item(tree, 40, it, RIGHT); insert_item(tree, 20, it, LEFT); it_right(it); it_left(it); insert_item(tree, 100500, it, RIGHT); insert_item(tree, 10, it, RIGHT); insert_item(tree, 25, it, LEFT); it_right(it); dump_tree(NULL); dump_tree(tree); foreach_t* iter = foreach_init(NULL); for (iter = foreach_init(tree); !foreach_isEnd(iter); foreach_next(iter)){ //printf("%i/%i:%i\n",iter->i, iter->nnodes, foreach_current(iter)); printf("%i\n",foreach_current(iter)); } printf("\n"); foreach_delete(iter); delete_item(tree, NULL); printf("current = %i\n", it_current(it)); it_up(it); it_left(it); printf("current = %i\n", it_current(it)); dump_tree(tree); delete_item(tree, it); printf("current = %i\n", it_current(it)); dump_tree(tree); it_right(it); delete_item(tree, it); dump_tree(tree); for (iter = foreach_init(tree); !foreach_isEnd(iter); foreach_next(iter)){ //printf("%i/%i:%i\n",iter->i, iter->nnodes, foreach_current(iter)); printf("%i\n",foreach_current(iter)); } printf("\n"); delete_tree(NULL); delete_tree(tree); it_delete(it); it_delete(NULL); foreach_delete(NULL); foreach_delete(iter); return 0; }