Nuvole di punti, depth map e mesh 3D: la libreria Python per l'elaborazione di dati tridimensionali.
Open3D è una libreria Python per lavorare con dati 3D: nuvole di punti (point cloud), mesh (superfici fatte di triangoli) e immagini di profondità (depth map), come quelle prodotte da sensori 3D, fotocamere depth o modelli di AI per la visione artificiale.
import open3d as o3d import numpy as np punti = np.random.rand(1000, 3) # 1000 punti casuali in 3D nuvola = o3d.geometry.PointCloud() nuvola.points = o3d.utility.Vector3dVector(punti) print(nuvola)
La struttura base di Open3D per rappresentare punti nello spazio 3D. Ogni punto ha coordinate x, y, z e opzionalmente un colore.
Una nuvola di punti può contenere milioni di punti, troppi per elaborarli velocemente. Il downsampling riduce il numero di punti raggruppandoli in piccoli cubi (voxel), mantenendo la forma generale.
Una superficie 3D fatta di triangoli, usata per rappresentare oggetti solidi. Open3D può generare mesh a partire da nuvole di punti con algoritmi di ricostruzione superficiale.
Una depth map associa a ogni pixel di un'immagine la distanza dalla camera. Combinata con un'immagine a colori (RGB), forma un'immagine RGB-D, da cui Open3D può ricostruire una nuvola di punti 3D.
"Headless" significa senza interfaccia grafica: utile su server o notebook dove non c'è uno schermo. Open3D può renderizzare una scena 3D e salvarla direttamente come immagine, senza aprire finestre.
Spunta ogni passaggio man mano che lo completi: sbloccherai l'attestato di questa guida al termine.
Esempio per il punto 1
import open3d as o3d import numpy as np punti = np.random.rand(500, 3) nuvola = o3d.geometry.PointCloud() nuvola.points = o3d.utility.Vector3dVector(punti) print(len(nuvola.points)) # 500
Esempio per il punto 2
colori = np.random.rand(500, 3) # un colore RGB casuale per ogni punto nuvola.colors = o3d.utility.Vector3dVector(colori)
Esempio per il punto 3
nuvola_ridotta = nuvola.voxel_down_sample(voxel_size=0.1) print(len(nuvola.points), "→", len(nuvola_ridotta.points))
Esempio per il punto 4
o3d.io.write_point_cloud("nuvola.ply", nuvola) caricata = o3d.io.read_point_cloud("nuvola.ply") print(caricata)
Tocca ogni termine per vederne la definizione.
Genera punti distribuiti sulla superficie di una sfera (usando coordinate sferiche o np.random.normal e normalizzazione), creane una PointCloud e salvala su file.
Crea una nuvola di 10.000 punti casuali. Applica voxel_down_sample con 3 valori diversi di voxel_size e stampa quanti punti restano in ciascun caso.
Questo codice genera un errore: si assegnano 300 colori a una nuvola che ha 500 punti. Spiega perché Open3D richiede che il numero di colori corrisponda esattamente al numero di punti.
Completa tutti i 5 passaggi della checklist per sbloccare il tuo attestato in PDF.