Fast way to 2D data thinning

Hi,
I have a set of 2D data in the format [X Y] and am going to thin them based on a certain distance threshold,i.e. if points are very close less than a threshold, one is eliminated. This process continues until the distance between any two points is bigger than the threshold. I developed a code to do that but it is very time consuming. I am wondering if there is a better way of doing this in Matlab.
Thank you.
Mehdi

Réponses (1)

Andrei Bobrov
Andrei Bobrov le 17 Juil 2015
Modifié(e) : Andrei Bobrov le 17 Juil 2015

0 votes

X = randi([5,100],20,1);
Y = randi([-100,10],20,1);
trld = 10; % threshold
n = numel(X);
ii = nchoosek(1:n,2);
a = hypot(X(ii(:,1))-X(ii(:,2)),Y(ii(:,1))-Y(ii(:,2)));
lo = a > trld;
ind = unique(ii(lo,:));
out = [X(ind),Y(ind)];

1 commentaire

Mehdi Ravanbakhsh
Mehdi Ravanbakhsh le 17 Juil 2015
Thanks Andrei. I tested your code and it never goes beyond nchoosek(1:n,2); Why it is so? nchoosek seems to be computationally heavy.
I test my own code which takes 3 minutes for 150000 points but your code goes forever. Any advice?

Connectez-vous pour commenter.

Catégories

En savoir plus sur MATLAB Coder dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by