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

2 次查看(过去 30 天)
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.

回答(1 个)

Qu Cao
Qu Cao 2021-4-20
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 个评论
Markus Iversflaten
Markus Iversflaten 2021-4-22
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 2021-4-22
编辑:Qu Cao 2021-4-22
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.

请先登录,再进行评论。

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by