Conversion de points et de surfaces#
Dans ce notebook, nous allons échantillonner des points à partir d’une surface et reconvertir le nuage de points en une surface.
import napari_process_points_and_surfaces as nppas
import vedo
import napari
viewer = napari.Viewer(ndisplay=3)
def hide_all(viewer):
for layer in viewer.layers:
layer.visible = False
def show_all(viewer):
for layer in viewer.layers:
layer.visible = True
mesh = vedo.load("../../data/branchoid.ply")
surface = nppas.to_napari_surface_data(mesh)
surface_layer = viewer.add_surface(surface)
napari.utils.nbscreenshot(viewer)
Création de nuages de points#
Nous pouvons créer un nuage de points à partir de la surface. Les points sont situés sur la surface et non à l’intérieur du volume.
point_cloud = nppas.sample_points_from_surface(surface, distance_fraction=0.01)
point_cloud
array([[26. , 44. , 46.5],
[26. , 43.5, 48. ],
[26. , 43.5, 50. ],
...,
[74.5, 55. , 52. ],
[74.5, 56. , 49. ],
[74.5, 56. , 51. ]], dtype=float32)
hide_all(viewer)
points_layer = viewer.add_points(point_cloud, size=1)
napari.utils.nbscreenshot(viewer)
Si ces points sont trop nombreux, nous pouvons en échantillonner un plus petit nombre à partir de ceux-ci.
hide_all(viewer)
subsampled_points = nppas.subsample_points(point_cloud, distance_fraction=0.05)
viewer.add_points(subsampled_points, size=1)
napari.utils.nbscreenshot(viewer)
Conversion de points en surfaces#
Nous pouvons reconstruire des surfaces à partir de nuages de points. Évidemment, une certaine perte d’information peut s’être produite en fonction de ce que nous avons fait aux points.
hide_all(viewer)
reconstructed_surface = nppas.reconstruct_surface_from_pointcloud(
subsampled_points,
number_of_sampling_voxels=15,
point_influence_radius=10)
viewer.add_surface(reconstructed_surface)
napari.utils.nbscreenshot(viewer)
hide_all(viewer)
reconstructed_surface = nppas.reconstruct_surface_from_pointcloud(
point_cloud,
number_of_sampling_voxels=15,
point_influence_radius=10)
viewer.add_surface(reconstructed_surface)
napari.utils.nbscreenshot(viewer)