Skip to content

Commit fca7cc6

Browse files
author
Brook Roberts
committed
Don't calculate common_tracks for images that have been reconstructed
1 parent da738c0 commit fca7cc6

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

opensfm/matching.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,22 @@ def common_tracks(g, im1, im2):
221221
return tracks, p1, p2
222222

223223

224-
def all_common_tracks(graph, tracks, include_features=True, min_common=50):
224+
def all_common_tracks(graph, tracks, include_features=True, min_common=50, remaining_images=None):
225225
"""
226226
Returns a dictionary mapping image pairs to the list of tracks observed in both images
227227
:param graph: Graph structure (networkx) as returned by :method:`DataSet.tracks_graph`
228228
:param tracks: list of track identifiers
229229
:param include_features: whether to include the features from the images
230230
:param min_common: the minimum number of tracks the two images need to have in common
231+
:param remaining_images: if not none, only find pairs from within this list
231232
:return: tuple: im1, im2 -> tuple: tracks, features from first image, features from second image
232233
"""
234+
if remaining_images is not None:
235+
# We just look at the subgraph comprising of remaining images, and tracks that pass through them
236+
tracks = {track for imagename in remaining_images for track in graph[imagename]}
237+
filtered_nodes = set(remaining_images).union(tracks)
238+
graph = graph.subgraph(filtered_nodes)
239+
233240
track_dict = defaultdict(list)
234241
for tr in tracks:
235242
track_images = sorted(graph[tr].keys())

opensfm/reconstruction.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -775,7 +775,11 @@ def incremental_reconstruction(data):
775775
key=lambda x: -len(x.shots))
776776
data.save_reconstruction(reconstructions)
777777

778-
common_tracks = matching.all_common_tracks(graph, tracks)
778+
if len(reconstructed_images) != 0:
779+
common_tracks = matching.all_common_tracks(graph, tracks, remaining_images=remaining_images)
780+
else:
781+
# Filtering the graph is slow, so don't pass remaining_images if all images are remaining
782+
common_tracks = matching.all_common_tracks(graph, tracks)
779783
pairs = compute_image_pairs(common_tracks, data.config)
780784
for im1, im2 in pairs:
781785
if im1 in remaining_images and im2 in remaining_images:

0 commit comments

Comments
 (0)