Poisson reconstruction of multiple connected components

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Poisson reconstruction of multiple connected components

Gaetan
Hi all,

I want to perform a Poisson reconstruction of an oriented point cloud that
represents several disjoint smooth closed surfaces.
Furthermore, I assume that the surfaces are not mutually included.
To recover several disjoint surfaces I need to add at least one point per
connected component to the c2t3 object (see  this post
<http://cgal-discuss.949826.n4.nabble.com/About-the-surface-mesh-generator-tt952799.html#a952801>
).
However, I do not know the number of connected components nor do I know
where they are located.
Inserting all the points in the c2t3 allows to recover all the components
but this leads to an oversampled and un-smooth surface mesh.

So far, I have thought of a workaround where I would mesh the opposite of
the Poisson implicit function within the bounding sphere of the point cloud.
This means that instead of meshing a set of disjoint smooth closed surfaces
I would mesh a sphere with disjoint holes.
The final step would be to extract the holes as a set of disjoint smooth
closed surfaces.

Nonetheless, I am wondering if there is not a better way to do this.
For example, could we detect the connected components when computing the
Poisson implicit function, and ultimately extract one point per connected
component?


Thanks for your help,
Gaetan



--
Sent from: http://cgal-discuss.949826.n4.nabble.com/

--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss


Reply | Threaded
Open this post in threaded view
|

Re: Poisson reconstruction of multiple connected components

Simon Giraudot-2
Hello,

The documented function "get_inner_point()" returns the vertex of the
underlying Delaunay 3D Triangulation (where the Poisson function is
stored) where the Poisson function is minimum. What you are asking for,
if I understand correctly, is to identify as many inner points as there
are connected components. I think this is achievable by iterating on
each Delaunay vertex that has a Poisson function value under 0 (or under
the wanted threshold, usually the median value at input points), then
separate these vertices by connected components on the triangulation,
and finally just return one point per connected component.

I don't think you can achieve that with the documented API. However,
some undocumented functions in the Poisson package may help: the class
Poisson_reconstruction_function has a method "tr()" that returns a const
ref the underlying triangulation. Using that, you can access the
vertices of the triangulation which have a method "f()" that returns the
value of the Poisson function. See the files
"Poisson_reconstruction_function.h" and
"Reconstruction_triangulation_3.h" for the undocumented
classes/functions (they are still commented / internally documented for
most of them).

Let me know if this is clear and if I can help any further.

Best,

--
Simon Giraudot, PhD
R&D Engineer
GeometryFactory - http://geometryfactory.com/

Le 02/08/2019 à 01:12, Gaetan a écrit :

> Hi all,
>
> I want to perform a Poisson reconstruction of an oriented point cloud that
> represents several disjoint smooth closed surfaces.
> Furthermore, I assume that the surfaces are not mutually included.
> To recover several disjoint surfaces I need to add at least one point per
> connected component to the c2t3 object (see  this post
> <http://cgal-discuss.949826.n4.nabble.com/About-the-surface-mesh-generator-tt952799.html#a952801>
> ).
> However, I do not know the number of connected components nor do I know
> where they are located.
> Inserting all the points in the c2t3 allows to recover all the components
> but this leads to an oversampled and un-smooth surface mesh.
>
> So far, I have thought of a workaround where I would mesh the opposite of
> the Poisson implicit function within the bounding sphere of the point cloud.
> This means that instead of meshing a set of disjoint smooth closed surfaces
> I would mesh a sphere with disjoint holes.
> The final step would be to extract the holes as a set of disjoint smooth
> closed surfaces.
>
> Nonetheless, I am wondering if there is not a better way to do this.
> For example, could we detect the connected components when computing the
> Poisson implicit function, and ultimately extract one point per connected
> component?
>
>
> Thanks for your help,
> Gaetan
>
>
>
> --
> Sent from: http://cgal-discuss.949826.n4.nabble.com/
>

--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss


Reply | Threaded
Open this post in threaded view
|

Re: Poisson reconstruction of multiple connected components

Gaetan
Thanks for your detailed explanation Simon.
This is indeed what I want do: identify as many inner points as there are
connected components.
Since there is an access to the underlying triangulation, the method you
proposed seems to be the way forward.
I will give it a try.

Thanks again for your help,
Gaetan



--
Sent from: http://cgal-discuss.949826.n4.nabble.com/

--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss