Exemplo n.º 1
0
Arquivo: prop.c Projeto: j0sh/thesis
IplImage* prop_match(IplImage *src, IplImage *dst)
{
    int *srcdata, *dstdata;
    CvSize src_size = cvGetSize(src), dst_size = cvGetSize(dst);
    int w1 = src_size.width - 8 + 1, h1 = src_size.height - 8 + 1;
    int sz = w1*h1, plane_coeffs[] = {2, 9, 5};
    int dim = plane_coeffs[0] + plane_coeffs[1] + plane_coeffs[2];
    kd_tree kdt;
    IplImage *matched;
    coeffs(src, dim, plane_coeffs, &srcdata);
    coeffs(dst, dim, plane_coeffs, &dstdata);
    memset(&kdt, 0, sizeof(kdt));
    kdt_new(&kdt, srcdata, sz, dim);
    matched  = match(&kdt, dstdata, src, dst_size);
    free(srcdata);
    free(dstdata);
    kdt_free(&kdt);
    return matched;
}
Exemplo n.º 2
0
int main (int argc, char * argv[])
{
  if (argc != 2) {
    fprintf (stderr, "Usage: %s basename\n", argv[0]);
    return -1;
  }

  Kdt * kdt = kdt_new ();
  if (kdt_open (kdt, argv[1])) {
    fprintf (stderr, "%s: could not open `%s'\n", argv[0], argv[1]);
    return -1;
  }

  KdtRect query;
  int count = 0;
  //  GTimer * t = g_timer_new ();
  while (scanf ("%f %f %f %f", 
		&query[0].l, &query[1].l, 
		&query[0].h, &query[1].h) == 4) {
#if 1
    fprintf (stderr, "%ld\n", kdt_query (kdt, query));
#else
    KdtSum s;
    kdt_sum_init (&s);
    //    g_timer_start (t);
    long n = kdt_query_sum (kdt, (KdtCheck) kdt_includes, (KdtCheck) kdt_intersects, 
			    query, query, &s);
    //    g_timer_stop (t);
    //    fprintf (stderr, "%d %g %g %g %g\n", n, s.H0, s.Hmax, s.Hmin, g_timer_elapsed (t, NULL));
    printf ("%ld %g %g %g\n", n, s.H0, s.H1, s.H2);
#endif
    if (count > 0 && count % 1000 == 0)
      fprintf (stderr, "\r%d", count);
    count++;
  }
  if (count >= 1000)
    fputc ('\n', stderr);

  kdt_destroy (kdt);
  return 0;
}
Exemplo n.º 3
0
int main (int argc, char * argv[])
{
  int c = 0, pagesize = 4096;

  /* parse options using getopt */
  while (c != EOF) {
#ifdef HAVE_GETOPT_LONG
    static struct option long_options[] = {
      {"pagesize", required_argument, NULL, 'p'},
      {"verbose", no_argument, NULL, 'v'},
      {"help", no_argument, NULL, 'h'},
      { NULL }
    };
    int option_index = 0;
    switch ((c = getopt_long (argc, argv, "p:hv",
			      long_options, &option_index))) {
#else /* not HAVE_GETOPT_LONG */
    switch ((c = getopt (argc, argv, "p:hv"))) {
#endif /* not HAVE_GETOPT_LONG */
    case 'v': /* verbose */
      verbose = 1;
      break;
    case 'p': /* pagesize */
      pagesize = atoi (optarg);
      break;
    case 'h': /* help */
      fprintf (stderr,
	       "Usage: rsurface2kdt [OPTION] BASENAME\n"
	       "\n"
	       "Converts an existing R-tree database to the KDT format.\n"
	       "\n"
	       "  -p N  --pagesize=N  sets the pagesize in bytes (default is 4096)\n"
	       "  -v    --verbose     display progress bar\n"
	       "  -h    --help        display this help and exit\n"
	       "\n"
	       "Report bugs to %s\n",
	       "*****@*****.**");
      return 0; /* success */
      break;
    case '?': /* wrong options */
      fprintf (stderr, "Try `rsurface2kdt -h' for more information.\n");
      return 1; /* failure */
    }
  }

  if (optind >= argc) { /* missing BASENAME */
    fprintf (stderr, 
	     "rsurface2kdt: missing BASENAME\n"
	     "Try `rsurface2kdt -h' for more information.\n");
    return 1; /* failure */
  }

  RSurface * rs = r_surface_open (argv[optind], "r", 0);
  if (rs == NULL) {
    fprintf (stderr, "rsurface2kdt: could not open `%s'\n", argv[optind]);
    return 1;
  }

  if (verbose)
    fprintf (stderr, "rsurface2kdt: reading points...\r");
  KdtHeap h;
  kdt_heap_create (&h, kdt_tmpfile (), 0, -1, 1000000);
  double min[2] = { -1e100, -1e100 }, max[2] = { 1e100, 1e100 };
  r_surface_query_region (rs, min, max, query, &h);
  kdt_heap_flush (&h);
  r_surface_close (rs);

  if (verbose)
    fprintf (stderr, "rsurface2kdt:   0%% complete              ");

  struct timeval start;
  gettimeofday (&start, NULL);
  Kdt * kdt = kdt_new ();
  kdt_create (kdt, argv[optind], pagesize, &h, verbose ? progress : NULL, &start);
  kdt_destroy (kdt);

  if (verbose) {
    Kdt * kdt = kdt_new ();
    KdtRect rect = {{-1e30,1e30},{-1e30,1e30}};
    KdtSum sum;

    kdt_sum_init (&sum);
    assert (!kdt_open (kdt, argv[optind]));
    long n = kdt_query_sum (kdt, 
			    (KdtCheck) includes_true, (KdtCheck) includes_true, NULL,
			    rect, &sum);
    fprintf (stderr,
	     "\r%ld points Height min: %g average: %g max: %g\n",
	     n, sum.Hmin, sum.H0/sum.w, sum.Hmax);
    kdt_destroy (kdt);
  }

  char * name = malloc (strlen (argv[optind]) + strlen (".DataPD") + 1);
  sprintf (name, "%s.DataPD", argv[optind]);
  remove (name);
  sprintf (name, "%s.Data", argv[optind]);
  remove (name);
  sprintf (name, "%s.DirPD", argv[optind]);
  remove (name);
  remove (argv[optind]);
  free (name);

  return 0;
}
Exemplo n.º 4
0
Arquivo: cd.c Projeto: j0sh/thesis
int main(int argc, char **argv)
{
    if (argc < 6) print_usage(argv);
    char *path = argv[1];
    int start = atoi(argv[2]), end = atoi(argv[3]), i, *bkgc;
    //IplImage *bkg = alignedImageFrom(mkname(path, 1), 8);
    IplImage *bkg = alignedImageFrom(argv[4], 8);
    int dim = plane_coeffs[0] + plane_coeffs[1] + plane_coeffs[2];
    CvSize bsz = cvGetSize(bkg);
    IplImage *d8 = alignedImageFrom(argv[5], 8);
    //IplImage *d8 = alignedImageFrom(mkname(path, 1), 8);
    int w = bsz.width - 8 + 1, h = bsz.height - 8 + 1, sz = w*h;
    kd_tree kdt;

    printf("cd: %s %d %d %s %s\n", path, start, end, argv[4], argv[5]);
    init_g(bkg);
    memset(&kdt, 0, sizeof(kd_tree));

    /*
    IplImage *b32 = cvCreateImage(bsz, IPL_DEPTH_32F, bkg->nChannels);
    IplImage *i32 = cvCreateImage(bsz, IPL_DEPTH_32F, bkg->nChannels);
    IplImage *d32 = cvCreateImage(bsz, IPL_DEPTH_32F, bkg->nChannels);
    IplImage *diff= cvCreateImage(bsz, IPL_DEPTH_32F, bkg->nChannels);
    cvXor(b32, b32, b32, NULL);
    cvXor(d32, d32, d32, NULL);
    cvConvertScale(bkg, b32, 1/255.0, 0);
    for (i = 1; i < start; i++) {
        IplImage *img = alignedImageFrom(mkname(path, i), 8);
        cvConvertScale(img, i32, 1/256.0, 0);
        cvAbsDiff(i32, b32, diff);
        cvRunningAvg(diff, d32, 1.0/start, NULL);
        cvRunningAvg(i32, b32, 1.0/start, NULL);
        cvReleaseImage(&img);
        cvShowImage("avg diff", d32);
        cvWaitKey(1);
        printf("i: %d\r", i);
    }
    cvConvertScale(b32, bkg, 255, 0);
    cvReleaseImage(&b32);
    cvReleaseImage(&i32);
    if (argc >= 6) {
        cvSaveImage(argv[4], bkg, 0);
        cvConvertScale(d32, d8, 255, 0);
        cvSaveImage(argv[5], d8, 0); // difference image
        return 0;
    }
    */

    int *imgc = block_coeffs(d8, plane_coeffs);
    IplImage *rev = splat(imgc, bsz, plane_coeffs);
    free(imgc);
    cvReleaseImage(&rev);
    prop_coeffs(bkg, plane_coeffs, &bkgc);
    kdt_new(&kdt, bkgc, sz, dim);

    /*thread_ctx ctxs[3];
    pthread_t thrs[sizeof(ctxs)/sizeof(thread_ctx)];
    for (i = 0; i < (int)(sizeof(ctxs)/sizeof(thread_ctx)); i++) {
        thread_ctx *ctx = &ctxs[i];
        ctx->start = i+1;
        ctx->end = end;
        ctx->nb = sizeof(ctxs)/sizeof(thread_ctx);
        ctx->path = path;
        ctx->outfile = argc >= 7 ? argv[6] : NULL;
        ctx->bkg = bkg;
        ctx->diff = d8;
        ctx->kdt = &kdt;
        pthread_create(&thrs[i], NULL, run_thr, ctx);
    }
    for (i = 0; i < (int)(sizeof(ctxs)/sizeof(thread_ctx)); i++) {
        pthread_join(thrs[i], NULL);
    }
    printf("all done!\n");*/

    double t;
    char outname[1024];
    memset(outname, '\0', sizeof(outname));
    for (i = start; i <= end; i++) {
        IplImage *img = alignedImageFrom(mkname(path, i), 8);
        double start = get_time();
        if (argc >= 7) snprintf(outname, sizeof(outname), "%s/bin%06d.png", argv[6], i);
        //process(&kdt, bkg, d8, img, outname);
        //test(img);
        cvShowImage("image", img);
        t += (get_time() - start);
        if ((cvWaitKey(1)&255)==27)break; // esc
        cvReleaseImage(&img);
    }
    //free_g();
    kdt_free(&kdt);
    free(bkgc);
    cvReleaseImage(&bkg);
    cvReleaseImage(&d8);
    return 0;
}
Exemplo n.º 5
0
int main (int argc, char * argv[])
{
  int c = 0, pagesize = 4096;
  int verbose = 0;

  /* parse options using getopt */
  while (c != EOF) {
#ifdef HAVE_GETOPT_LONG
    static struct option long_options[] = {
      {"pagesize", required_argument, NULL, 'p'},
      {"verbose", no_argument, NULL, 'v'},
      {"help", no_argument, NULL, 'h'},
      { NULL }
    };
    int option_index = 0;
    switch ((c = getopt_long (argc, argv, "p:hv",
			      long_options, &option_index))) {
#else /* not HAVE_GETOPT_LONG */
    switch ((c = getopt (argc, argv, "p:hv"))) {
#endif /* not HAVE_GETOPT_LONG */
    case 'v': /* verbose */
      verbose = 1;
      break;
    case 'p': /* pagesize */
      pagesize = atoi (optarg);
      break;
    case 'h': /* help */
      fprintf (stderr,
	       "Usage: kdt2kdt [OPTION] BASENAME\n"
	       "\n"
	       "Converts an existing KDT database to the most recent format.\n"
	       "\n"
	       "  -p N  --pagesize=N  sets the pagesize in bytes (default is 4096)\n"
	       "  -v    --verbose     display progress bar\n"
	       "  -h    --help        display this help and exit\n"
	       "\n"
	       "Report bugs to %s\n",
	       "*****@*****.**");
      return 0; /* success */
      break;
    case '?': /* wrong options */
      fprintf (stderr, "Try `kdt2kdt -h' for more information.\n");
      return 1; /* failure */
    }
  }

  if (optind >= argc) { /* missing BASENAME */
    fprintf (stderr, 
	     "kdt2kdt: missing BASENAME\n"
	     "Try `kdt2kdt -h' for more information.\n");
    return 1; /* failure */
  }

  char * name = malloc (strlen (argv[optind]) + strlen (".pts") + 1);
  sprintf (name, "%s.pts", argv[optind]);
  FILE * fp = fopen (name, "r+w");
  if (fp == NULL) {
    fprintf (stderr, "kdt2kdt: could not open '%s': ", name);
    perror ("");
    return 1;
  }

  if (verbose)
    fprintf (stderr, "kdt2kdt: reading points...\r");
  KdtHeap h1, h;
  kdt_heap_create (&h1, fp, 0, -1, 1000000);
  kdt_heap_create (&h, kdt_tmpfile (), 0, -1, 1000000);
  long n = 0;
  KdtPoint p;
  while (kdt_heap_get (&h1, &p))
    if (p.z < 1e100) {
      kdt_heap_put (&h, &p);
      if (verbose && n % 3571 == 0)
	fprintf (stderr, "kdt2kdt: reading points... %ld\r", n);
      n++;
    }
  kdt_heap_flush (&h);
  assert (unlink (name) == 0);
  free (name);
  kdt_heap_free (&h1);
  
  if (verbose)
    fprintf (stderr, "kdt2kdt:   0%% complete              ");

  struct timeval start;
  gettimeofday (&start, NULL);
  Kdt * kdt = kdt_new ();
  kdt_create (kdt, argv[optind], pagesize, &h, verbose ? progress : NULL, &start);
  kdt_destroy (kdt);

  if (verbose) {
    Kdt * kdt = kdt_new ();
    KdtRect rect = {{-1e30,1e30},{-1e30,1e30}};
    KdtSum sum;

    kdt_sum_init (&sum);
    assert (!kdt_open (kdt, argv[optind]));
    long n = kdt_query_sum (kdt, 
			    (KdtCheck) includes_true, (KdtCheck) includes_true, NULL,
			    rect, &sum);
    fprintf (stderr,
	     "\r%ld points Height min: %g average: %g max: %g\n",
	     n, sum.Hmin, sum.H0/sum.w, sum.Hmax);
    kdt_destroy (kdt);
  }

  return 0;
}