46 bool VerifyCameraParams(
const std::string& camera_model,
47 const std::string& params) {
49 std::cerr <<
"ERROR: Camera model does not exist" <<
std::endl;
53 const std::vector<double> camera_params = CSVToVector<double>(params);
56 if (camera_params.size() > 0 &&
58 std::cerr <<
"ERROR: Invalid camera parameters" <<
std::endl;
64 bool VerifySiftGPUParams(
const bool use_gpu) {
65 #if !defined(CUDA_ENABLED) && !defined(OPENGL_ENABLED)
67 std::cerr <<
"ERROR: Cannot use Sift GPU without CUDA or OpenGL support; "
68 "set SiftExtraction.use_gpu or SiftMatching.use_gpu to false."
107 enum class CameraMode { AUTO = 0, SINGLE = 1, PER_FOLDER = 2, PER_IMAGE = 3 };
109 void UpdateImageReaderOptionsFromCameraMode(ImageReaderOptions& options,
112 case CameraMode::AUTO:
113 options.single_camera =
false;
114 options.single_camera_per_folder =
false;
115 options.single_camera_per_image =
false;
117 case CameraMode::SINGLE:
118 options.single_camera =
true;
119 options.single_camera_per_folder =
false;
120 options.single_camera_per_image =
false;
122 case CameraMode::PER_FOLDER:
123 options.single_camera =
false;
124 options.single_camera_per_folder =
true;
125 options.single_camera_per_image =
false;
127 case CameraMode::PER_IMAGE:
128 options.single_camera =
false;
129 options.single_camera_per_folder =
false;
130 options.single_camera_per_image =
true;
138 std::string image_list_path;
139 int camera_mode = -1;
147 options.
Parse(argc, argv);
153 if (camera_mode >= 0) {
154 UpdateImageReaderOptionsFromCameraMode(reader_options,
155 (CameraMode)camera_mode);
158 if (!image_list_path.empty()) {
166 std::cerr <<
"ERROR: Camera model does not exist" <<
std::endl;
178 std::unique_ptr<QApplication> app;
189 feature_extractor.
Start();
190 feature_extractor.
Wait();
197 std::string import_path;
198 std::string image_list_path;
199 int camera_mode = -1;
208 options.
Parse(argc, argv);
214 if (camera_mode >= 0) {
215 UpdateImageReaderOptionsFromCameraMode(reader_options,
216 (CameraMode)camera_mode);
219 if (!image_list_path.empty()) {
232 feature_importer.
Start();
233 feature_importer.
Wait();
239 std::string match_list_path;
240 std::string match_type =
"pairs";
246 "{'pairs', 'raw', 'inliers'}");
248 options.
Parse(argc, argv);
254 std::unique_ptr<QApplication> app;
259 std::unique_ptr<Thread> feature_matcher;
260 if (match_type ==
"pairs") {
265 }
else if (match_type ==
"raw" || match_type ==
"inliers") {
272 std::cerr <<
"ERROR: Invalid `match_type`";
279 feature_matcher->Start();
280 feature_matcher->Wait();
290 options.
Parse(argc, argv);
296 std::unique_ptr<QApplication> app;
308 feature_matcher.
Start();
309 feature_matcher.
Wait();
319 options.
Parse(argc, argv);
325 std::unique_ptr<QApplication> app;
337 feature_matcher.
Start();
338 feature_matcher.
Wait();
348 options.
Parse(argc, argv);
354 std::unique_ptr<QApplication> app;
366 feature_matcher.
Start();
367 feature_matcher.
Wait();
377 options.
Parse(argc, argv);
383 std::unique_ptr<QApplication> app;
395 feature_matcher.
Start();
396 feature_matcher.
Wait();
406 options.
Parse(argc, argv);
412 std::unique_ptr<QApplication> app;
424 feature_matcher.
Start();
425 feature_matcher.
Wait();
std::shared_ptr< SequentialMatchingOptions > sequential_matching
std::shared_ptr< TransitiveMatchingOptions > transitive_matching
void AddRequiredOption(const std::string &name, T *option, const std::string &help_text="")
void AddExhaustiveMatchingOptions()
void AddMatchingOptions()
void AddDefaultOption(const std::string &name, T *option, const std::string &help_text="")
std::shared_ptr< std::string > database_path
std::shared_ptr< SiftMatchingOptions > sift_matching
void AddTransitiveMatchingOptions()
void AddExtractionOptions()
void AddVocabTreeMatchingOptions()
std::shared_ptr< SiftExtractionOptions > sift_extraction
void AddSequentialMatchingOptions()
void AddDatabaseOptions()
std::shared_ptr< ImageReaderOptions > image_reader
std::shared_ptr< VocabTreeMatchingOptions > vocab_tree_matching
void Parse(const int argc, char **argv)
std::shared_ptr< ExhaustiveMatchingOptions > exhaustive_matching
void AddSpatialMatchingOptions()
std::shared_ptr< SpatialMatchingOptions > spatial_matching
std::shared_ptr< std::string > image_path
QTextStream & endl(QTextStream &stream)
void RunThreadWithOpenGLContext(Thread *thread)
int RunMatchesImporter(int argc, char **argv)
bool ExistsCameraModelWithName(const std::string &model_name)
int RunSequentialMatcher(int argc, char **argv)
bool CameraModelVerifyParams(const int model_id, const std::vector< double > ¶ms)
int RunFeatureExtractor(int argc, char **argv)
int RunTransitiveMatcher(int argc, char **argv)
std::vector< std::string > ReadTextFileLines(const std::string &path)
int RunSpatialMatcher(int argc, char **argv)
int RunFeatureImporter(int argc, char **argv)
int RunVocabTreeMatcher(int argc, char **argv)
int RunExhaustiveMatcher(int argc, char **argv)
int CameraModelNameToId(const std::string &model_name)
std::string match_list_path
std::string match_list_path
std::string camera_params
std::string database_path
std::vector< std::string > image_list