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;
}
Ejemplo n.º 2
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;
}