Esempio n. 1
0
/* Interrogates server for the nominal sample frequency and the decimation
 * factors. */
static bool read_archive_parameters(void)
{
    FILE *stream;
    char buffer[64];
    return
        connect_server(&stream)  &&
        FINALLY(
            TEST_OK(fprintf(stream, "CFdDVKC\n") > 0)  &&
            read_response(stream, buffer, sizeof(buffer)),
            // Finally, whether read_response succeeds
            TEST_OK(fclose(stream) == 0))  &&
        DO_PARSE("server response", parse_archive_parameters, buffer)  &&
        TEST_OK_(
            major_version > SERVER_MAJOR_VERSION ||
            minor_version >= SERVER_MINOR_VERSION,
            "Server protocol mismatch, server %d.%d less than expected %d.%d",
            major_version, minor_version,
            SERVER_MAJOR_VERSION, SERVER_MINOR_VERSION);
}
Esempio n. 2
0
int main(int argc, char *argv[])
{
  TRY();
  pixel_image src_image;
  pixel_image dst_image;
  quad_forest forest;
  uint32 max_size, min_size;
  integral_value alpha, tree_overlap, segment_overlap;
  string source_file, target_file;

  if (argc < 8) {
    printf("\nError: wrong number of parameters\n\n");
    print_usage();
    return 1;
  }
  else {
    int scan_result;

    scan_result = sscanf(argv[1], "%lu", &max_size);
    if (scan_result != 1) {
      printf("\nError: failed to parse parameter max\n\n");
      print_usage();
      return 1;
    }
    scan_result = sscanf(argv[2], "%lu", &min_size);
    if (scan_result != 1) {
      printf("\nError: failed to parse parameter min\n\n");
      print_usage();
      return 1;
    }
    scan_result = sscanf(argv[3], "%lf", &alpha);
    if (scan_result != 1) {
      printf("\nError: failed to parse parameter alpha\n\n");
      print_usage();
      return 1;
    }
    scan_result = sscanf(argv[4], "%lf", &tree_overlap);
    if (scan_result != 1) {
      printf("\nError: failed to parse parameter toverlap\n\n");
      print_usage();
      return 1;
    }
    scan_result = sscanf(argv[5], "%lf", &segment_overlap);
    if (scan_result != 1) {
      printf("\nError: failed to parse parameter soverlap\n\n");
      print_usage();
      return 1;
    }
    source_file = argv[6];
    target_file = argv[7];
    if (max_size < min_size) {
      printf("\nError: max may not be smaller than min\n\n");
      print_usage();
      return 1;
    }
    if (alpha <= 0 || alpha > 5) {
      printf("\nError: alpha must be in range (0..5]\n\n");
      print_usage();
      return 1;
    }
    if (tree_overlap <= 0 || tree_overlap >= 1) {
      printf("\nError: toverlap must be in range (0..1)\n\n");
      print_usage();
      return 1;
    }
    if (segment_overlap <= 0 || segment_overlap >= 1) {
      printf("\nError: soverlap must be in range (0..1)\n\n");
      print_usage();
      return 1;
    }

    {
      FILE *source;
      source = fopen(source_file, "r");
      if (source == NULL) {
        printf("\nError: the source file does not exist\n\n");
        print_usage();
        return 1;
      }
      fclose(source);
    }
  }

  printf("load image...\n");
  CHECK(pixel_image_create_from_file(&src_image, source_file, p_U8, GREY));
  printf("create forest...\n");
  CHECK(quad_forest_create(&forest, &src_image, max_size, min_size));
  printf("updating forest...\n");
  CHECK(quad_forest_update(&forest));
  printf("segmenting...\n");
  CHECK(quad_forest_segment_with_overlap(&forest, alpha, tree_overlap, segment_overlap));
  printf("found %lu segments!\n", forest.segments);
  printf("drawing result...\n");
  CHECK(quad_forest_draw_image(&forest, &dst_image, TRUE, TRUE));
  printf("writing result to file...\n");
  CHECK(pixel_image_write_to_file(&dst_image, target_file));
  printf("done!\n");

  FINALLY(main);
  quad_forest_destroy(&forest);
  pixel_image_destroy(&dst_image);
  pixel_image_destroy(&src_image);

  return 0;
}