Get a smothed outer surface from a 3D set of points with points that are inside the wanted surface
10 views (last 30 days)
Hello dear MATLAB masters !
I'm blocked on a very tricky problem. My data are recordings from a hand randomly moving in 3D space (trajectory).
- What I need to extract is the outer surface of this trajectory in order to define the limit workspace the hand can reach.
- I'm also trying the find a way to find which points should be selected as part of the surface and which are inside and therefore not be considered.
- I also need the surface to be smoothed.
There are a lot of solution available for MATLAB to transform a cloud of points into a surface (Snake, RBF 3D, Convex Hull, 3D-scanned surface points, ...) but they all make the assumption that the entire set of point should be on the surface, which is not the case in my problem.
I hope I was clear enough :D
Johannes Korsawe on 19 Sep 2013
you gave the answer yourself. The first step is to get rid of those points that are inside the volume. There is also a number of algorithms dealing with this.
I have made positive experience with the FastMarching algorithm. Roughly speaking, you construct a grid around your point cloud and for each grid point, you determine the minimal distance to some point in the point cloud. (Approximate Nearest Neighbour search is a good choice here.) Then you start with a grid point which is outside the point cloud by construction and iterate until the distance to the point cloud is smaller than the grid size. You do this recursively/iteratively and therefore construct a propagating front of outsider-points.
The bottleneck is the calculation of the distance matrix. But this can be clustered and done iteratively s.t. you only consider the neighbourhood of some grid area wrt the point cloud.
Only the first step towards a solution for your overall problems.