MATLAB Answers

Distance-based clustering for 10-20 million 3D points

11 views (last 30 days)
Carlos Cabo
Carlos Cabo on 6 Sep 2019
Answered: Prashik Shende on 22 Oct 2020
I am looking for an efficient way to cluster 10-20 million unorganized 3D points based on the distance (i.e. setting a distance threshold so every point at less than that distance to its neighbours is clustered with them).
Any implementation of DBscan (or similar) able to deal with the kind/amount of data I have described would do the job.


Show 7 older comments
Carlos Cabo
Carlos Cabo on 26 May 2020
It seems that you are using only X and Y coordinates.
Also, the way you asign values to X and Y doesn't seem to be appropriate.
Moreover, if I understood well your aim, maybe DBSCAN is not the best solution: your point cloud seems to be quite homogeneous and there are not visible separation between groups of points.
It is quite common that the name of DBSCAN leads to some confusion: it is true that it clusters data based on the density, but it is not usually able to separate different groups of 'points' with different densities, unless (i) they are separated (there are gaps between them and those gaps are bigger than the separation of the points that are expected to be in the same group), or (ii) you apply DBSCAN iteratively at different 'scales' (i.e. with different parameters: distance threshold and/or min_n_points)
Carlos Cabo
Carlos Cabo on 26 May 2020
@Image Analyst: If the function hasn't changed from the 2019a version, I've tried it and it doesn't seem to be very efficient with just a few million points in 3D.
It doesn't semm to use any space partition structure (or at least I didn't find any reference to it).
Ali on 14 Jul 2020
@Carlos you have to downsample the point cloud first, this is the recommended approach by Matlab Documentation, refer to pcdownsample.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!