Help selecting a search algorithm, dsearchn, knnsearch, etc.
15 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentar
Star Strider
am 18 Mär. 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.
Antworten (3)
Greg Heath
am 18 Mär. 2014
>> min([ 1 1 2 2 3 3])
ans =
1
Hope this helps.
Thank you for formally accepting my answer
Greg
0 Kommentare
Marcraven
am 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 Kommentare
Siehe auch
Kategorien
Mehr zu Discriminant Analysis finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!