24 virtual void Run() = 0;
71 std::string match_list_path_;
72 QComboBox* match_type_cb_;
79 grid_layout_(new QGridLayout(this)),
105 "confidence", 0, 1, 0.00001, 5);
109 "min_inlier_ratio", 0, 1, 0.001, 3);
119 QScrollArea* options_scroll_area =
new QScrollArea(
this);
120 options_scroll_area->setAlignment(Qt::AlignHCenter);
124 QPushButton* run_button =
new QPushButton(tr(
"Run"),
this);
154 "quadratic_overlap");
159 "loop_detection_period");
162 "loop_detection_num_images");
165 ->loop_detection_num_nearest_neighbors,
166 "loop_detection_num_nearest_neighbors");
169 "loop_detection_num_checks", 1);
172 ->loop_detection_num_images_after_verification,
173 "loop_detection_num_images_after_verification", 0);
176 "loop_detection_max_num_features", -1);
188 QMessageBox::critical(
this,
"", tr(
"Invalid vocabulary tree path."));
205 "num_nearest_neighbors");
210 "num_images_after_verification", 0);
213 "max_num_features", -1);
224 QMessageBox::critical(
this,
"", tr(
"Invalid vocabulary tree path."));
242 "max_num_neighbors");
280 match_type_cb_ =
new QComboBox(
this);
281 match_type_cb_->addItem(QString(
"Image pairs"));
282 match_type_cb_->addItem(QString(
"Raw feature matches"));
283 match_type_cb_->addItem(QString(
"Inlier feature matches"));
297 QMessageBox::critical(
this,
"", tr(
"Path does not exist!"));
301 Thread* matcher =
nullptr;
302 if (match_type_cb_->currentIndex() == 0) {
311 if (match_type_cb_->currentIndex() == 1) {
313 }
else if (match_type_cb_->currentIndex() == 2) {
330 setWindowFlags(Qt::Window);
331 setWindowTitle(
"Feature matching");
333 QGridLayout* grid =
new QGridLayout(
this);
335 tab_widget_ =
new QTabWidget(
this);
347 grid->addWidget(tab_widget_, 0, 0);
350 void FeatureMatchingWidget::showEvent(QShowEvent*
event) {
351 parent_->setDisabled(
true);
354 void FeatureMatchingWidget::hideEvent(QHideEvent*
event) {
355 parent_->setEnabled(
true);
CustomMatchingTab(QWidget *parent, OptionManager *options)
ExhaustiveMatchingTab(QWidget *parent, OptionManager *options)
QGridLayout * grid_layout_
ThreadControlWidget * thread_control_widget_
void CreateGeneralOptions()
OptionsWidget * options_widget_
SequentialMatchingTab(QWidget *parent, OptionManager *options)
SpatialMatchingTab(QWidget *parent, OptionManager *options)
TransitiveMatchingTab(QWidget *parent, OptionManager *options)
VocabTreeMatchingTab(QWidget *parent, OptionManager *options)
CustomMatchingTab(QWidget *parent, OptionManager *options)
ExhaustiveMatchingTab(QWidget *parent, OptionManager *options)
void CreateGeneralOptions()
FeatureMatchingTab(QWidget *parent, OptionManager *options)
std::shared_ptr< SequentialMatchingOptions > sequential_matching
std::shared_ptr< TransitiveMatchingOptions > transitive_matching
std::shared_ptr< std::string > database_path
std::shared_ptr< SiftMatchingOptions > sift_matching
std::shared_ptr< VocabTreeMatchingOptions > vocab_tree_matching
std::shared_ptr< ExhaustiveMatchingOptions > exhaustive_matching
std::shared_ptr< SpatialMatchingOptions > spatial_matching
std::shared_ptr< ImagePairsMatchingOptions > image_pairs_matching
SequentialMatchingTab(QWidget *parent, OptionManager *options)
SpatialMatchingTab(QWidget *parent, OptionManager *options)
TransitiveMatchingTab(QWidget *parent, OptionManager *options)
VocabTreeMatchingTab(QWidget *parent, OptionManager *options)
Generic file read and write utility for python interface.
bool ExistsFile(const std::string &path)
std::string match_list_path
std::string match_list_path