How can I store the feature descriptors for all 3D points found in Structure from Motion?

3 views (last 30 days)
I am running the example on Structure from Motion from MathWorks. I have managed to find 3D points from my 2D images, but I also need to store feature descriptors for each 3D point, so that I can perform 3D-2D matching later on. How do I go about this? I can save the features for each image separately, but I don't know how to later match them to each 3D point.

Answers (1)

Qu Cao
Qu Cao on 20 Apr 2021
You can use imageviewset to store the feature points associated with each view and the connections between the views. You can also use worldpointset to store the correspondences between 2-D image points and 3-D world points.
  4 Comments
Markus Iversflaten
Markus Iversflaten on 22 Apr 2021
I've managed to extract the features that were used to create the 3D points now. However, it seems that the features are not ordered correctly, even though I am extracting them in the order of the pointTracks:
features = zeros(length(tracks),64);
for i=1:length(tracks)
track = tracks(i);
viewID = track.ViewIds(1);
index = find(track.Points(1,:) == vSet.Views.Points{viewID}.Location,1);
feature = vSet.Views.Features{viewID}(index,:);
features(i,:) = feature;
end
I believe that running this line:
xyzPoints = triangulateMultiview(tracks, camPoses, intrinsics);
might "scramble" the 3D points, so that they are no longer ordered in the same way as tracks. Am I right about this? If so, how can I remedy this?
Qu Cao
Qu Cao on 22 Apr 2021
Edited: Qu Cao on 22 Apr 2021
The first view in each point track may not correspond to the same view. You may need to do some debugging by inspecting the data in tracks.
In triangulateMultiview, xyzPoints and tracks have 1-to-1 correspondence. The order is not changed.

Sign in to comment.

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!