ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
sfm.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include "exe/sfm.h"
9 
10 #include "pipelines/option_utils.h"
11 #include "pipelines/sfm.h"
12 
13 namespace cloudViewer {
14 
15 int AutomaticReconstruct(const std::string& workspace_path,
16  const std::string& image_path,
17  const std::string& mask_path /*= ""*/,
18  const std::string& vocab_tree_path /*= ""*/,
19  const std::string& data_type /*= "individual"*/,
20  const std::string& quality /*= "high"*/,
21  const std::string& mesher /*= "poisson"*/,
22  const std::string& camera_model /*= "SIMPLE_RADIAL"*/,
23  bool single_camera /*= false*/,
24  bool sparse /*= true*/,
25  bool dense /*= true*/,
26  int num_threads /*= -1*/,
27  bool use_gpu /*= true*/,
28  const std::string& gpu_index /*= "-1"*/) {
29 #ifdef CUDA_ENABLED
30  dense = true;
31 #else
32  dense = false;
33 #endif
34 
35  OptionsParser parser;
36  parser.registerOption("workspace_path", &workspace_path);
37  parser.registerOption("image_path", &image_path);
38  parser.registerOption("mask_path", &mask_path);
39  parser.registerOption("vocab_tree_path", &vocab_tree_path);
40  // supported {individual, video, internet}
41  parser.registerOption("data_type", &data_type);
42  // supported {low, medium, high, extreme}
43  parser.registerOption("quality", &quality);
44  parser.registerOption("mesher", &mesher);
45  parser.registerOption("camera_model", &camera_model);
46  parser.registerOption("single_camera", &single_camera);
47  parser.registerOption("sparse", &sparse);
48  parser.registerOption("dense", &dense);
49  parser.registerOption("num_threads", &num_threads);
50  parser.registerOption("use_gpu", &use_gpu);
51  parser.registerOption("gpu_index", &gpu_index);
52  if (!parser.parseOptions()) return EXIT_FAILURE;
53 
55  parser.getArgv());
56 }
57 
59  const std::string& input_path,
60  const std::string& output_path,
61  const colmap::BundleAdjustmentOptions& bundle_adjustment_options) {
62  OptionsParser parser;
63  parser.registerOption("input_path", &input_path);
64  parser.registerOption("output_path", &output_path);
65  parser.addBundleAdjustmentOptions(bundle_adjustment_options);
66  if (!parser.parseOptions()) return EXIT_FAILURE;
67 
68  return colmap::RunBundleAdjuster(parser.getArgc(), parser.getArgv());
69 }
70 
71 int ExtractColor(const std::string& image_path,
72  const std::string& input_path,
73  const std::string& output_path) {
74  OptionsParser parser;
75  parser.registerOption("image_path", &image_path);
76  parser.registerOption("input_path", &input_path);
77  parser.registerOption("output_path", &output_path);
78  if (!parser.parseOptions()) return EXIT_FAILURE;
79 
80  return colmap::RunColorExtractor(parser.getArgc(), parser.getArgv());
81 }
82 
84  const std::string& database_path,
85  const std::string& image_path,
86  const std::string& input_path,
87  const std::string& output_path,
88  const std::string& image_list_path /*= ""*/,
89  const colmap::IncrementalMapperOptions& incremental_mapper_options) {
90  OptionsParser parser;
91  parser.registerOption("database_path", &database_path);
92  parser.registerOption("image_path", &image_path);
93  parser.registerOption("input_path", &input_path);
94  parser.registerOption("output_path", &output_path);
95  parser.registerOption("image_list_path", &image_list_path);
96  parser.addMapperOptions(incremental_mapper_options);
97  if (!parser.parseOptions()) return EXIT_FAILURE;
98 
99  return colmap::RunMapper(parser.getArgc(), parser.getArgv());
100 }
101 
103  const std::string& database_path,
104  const std::string& image_path,
105  const std::string& output_path,
106  int num_workers /*= -1*/,
107  int image_overlap /*= 50*/,
108  int leaf_max_num_images /*= 500*/,
109  const colmap::IncrementalMapperOptions& incremental_mapper_options) {
110  OptionsParser parser;
111  parser.registerOption("database_path", &database_path);
112  parser.registerOption("image_path", &image_path);
113  parser.registerOption("output_path", &output_path);
114  parser.registerOption("num_workers", &num_workers);
115  parser.registerOption("image_overlap", &image_overlap);
116  parser.registerOption("leaf_max_num_images", &leaf_max_num_images);
117  parser.addMapperOptions(incremental_mapper_options);
118  if (!parser.parseOptions()) return EXIT_FAILURE;
119 
120  return colmap::RunHierarchicalMapper(parser.getArgc(), parser.getArgv());
121 }
122 
123 int FilterPoints(const std::string& input_path,
124  const std::string& output_path,
125  std::size_t min_track_len /*= 2*/,
126  double max_reproj_error /*= 4.0*/,
127  double min_tri_angle /*= 1.5*/) {
128  OptionsParser parser;
129  parser.registerOption("input_path", &input_path);
130  parser.registerOption("output_path", &output_path);
131  parser.registerOption("min_track_len", &min_track_len);
132  parser.registerOption("max_reproj_error", &max_reproj_error);
133  parser.registerOption("min_tri_angle", &min_tri_angle);
134  if (!parser.parseOptions()) return EXIT_FAILURE;
135 
136  return colmap::RunPointFiltering(parser.getArgc(), parser.getArgv());
137 }
138 
140  const std::string& database_path,
141  const std::string& image_path,
142  const std::string& input_path,
143  const std::string& output_path,
144  bool clear_points /*= false*/,
145  const colmap::IncrementalMapperOptions& incremental_mapper_options) {
146  OptionsParser parser;
147  parser.registerOption("database_path", &database_path);
148  parser.registerOption("image_path", &image_path);
149  parser.registerOption("input_path", &input_path);
150  parser.registerOption("output_path", &output_path);
151  // Whether to clear all existing points and observations
152  parser.registerOption("clear_points", &clear_points);
153  parser.addMapperOptions(incremental_mapper_options);
154  if (!parser.parseOptions()) return EXIT_FAILURE;
155 
156  return colmap::RunPointTriangulator(parser.getArgc(), parser.getArgv());
157 }
158 
160  const std::string& input_path,
161  const std::string& output_path,
162  const std::string& rig_config_path,
163  bool estimate_rig_relative_poses /*= true*/,
164  bool refine_relative_poses /*= true*/,
165  const colmap::BundleAdjustmentOptions& bundle_adjustment_options) {
166  OptionsParser parser;
167  parser.registerOption("input_path", &input_path);
168  parser.registerOption("output_path", &output_path);
169  parser.registerOption("rig_config_path", &rig_config_path);
170  // Whether to optimize the relative poses of the camera rigs.
171  parser.registerOption("estimate_rig_relative_poses",
172  &estimate_rig_relative_poses);
173  parser.registerOption("RigBundleAdjustment.refine_relative_poses",
174  &refine_relative_poses);
175  parser.addBundleAdjustmentOptions(bundle_adjustment_options);
176  if (!parser.parseOptions()) return EXIT_FAILURE;
177 
178  return colmap::RunRigBundleAdjuster(parser.getArgc(), parser.getArgv());
179 }
180 
181 } // namespace cloudViewer
void addBundleAdjustmentOptions(const colmap::BundleAdjustmentOptions &bundle_adjustment_options)
void addMapperOptions(const colmap::IncrementalMapperOptions &incremental_mapper_options)
void registerOption(const std::string &name, const T *option)
Definition: option_utils.h:43
Generic file read and write utility for python interface.
int TriangulatePoints(const std::string &database_path, const std::string &image_path, const std::string &input_path, const std::string &output_path, bool clear_points, const colmap::IncrementalMapperOptions &incremental_mapper_options)
Definition: sfm.cpp:139
int ExtractColor(const std::string &image_path, const std::string &input_path, const std::string &output_path)
Definition: sfm.cpp:71
int FilterPoints(const std::string &input_path, const std::string &output_path, std::size_t min_track_len, double max_reproj_error, double min_tri_angle)
Definition: sfm.cpp:123
int AutomaticReconstruct(const std::string &workspace_path, const std::string &image_path, const std::string &mask_path, const std::string &vocab_tree_path, const std::string &data_type, const std::string &quality, const std::string &mesher, const std::string &camera_model, bool single_camera, bool sparse, bool dense, int num_threads, bool use_gpu, const std::string &gpu_index)
Definition: sfm.cpp:15
int NormalMapper(const std::string &database_path, const std::string &image_path, const std::string &input_path, const std::string &output_path, const std::string &image_list_path, const colmap::IncrementalMapperOptions &incremental_mapper_options)
Definition: sfm.cpp:83
int HierarchicalMapper(const std::string &database_path, const std::string &image_path, const std::string &output_path, int num_workers, int image_overlap, int leaf_max_num_images, const colmap::IncrementalMapperOptions &incremental_mapper_options)
Definition: sfm.cpp:102
int RigBundleAdjust(const std::string &input_path, const std::string &output_path, const std::string &rig_config_path, bool estimate_rig_relative_poses, bool refine_relative_poses, const colmap::BundleAdjustmentOptions &bundle_adjustment_options)
Definition: sfm.cpp:159
int BundleAdjustment(const std::string &input_path, const std::string &output_path, const colmap::BundleAdjustmentOptions &bundle_adjustment_options)
Definition: sfm.cpp:58
int RunColorExtractor(int argc, char **argv)
Definition: sfm.cc:167
int RunPointTriangulator(int argc, char **argv)
Definition: sfm.cc:339
int RunHierarchicalMapper(int argc, char **argv)
Definition: sfm.cc:262
int RunMapper(int argc, char **argv)
Definition: sfm.cc:185
int RunRigBundleAdjuster(int argc, char **argv)
Definition: sfm.cc:655
int RunAutomaticReconstructor(int argc, char **argv)
Definition: sfm.cc:48
int RunBundleAdjuster(int argc, char **argv)
Definition: sfm.cc:135
int RunPointFiltering(int argc, char **argv)
Definition: sfm.cc:302