add verbose flag for logging messages during DSF track generation

release/4.3a0
senselessdev1 2022-10-12 23:31:45 -04:00
parent 4f406650f7
commit 7dee1af5b4
3 changed files with 16 additions and 10 deletions

View File

@ -143,10 +143,11 @@ class DsfTrackGenerator {
// @param Length-N list of keypoints, for N images/cameras. // @param Length-N list of keypoints, for N images/cameras.
std::vector<SfmTrack2d> generate_tracks_from_pairwise_matches( std::vector<SfmTrack2d> generate_tracks_from_pairwise_matches(
const MatchIndicesMap& matches_dict, const MatchIndicesMap& matches_dict,
const KeypointsVector& keypoints_list) { const KeypointsVector& keypoints_list,
bool verbose = false) {
std::vector<SfmTrack2d> track_2d_list; std::vector<SfmTrack2d> track_2d_list;
std::cout << "[SfmTrack2d] Starting Union-Find..." << std::endl; if (verbose) std::cout << "[SfmTrack2d] Starting Union-Find..." << std::endl;
// Generate the DSF to form tracks. // Generate the DSF to form tracks.
DSFMapIndexPair dsf; DSFMapIndexPair dsf;
@ -167,7 +168,7 @@ class DsfTrackGenerator {
} }
} }
std::cout << "[SfmTrack2d] Union-Find Complete" << std::endl; if (verbose) std::cout << "[SfmTrack2d] Union-Find Complete" << std::endl;
const std::map<IndexPair, std::set<IndexPair> > key_sets = dsf.sets(); const std::map<IndexPair, std::set<IndexPair> > key_sets = dsf.sets();
// Return immediately if no sets were found. // Return immediately if no sets were found.
@ -202,12 +203,14 @@ class DsfTrackGenerator {
} }
} }
if (verbose) {
double erroneous_track_pct = static_cast<float>(erroneous_track_count) double erroneous_track_pct = static_cast<float>(erroneous_track_count)
/ static_cast<float>(key_sets.size()) * 100; / static_cast<float>(key_sets.size()) * 100;
// TODO(johnwlambert): restrict decimal places to 2 decimals. // TODO(johnwlambert): restrict decimal places to 2 decimals.
std::cout << "DSF Union-Find: " << erroneous_track_pct; std::cout << "DSF Union-Find: " << erroneous_track_pct;
std::cout << "% of tracks discarded from multiple obs. in a single image." << std::endl; std::cout << "% of tracks discarded from multiple obs. in a single image." << std::endl;
}
// TODO(johnwlambert): return the Transitivity failure percentage here. // TODO(johnwlambert): return the Transitivity failure percentage here.
return track_2d_list; return track_2d_list;
} }

View File

@ -78,7 +78,8 @@ class DsfTrackGenerator {
DsfTrackGenerator(); DsfTrackGenerator();
const gtsam::SfmTrack2dVector generate_tracks_from_pairwise_matches( const gtsam::SfmTrack2dVector generate_tracks_from_pairwise_matches(
const gtsam::MatchIndicesMap& matches_dict, const gtsam::MatchIndicesMap& matches_dict,
const gtsam::KeypointsVector& keypoints_list); const gtsam::KeypointsVector& keypoints_list,
bool verbose = false);
}; };

View File

@ -40,7 +40,9 @@ class TestDsfTrackGenerator(GtsamTestCase):
matches_dict[IndexPair(0, 1)] = np.array([[0, 0], [1, 1]]) matches_dict[IndexPair(0, 1)] = np.array([[0, 0], [1, 1]])
matches_dict[IndexPair(1, 2)] = np.array([[2, 0], [1, 1]]) matches_dict[IndexPair(1, 2)] = np.array([[2, 0], [1, 1]])
tracks = DsfTrackGenerator().generate_tracks_from_pairwise_matches(matches_dict, keypoints_list) tracks = DsfTrackGenerator().generate_tracks_from_pairwise_matches(matches_dict,
keypoints_list,
verbose=True)
assert len(tracks) == 3 assert len(tracks) == 3
# Verify track 0. # Verify track 0.