3

Hy!

I have organized point clouds from a Kinect sensor. Let's say I have a organized point cloud of a sofa with a table in front. What I would like the get are two clouds: sofa and table

I am searching for some algorithm to get the connected components. Does anyone have some pseudo code or papers? Or maybe some code (Matlab)

My idea at the moment: I could use the 2D information to get neighboring pixels of a point. Next I could check the euclidean distance to the neighboring pixels. If the distance is below a threshold, the pixel belongs to the same cluster. ...

Thanks

Amro
  • 123,847
  • 25
  • 243
  • 454
user2576458
  • 161
  • 3
  • 9
  • 2
    your idea sounds similar to the [DBSCAN](http://en.wikipedia.org/wiki/DBSCAN) clustering algorithm. Of course, this is not restricted to 2D as you say, the data can be multidimensional (as long as you compute the euclidean distance correctly) – Amro Aug 09 '13 at 15:38

2 Answers2

4

As @Amro pointed out, DBSCAN is the algorithm you should study. It is a clustering based on ''density-connected'' components.

Also note the GDBSCAN variant (Generalized DBSCAN). You are not restricted to primitive distances such as Euclidean, but you can make your "neighborhood" definition as complex as you'd like.

Matlab probably is not the best choice. For DBSCAN to be really fast, you need support for index acceleration. Recent scikit-learn (0.14 to be precise) just got basic index acceleration for DBSCAN, and ELKI has had it for years. ELKI seems to be more ''flexible'' wrt. to having GDBSCAN and having index structures that are easy to extend with custom distance functions. sklearn probably only accelerates a few built-in distances.

Has QUIT--Anony-Mousse
  • 76,138
  • 12
  • 138
  • 194
0

you can use the connected component segmentation plugin from "Tools>Segmentation>label connected component" from cloudcompare software