34 #include <boost/filesystem/operations.hpp>
35 #include <boost/property_tree/ini_parser.hpp>
50 #include "util/version.h"
52 namespace config = boost::program_options;
81 desc_->add_options()(
"help,h",
"");
86 if (add_project_options) {
87 desc_->add_options()(
"project_path", config::value<std::string>());
92 mapper->min_focal_length_ratio = 0.1;
93 mapper->max_focal_length_ratio = 10;
94 mapper->max_extra_param = std::numeric_limits<double>::max();
98 const bool kResetPaths =
false;
100 mapper->mapper.init_min_tri_angle /= 2;
101 mapper->ba_global_images_ratio = 1.4;
102 mapper->ba_global_points_ratio = 1.4;
103 mapper->min_focal_length_ratio = 0.1;
104 mapper->max_focal_length_ratio = 10;
105 mapper->max_extra_param = std::numeric_limits<double>::max();
119 mapper->ba_local_max_num_iterations /= 2;
120 mapper->ba_global_max_num_iterations /= 2;
121 mapper->ba_global_images_ratio *= 1.2;
122 mapper->ba_global_points_ratio *= 1.2;
123 mapper->ba_global_max_refinements = 2;
140 mapper->ba_local_max_num_iterations /= 1.5;
141 mapper->ba_global_max_num_iterations /= 1.5;
142 mapper->ba_global_images_ratio *= 1.1;
143 mapper->ba_global_points_ratio *= 1.1;
144 mapper->ba_global_max_refinements = 2;
161 mapper->ba_local_max_num_iterations = 30;
162 mapper->ba_local_max_refinements = 3;
163 mapper->ba_global_max_num_iterations = 75;
173 mapper->ba_local_max_num_iterations = 40;
174 mapper->ba_local_max_refinements = 3;
175 mapper->ba_global_max_num_iterations = 100;
201 if (added_log_options_) {
204 added_log_options_ =
true;
206 AddAndRegisterDefaultOption(
"log_to_stderr", &FLAGS_logtostderr);
207 AddAndRegisterDefaultOption(
"log_level", &FLAGS_v);
211 if (added_random_options_) {
214 added_random_options_ =
true;
220 if (added_database_options_) {
223 added_database_options_ =
true;
225 AddAndRegisterRequiredOption(
"database_path",
database_path.get());
229 if (added_image_options_) {
232 added_image_options_ =
true;
234 AddAndRegisterRequiredOption(
"image_path",
image_path.get());
238 if (added_extraction_options_) {
241 added_extraction_options_ =
true;
243 AddAndRegisterDefaultOption(
"ImageReader.mask_path",
245 AddAndRegisterDefaultOption(
"ImageReader.camera_model",
247 AddAndRegisterDefaultOption(
"ImageReader.single_camera",
249 AddAndRegisterDefaultOption(
"ImageReader.single_camera_per_folder",
251 AddAndRegisterDefaultOption(
"ImageReader.single_camera_per_image",
253 AddAndRegisterDefaultOption(
"ImageReader.existing_camera_id",
255 AddAndRegisterDefaultOption(
"ImageReader.camera_params",
257 AddAndRegisterDefaultOption(
"ImageReader.default_focal_length_factor",
259 AddAndRegisterDefaultOption(
"ImageReader.camera_mask_path",
262 AddAndRegisterDefaultOption(
"SiftExtraction.num_threads",
264 AddAndRegisterDefaultOption(
"SiftExtraction.use_gpu",
266 AddAndRegisterDefaultOption(
"SiftExtraction.gpu_index",
268 AddAndRegisterDefaultOption(
"SiftExtraction.max_image_size",
270 AddAndRegisterDefaultOption(
"SiftExtraction.max_num_features",
272 AddAndRegisterDefaultOption(
"SiftExtraction.first_octave",
274 AddAndRegisterDefaultOption(
"SiftExtraction.num_octaves",
276 AddAndRegisterDefaultOption(
"SiftExtraction.octave_resolution",
278 AddAndRegisterDefaultOption(
"SiftExtraction.peak_threshold",
280 AddAndRegisterDefaultOption(
"SiftExtraction.edge_threshold",
282 AddAndRegisterDefaultOption(
"SiftExtraction.estimate_affine_shape",
284 AddAndRegisterDefaultOption(
"SiftExtraction.max_num_orientations",
286 AddAndRegisterDefaultOption(
"SiftExtraction.upright",
288 AddAndRegisterDefaultOption(
"SiftExtraction.domain_size_pooling",
290 AddAndRegisterDefaultOption(
"SiftExtraction.dsp_min_scale",
292 AddAndRegisterDefaultOption(
"SiftExtraction.dsp_max_scale",
294 AddAndRegisterDefaultOption(
"SiftExtraction.dsp_num_scales",
299 if (added_match_options_) {
302 added_match_options_ =
true;
304 AddAndRegisterDefaultOption(
"SiftMatching.num_threads",
306 AddAndRegisterDefaultOption(
"SiftMatching.use_gpu",
308 AddAndRegisterDefaultOption(
"SiftMatching.gpu_index",
310 AddAndRegisterDefaultOption(
"SiftMatching.max_ratio",
312 AddAndRegisterDefaultOption(
"SiftMatching.max_distance",
314 AddAndRegisterDefaultOption(
"SiftMatching.cross_check",
316 AddAndRegisterDefaultOption(
"SiftMatching.max_error",
318 AddAndRegisterDefaultOption(
"SiftMatching.max_num_matches",
320 AddAndRegisterDefaultOption(
"SiftMatching.confidence",
322 AddAndRegisterDefaultOption(
"SiftMatching.max_num_trials",
324 AddAndRegisterDefaultOption(
"SiftMatching.min_inlier_ratio",
326 AddAndRegisterDefaultOption(
"SiftMatching.min_num_inliers",
328 AddAndRegisterDefaultOption(
"SiftMatching.multiple_models",
330 AddAndRegisterDefaultOption(
"SiftMatching.guided_matching",
335 if (added_exhaustive_match_options_) {
338 added_exhaustive_match_options_ =
true;
342 AddAndRegisterDefaultOption(
"ExhaustiveMatching.block_size",
347 if (added_sequential_match_options_) {
350 added_sequential_match_options_ =
true;
354 AddAndRegisterDefaultOption(
"SequentialMatching.overlap",
356 AddAndRegisterDefaultOption(
"SequentialMatching.quadratic_overlap",
358 AddAndRegisterDefaultOption(
"SequentialMatching.loop_detection",
360 AddAndRegisterDefaultOption(
"SequentialMatching.loop_detection_period",
362 AddAndRegisterDefaultOption(
363 "SequentialMatching.loop_detection_num_images",
365 AddAndRegisterDefaultOption(
366 "SequentialMatching.loop_detection_num_nearest_neighbors",
368 AddAndRegisterDefaultOption(
369 "SequentialMatching.loop_detection_num_checks",
371 AddAndRegisterDefaultOption(
372 "SequentialMatching.loop_detection_num_images_after_verification",
374 AddAndRegisterDefaultOption(
375 "SequentialMatching.loop_detection_max_num_features",
377 AddAndRegisterDefaultOption(
"SequentialMatching.vocab_tree_path",
382 if (added_vocab_tree_match_options_) {
385 added_vocab_tree_match_options_ =
true;
389 AddAndRegisterDefaultOption(
"VocabTreeMatching.num_images",
391 AddAndRegisterDefaultOption(
"VocabTreeMatching.num_nearest_neighbors",
393 AddAndRegisterDefaultOption(
"VocabTreeMatching.num_checks",
395 AddAndRegisterDefaultOption(
396 "VocabTreeMatching.num_images_after_verification",
398 AddAndRegisterDefaultOption(
"VocabTreeMatching.max_num_features",
400 AddAndRegisterDefaultOption(
"VocabTreeMatching.vocab_tree_path",
402 AddAndRegisterDefaultOption(
"VocabTreeMatching.match_list_path",
407 if (added_spatial_match_options_) {
410 added_spatial_match_options_ =
true;
414 AddAndRegisterDefaultOption(
"SpatialMatching.is_gps",
416 AddAndRegisterDefaultOption(
"SpatialMatching.ignore_z",
418 AddAndRegisterDefaultOption(
"SpatialMatching.max_num_neighbors",
420 AddAndRegisterDefaultOption(
"SpatialMatching.max_distance",
425 if (added_transitive_match_options_) {
428 added_transitive_match_options_ =
true;
432 AddAndRegisterDefaultOption(
"TransitiveMatching.batch_size",
434 AddAndRegisterDefaultOption(
"TransitiveMatching.num_iterations",
439 if (added_image_pairs_match_options_) {
442 added_image_pairs_match_options_ =
true;
446 AddAndRegisterDefaultOption(
"ImagePairsMatching.block_size",
451 if (added_ba_options_) {
454 added_ba_options_ =
true;
456 AddAndRegisterDefaultOption(
457 "BundleAdjustment.max_num_iterations",
459 AddAndRegisterDefaultOption(
460 "BundleAdjustment.max_linear_solver_iterations",
462 AddAndRegisterDefaultOption(
463 "BundleAdjustment.function_tolerance",
465 AddAndRegisterDefaultOption(
466 "BundleAdjustment.gradient_tolerance",
468 AddAndRegisterDefaultOption(
469 "BundleAdjustment.parameter_tolerance",
471 AddAndRegisterDefaultOption(
"BundleAdjustment.refine_focal_length",
473 AddAndRegisterDefaultOption(
"BundleAdjustment.refine_principal_point",
475 AddAndRegisterDefaultOption(
"BundleAdjustment.refine_extra_params",
477 AddAndRegisterDefaultOption(
"BundleAdjustment.refine_extrinsics",
479 AddAndRegisterDefaultOption(
"BundleAdjustment.use_gpu",
481 AddAndRegisterDefaultOption(
"BundleAdjustment.gpu_index",
483 AddAndRegisterDefaultOption(
"BundleAdjustment.min_num_images_gpu_solver",
485 AddAndRegisterDefaultOption(
486 "BundleAdjustment.min_num_residuals_for_cpu_multi_threading",
488 AddAndRegisterDefaultOption(
489 "BundleAdjustment.max_num_images_direct_dense_cpu_solver",
491 AddAndRegisterDefaultOption(
492 "BundleAdjustment.max_num_images_direct_sparse_cpu_solver",
494 AddAndRegisterDefaultOption(
495 "BundleAdjustment.max_num_images_direct_dense_gpu_solver",
497 AddAndRegisterDefaultOption(
498 "BundleAdjustment.max_num_images_direct_sparse_gpu_solver",
503 if (added_mapper_options_) {
506 added_mapper_options_ =
true;
508 AddAndRegisterDefaultOption(
"Mapper.min_num_matches",
509 &
mapper->min_num_matches);
510 AddAndRegisterDefaultOption(
"Mapper.ignore_watermarks",
511 &
mapper->ignore_watermarks);
512 AddAndRegisterDefaultOption(
"Mapper.multiple_models",
513 &
mapper->multiple_models);
514 AddAndRegisterDefaultOption(
"Mapper.max_num_models",
516 AddAndRegisterDefaultOption(
"Mapper.max_model_overlap",
517 &
mapper->max_model_overlap);
518 AddAndRegisterDefaultOption(
"Mapper.min_model_size",
520 AddAndRegisterDefaultOption(
"Mapper.init_image_id1",
522 AddAndRegisterDefaultOption(
"Mapper.init_image_id2",
524 AddAndRegisterDefaultOption(
"Mapper.init_num_trials",
525 &
mapper->init_num_trials);
526 AddAndRegisterDefaultOption(
"Mapper.extract_colors",
528 AddAndRegisterDefaultOption(
"Mapper.num_threads", &
mapper->num_threads);
529 AddAndRegisterDefaultOption(
"Mapper.min_focal_length_ratio",
530 &
mapper->min_focal_length_ratio);
531 AddAndRegisterDefaultOption(
"Mapper.max_focal_length_ratio",
532 &
mapper->max_focal_length_ratio);
533 AddAndRegisterDefaultOption(
"Mapper.max_extra_param",
534 &
mapper->max_extra_param);
535 AddAndRegisterDefaultOption(
"Mapper.ba_refine_focal_length",
536 &
mapper->ba_refine_focal_length);
537 AddAndRegisterDefaultOption(
"Mapper.ba_refine_principal_point",
538 &
mapper->ba_refine_principal_point);
539 AddAndRegisterDefaultOption(
"Mapper.ba_refine_extra_params",
540 &
mapper->ba_refine_extra_params);
541 AddAndRegisterDefaultOption(
"Mapper.ba_local_num_images",
542 &
mapper->ba_local_num_images);
543 AddAndRegisterDefaultOption(
"Mapper.ba_local_function_tolerance",
544 &
mapper->ba_local_function_tolerance);
545 AddAndRegisterDefaultOption(
"Mapper.ba_local_max_num_iterations",
546 &
mapper->ba_local_max_num_iterations);
548 AddAndRegisterDefaultOption(
"Mapper.ba_global_use_pba",
549 &
mapper->ba_global_use_pba);
550 AddAndRegisterDefaultOption(
"Mapper.ba_global_pba_gpu_index",
551 &
mapper->ba_global_pba_gpu_index);
553 AddAndRegisterDefaultOption(
"Mapper.ba_global_images_ratio",
554 &
mapper->ba_global_images_ratio);
555 AddAndRegisterDefaultOption(
"Mapper.ba_global_points_ratio",
556 &
mapper->ba_global_points_ratio);
557 AddAndRegisterDefaultOption(
"Mapper.ba_global_images_freq",
558 &
mapper->ba_global_images_freq);
559 AddAndRegisterDefaultOption(
"Mapper.ba_global_points_freq",
560 &
mapper->ba_global_points_freq);
561 AddAndRegisterDefaultOption(
"Mapper.ba_global_function_tolerance",
562 &
mapper->ba_global_function_tolerance);
563 AddAndRegisterDefaultOption(
"Mapper.ba_global_max_num_iterations",
564 &
mapper->ba_global_max_num_iterations);
565 AddAndRegisterDefaultOption(
"Mapper.ba_global_max_refinements",
566 &
mapper->ba_global_max_refinements);
567 AddAndRegisterDefaultOption(
"Mapper.ba_global_max_refinement_change",
568 &
mapper->ba_global_max_refinement_change);
569 AddAndRegisterDefaultOption(
"Mapper.ba_local_max_refinements",
570 &
mapper->ba_local_max_refinements);
571 AddAndRegisterDefaultOption(
"Mapper.ba_local_max_refinement_change",
572 &
mapper->ba_local_max_refinement_change);
573 AddAndRegisterDefaultOption(
"Mapper.ba_use_gpu", &
mapper->ba_use_gpu);
574 AddAndRegisterDefaultOption(
"Mapper.ba_gpu_index", &
mapper->ba_gpu_index);
575 AddAndRegisterDefaultOption(
576 "Mapper.ba_min_num_residuals_for_cpu_multi_threading",
577 &
mapper->ba_min_num_residuals_for_cpu_multi_threading);
578 AddAndRegisterDefaultOption(
"Mapper.snapshot_path", &
mapper->snapshot_path);
579 AddAndRegisterDefaultOption(
"Mapper.snapshot_images_freq",
580 &
mapper->snapshot_images_freq);
581 AddAndRegisterDefaultOption(
"Mapper.fix_existing_images",
582 &
mapper->fix_existing_images);
585 AddAndRegisterDefaultOption(
"Mapper.init_min_num_inliers",
586 &
mapper->mapper.init_min_num_inliers);
587 AddAndRegisterDefaultOption(
"Mapper.init_max_error",
588 &
mapper->mapper.init_max_error);
589 AddAndRegisterDefaultOption(
"Mapper.init_max_forward_motion",
590 &
mapper->mapper.init_max_forward_motion);
591 AddAndRegisterDefaultOption(
"Mapper.init_min_tri_angle",
592 &
mapper->mapper.init_min_tri_angle);
593 AddAndRegisterDefaultOption(
"Mapper.init_max_reg_trials",
594 &
mapper->mapper.init_max_reg_trials);
595 AddAndRegisterDefaultOption(
"Mapper.abs_pose_max_error",
596 &
mapper->mapper.abs_pose_max_error);
597 AddAndRegisterDefaultOption(
"Mapper.abs_pose_min_num_inliers",
598 &
mapper->mapper.abs_pose_min_num_inliers);
599 AddAndRegisterDefaultOption(
"Mapper.abs_pose_min_inlier_ratio",
600 &
mapper->mapper.abs_pose_min_inlier_ratio);
601 AddAndRegisterDefaultOption(
"Mapper.filter_max_reproj_error",
602 &
mapper->mapper.filter_max_reproj_error);
603 AddAndRegisterDefaultOption(
"Mapper.filter_min_tri_angle",
604 &
mapper->mapper.filter_min_tri_angle);
605 AddAndRegisterDefaultOption(
"Mapper.max_reg_trials",
606 &
mapper->mapper.max_reg_trials);
607 AddAndRegisterDefaultOption(
"Mapper.local_ba_min_tri_angle",
608 &
mapper->mapper.local_ba_min_tri_angle);
611 AddAndRegisterDefaultOption(
"Mapper.tri_max_transitivity",
612 &
mapper->triangulation.max_transitivity);
613 AddAndRegisterDefaultOption(
"Mapper.tri_create_max_angle_error",
614 &
mapper->triangulation.create_max_angle_error);
615 AddAndRegisterDefaultOption(
616 "Mapper.tri_continue_max_angle_error",
617 &
mapper->triangulation.continue_max_angle_error);
618 AddAndRegisterDefaultOption(
"Mapper.tri_merge_max_reproj_error",
619 &
mapper->triangulation.merge_max_reproj_error);
620 AddAndRegisterDefaultOption(
621 "Mapper.tri_complete_max_reproj_error",
622 &
mapper->triangulation.complete_max_reproj_error);
623 AddAndRegisterDefaultOption(
624 "Mapper.tri_complete_max_transitivity",
625 &
mapper->triangulation.complete_max_transitivity);
626 AddAndRegisterDefaultOption(
"Mapper.tri_re_max_angle_error",
627 &
mapper->triangulation.re_max_angle_error);
628 AddAndRegisterDefaultOption(
"Mapper.tri_re_min_ratio",
629 &
mapper->triangulation.re_min_ratio);
630 AddAndRegisterDefaultOption(
"Mapper.tri_re_max_trials",
631 &
mapper->triangulation.re_max_trials);
632 AddAndRegisterDefaultOption(
"Mapper.tri_min_angle",
633 &
mapper->triangulation.min_angle);
634 AddAndRegisterDefaultOption(
"Mapper.tri_ignore_two_view_tracks",
635 &
mapper->triangulation.ignore_two_view_tracks);
639 if (added_patch_match_stereo_options_) {
642 added_patch_match_stereo_options_ =
true;
644 AddAndRegisterDefaultOption(
"PatchMatchStereo.max_image_size",
646 AddAndRegisterDefaultOption(
"PatchMatchStereo.gpu_index",
648 AddAndRegisterDefaultOption(
"PatchMatchStereo.depth_min",
650 AddAndRegisterDefaultOption(
"PatchMatchStereo.depth_max",
652 AddAndRegisterDefaultOption(
"PatchMatchStereo.window_radius",
654 AddAndRegisterDefaultOption(
"PatchMatchStereo.window_step",
656 AddAndRegisterDefaultOption(
"PatchMatchStereo.sigma_spatial",
658 AddAndRegisterDefaultOption(
"PatchMatchStereo.sigma_color",
660 AddAndRegisterDefaultOption(
"PatchMatchStereo.num_samples",
662 AddAndRegisterDefaultOption(
"PatchMatchStereo.ncc_sigma",
664 AddAndRegisterDefaultOption(
"PatchMatchStereo.min_triangulation_angle",
666 AddAndRegisterDefaultOption(
"PatchMatchStereo.incident_angle_sigma",
668 AddAndRegisterDefaultOption(
"PatchMatchStereo.num_iterations",
670 AddAndRegisterDefaultOption(
"PatchMatchStereo.geom_consistency",
672 AddAndRegisterDefaultOption(
673 "PatchMatchStereo.geom_consistency_regularizer",
675 AddAndRegisterDefaultOption(
"PatchMatchStereo.geom_consistency_max_cost",
677 AddAndRegisterDefaultOption(
"PatchMatchStereo.filter",
679 AddAndRegisterDefaultOption(
"PatchMatchStereo.filter_min_ncc",
681 AddAndRegisterDefaultOption(
682 "PatchMatchStereo.filter_min_triangulation_angle",
684 AddAndRegisterDefaultOption(
"PatchMatchStereo.filter_min_num_consistent",
686 AddAndRegisterDefaultOption(
687 "PatchMatchStereo.filter_geom_consistency_max_cost",
689 AddAndRegisterDefaultOption(
"PatchMatchStereo.cache_size",
691 AddAndRegisterDefaultOption(
"PatchMatchStereo.allow_missing_files",
693 AddAndRegisterDefaultOption(
"PatchMatchStereo.write_consistency_graph",
698 if (added_stereo_fusion_options_) {
701 added_stereo_fusion_options_ =
true;
703 AddAndRegisterDefaultOption(
"StereoFusion.mask_path",
705 AddAndRegisterDefaultOption(
"StereoFusion.num_threads",
707 AddAndRegisterDefaultOption(
"StereoFusion.max_image_size",
709 AddAndRegisterDefaultOption(
"StereoFusion.min_num_pixels",
711 AddAndRegisterDefaultOption(
"StereoFusion.max_num_pixels",
713 AddAndRegisterDefaultOption(
"StereoFusion.max_traversal_depth",
715 AddAndRegisterDefaultOption(
"StereoFusion.max_reproj_error",
717 AddAndRegisterDefaultOption(
"StereoFusion.max_depth_error",
719 AddAndRegisterDefaultOption(
"StereoFusion.max_normal_error",
721 AddAndRegisterDefaultOption(
"StereoFusion.check_num_images",
723 AddAndRegisterDefaultOption(
"StereoFusion.cache_size",
725 AddAndRegisterDefaultOption(
"StereoFusion.use_cache",
730 if (added_poisson_meshing_options_) {
733 added_poisson_meshing_options_ =
true;
735 AddAndRegisterDefaultOption(
"PoissonMeshing.point_weight",
737 AddAndRegisterDefaultOption(
"PoissonMeshing.depth",
739 AddAndRegisterDefaultOption(
"PoissonMeshing.color",
741 AddAndRegisterDefaultOption(
"PoissonMeshing.trim", &
poisson_meshing->trim);
742 AddAndRegisterDefaultOption(
"PoissonMeshing.num_threads",
747 if (added_delaunay_meshing_options_) {
750 added_delaunay_meshing_options_ =
true;
752 AddAndRegisterDefaultOption(
"DelaunayMeshing.max_proj_dist",
754 AddAndRegisterDefaultOption(
"DelaunayMeshing.max_depth_dist",
756 AddAndRegisterDefaultOption(
"DelaunayMeshing.visibility_sigma",
758 AddAndRegisterDefaultOption(
"DelaunayMeshing.distance_sigma_factor",
760 AddAndRegisterDefaultOption(
"DelaunayMeshing.quality_regularization",
762 AddAndRegisterDefaultOption(
"DelaunayMeshing.max_side_length_factor",
764 AddAndRegisterDefaultOption(
"DelaunayMeshing.max_side_length_percentile",
766 AddAndRegisterDefaultOption(
"DelaunayMeshing.num_threads",
771 if (added_render_options_) {
774 added_render_options_ =
true;
776 AddAndRegisterDefaultOption(
"Render.min_track_len", &
render->min_track_len);
777 AddAndRegisterDefaultOption(
"Render.max_error", &
render->max_error);
778 AddAndRegisterDefaultOption(
"Render.refresh_rate", &
render->refresh_rate);
779 AddAndRegisterDefaultOption(
"Render.adapt_refresh_rate",
780 &
render->adapt_refresh_rate);
781 AddAndRegisterDefaultOption(
"Render.image_connections",
782 &
render->image_connections);
783 AddAndRegisterDefaultOption(
"Render.projection_type",
784 &
render->projection_type);
788 FLAGS_logtostderr =
false;
791 const bool kResetPaths =
true;
794 desc_.reset(
new boost::program_options::options_description());
796 options_bool_.clear();
797 options_int_.clear();
798 options_double_.clear();
799 options_string_.clear();
801 added_log_options_ =
false;
802 added_random_options_ =
false;
803 added_database_options_ =
false;
804 added_image_options_ =
false;
805 added_extraction_options_ =
false;
806 added_match_options_ =
false;
807 added_exhaustive_match_options_ =
false;
808 added_sequential_match_options_ =
false;
809 added_vocab_tree_match_options_ =
false;
810 added_spatial_match_options_ =
false;
811 added_transitive_match_options_ =
false;
812 added_image_pairs_match_options_ =
false;
813 added_ba_options_ =
false;
814 added_mapper_options_ =
false;
815 added_patch_match_stereo_options_ =
false;
816 added_stereo_fusion_options_ =
false;
817 added_poisson_meshing_options_ =
false;
818 added_delaunay_meshing_options_ =
false;
819 added_texturing_options_ =
false;
820 added_render_options_ =
false;
851 if (added_database_options_) {
858 if (added_image_options_)
889 config::variables_map vmap;
892 config::store(config::parse_command_line(argc, argv, *desc_), vmap);
894 if (vmap.count(
"help")) {
900 <<
"Options can either be specified via command-line or by "
903 <<
"them in a .ini project file passed to `--project_path`."
910 if (vmap.count(
"project_path")) {
918 }
catch (std::exception& exc) {
919 std::cerr <<
"ERROR: Failed to parse options - " << exc.what() <<
"."
923 std::cerr <<
"ERROR: Failed to parse options for unknown reason."
929 std::cerr <<
"ERROR: Invalid options provided." <<
std::endl;
935 config::variables_map vmap;
938 std::cout <<
"WARNING: Configuration file does not exist." <<
std::endl;
943 std::ifstream file(
path);
944 CHECK(file.is_open()) <<
path;
945 config::store(config::parse_config_file(file, *desc_), vmap);
947 }
catch (std::exception&
e) {
948 std::cout <<
"WARNING: Failed to parse options " <<
e.what() <<
"."
952 std::cout <<
"WARNING: Failed to parse options for unknown reason."
967 boost::property_tree::ptree pt;
974 for (
const auto& option : options_bool_) {
976 pt.put(option.first, *option.second);
980 for (
const auto& option : options_int_) {
982 pt.put(option.first, *option.second);
986 for (
const auto& option : options_double_) {
988 pt.put(option.first, *option.second);
992 for (
const auto& option : options_string_) {
994 pt.put(option.first, *option.second);
998 for (
const auto& option : options_bool_) {
1000 pt.put(option.first, *option.second);
1004 for (
const auto& option : options_int_) {
1006 pt.put(option.first, *option.second);
1010 for (
const auto& option : options_double_) {
1012 pt.put(option.first, *option.second);
1016 for (
const auto& option : options_string_) {
1018 pt.put(option.first, *option.second);
1022 boost::property_tree::write_ini(
path, pt);
1026 if (added_texturing_options_) {
1029 added_texturing_options_ =
true;
1031 AddAndRegisterDefaultOption(
"Texturing.verbose", &
texturing->verbose);
1032 AddAndRegisterDefaultOption(
"Texturing.meshed_file_path",
1034 AddAndRegisterDefaultOption(
"Texturing.textured_file_path",
1036 AddAndRegisterDefaultOption(
"Texturing.use_depth_normal_maps",
1038 AddAndRegisterDefaultOption(
"Texturing.depth_map_type",
1040 AddAndRegisterDefaultOption(
"Texturing.max_depth_error",
1042 AddAndRegisterDefaultOption(
"Texturing.min_normal_consistency",
1044 AddAndRegisterDefaultOption(
"Texturing.max_viewing_angle_deg",
1046 AddAndRegisterDefaultOption(
"Texturing.use_gradient_magnitude",
1048 AddAndRegisterDefaultOption(
"Texturing.mesh_source",
void AddStereoFusionOptions()
std::shared_ptr< SequentialMatchingOptions > sequential_matching
std::shared_ptr< TransitiveMatchingOptions > transitive_matching
OptionManager(bool add_project_options=true)
void AddBundleAdjustmentOptions()
void AddExhaustiveMatchingOptions()
std::shared_ptr< mvs::PoissonMeshingOptions > poisson_meshing
std::shared_ptr< mvs::DelaunayMeshingOptions > delaunay_meshing
std::shared_ptr< TexturingOptions > texturing
bool Read(const std::string &path)
void ModifyForIndividualData()
bool ReRead(const std::string &path)
std::shared_ptr< mvs::PatchMatchOptions > patch_match_stereo
void AddTexturingOptions()
void AddMatchingOptions()
std::shared_ptr< RenderOptions > render
std::shared_ptr< std::string > database_path
std::shared_ptr< mvs::StereoFusionOptions > stereo_fusion
void ModifyForVideoData()
std::shared_ptr< SiftMatchingOptions > sift_matching
void AddTransitiveMatchingOptions()
void AddPoissonMeshingOptions()
std::shared_ptr< BundleAdjustmentOptions > bundle_adjustment
void ModifyForInternetData()
void AddExtractionOptions()
std::shared_ptr< IncrementalMapperOptions > mapper
void ModifyForMediumQuality()
void ResetOptions(const bool reset_paths)
void AddVocabTreeMatchingOptions()
std::shared_ptr< std::string > project_path
void Write(const std::string &path) const
void ModifyForHighQuality()
std::shared_ptr< SiftExtractionOptions > sift_extraction
void AddSequentialMatchingOptions()
void AddDatabaseOptions()
void ModifyForLowQuality()
std::shared_ptr< ImageReaderOptions > image_reader
void AddDelaunayMeshingOptions()
void AddPatchMatchStereoOptions()
void ModifyForExtremeQuality()
std::shared_ptr< VocabTreeMatchingOptions > vocab_tree_matching
void Parse(const int argc, char **argv)
std::shared_ptr< ExhaustiveMatchingOptions > exhaustive_matching
void AddImagePairsMatchingOptions()
void AddSpatialMatchingOptions()
std::shared_ptr< SpatialMatchingOptions > spatial_matching
std::shared_ptr< ImagePairsMatchingOptions > image_pairs_matching
std::shared_ptr< std::string > image_path
#define CHECK_OPTION_IMPL(expr)
QTextStream & endl(QTextStream &stream)
static const std::string path
colmap::IncrementalMapperOptions IncrementalMapperOptions
colmap::RenderOptions RenderOptions
static int kDefaultPRNGSeed
std::string GetBuildInfo()
std::string GetVersionInfo()
bool ExistsDir(const std::string &path)
bool ExistsFile(const std::string &path)
std::string StringPrintf(const char *format,...)
std::string GetParentDir(const std::string &path)
bool StringContains(const std::string &str, const std::string &sub_str)