Help selecting a search algorithm, dsearchn, knnsearch, etc.
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello all,
I have a matrix A made up of several 2D points. I have a second matrix, B, which is the positions of these points slightly shifted in time. Basically they are from the next frame of a movie. I would like to find the points in B that are closest to each point in A. So far, I have been using dsearchn, but I found an issue that doesn't seem to make it work in my case. dsearchn will sometimes return the same point in B to multiple points in A. I would like something that returns a unique point in B for each point in A while minimizing the total distance. Is this something that already exists in matlab, or would I need to code it myself.
Thank you tremendously, Quentin
1 commentaire
Star Strider
le 18 Mar 2014
I’m not certain I understand. Is the ‘[k,d] = dsearchn(X,...)’ option not returning unique distances? Posting relevant parts of your code and a short but representative sample of your data would help.
Réponses (3)
Greg Heath
le 18 Mar 2014
>> min([ 1 1 2 2 3 3])
ans =
1
Hope this helps.
Thank you for formally accepting my answer
Greg
0 commentaires
Marcraven
le 23 Jan 2017
I have a similar problem.
You can use the munkres algorithm for assignment, but it is slow.
What I do is assigning multiple points (with knnsearch) to a single one and then keeping only those with smallest distance, I don't know if that works for you.
[spots,Distances]=knnsearch(A,B);
merged=[spots,Distances];
merged=sortrows(merged,2);
[a,b]=unique(merged(:,1),'rows');
Distances=merged(b,2);
spots=merged(b,1);
end
0 commentaires
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!