Guida Didattica · Librerie Python per Grafica 3D e CAD

Open3D

Nuvole di punti, depth map e mesh 3D: la libreria Python per l'elaborazione di dati tridimensionali.

0 di 5 passaggi completati

01Fondamenti

Cos'è Open3D?

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.

☁️Point CloudUn insieme di punti nello spazio (x, y, z), spesso con colore associato.
🔺MeshUna superficie 3D composta da triangoli collegati tra loro.
🖼️Depth mapUn'immagine dove ogni pixel rappresenta una distanza dalla camera.

Il tuo primo oggetto 3D

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)

02Concetti Chiave

☁️ PointCloud▶

La struttura base di Open3D per rappresentare punti nello spazio 3D. Ogni punto ha coordinate x, y, z e opzionalmente un colore.

nuvola.colors = o3d.utility.Vector3dVector(colori_rgb)
🔻 Voxel downsampling▶

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.

nuvola_ridotta = nuvola.voxel_down_sample(voxel_size=0.05)
🔺 TriangleMesh▶

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.

🖼️ Depth image e RGB-D▶

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.

rgbd = o3d.geometry.RGBDImage.create_from_color_and_depth(colore, profondità) nuvola = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd, intrinseci)
📸 Rendering headless▶

"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.

renderer = o3d.visualization.rendering.OffscreenRenderer(640, 480) renderer.scene.add_geometry("nuvola", nuvola, materiale) immagine = renderer.render_to_image() o3d.io.write_image("screenshot.png", immagine)

03Checklist Pratica

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
1. Crea una nuvola di punti casualeGenera 500 punti 3D casuali e crea una PointCloud, come nell'esempio sopra.

Esempio per il punto 2

colori = np.random.rand(500, 3)  # un colore RGB casuale per ogni punto
nuvola.colors = o3d.utility.Vector3dVector(colori)
2. Aggiungi colori ai puntiAssegna un colore casuale a ciascun punto della nuvola, come nell'esempio sopra.

Esempio per il punto 3

nuvola_ridotta = nuvola.voxel_down_sample(voxel_size=0.1)
print(len(nuvola.points), "→", len(nuvola_ridotta.points))
3. Riduci la nuvola con il voxel downsamplingUsa voxel_down_sample() come nell'esempio sopra e confronta il numero di punti prima e dopo.

Esempio per il punto 4

o3d.io.write_point_cloud("nuvola.ply", nuvola)
caricata = o3d.io.read_point_cloud("nuvola.ply")
print(caricata)
4. Salva e ricarica la nuvola su fileUsa write_point_cloud() e read_point_cloud() come nell'esempio sopra.
5. Completa il quiz di verificaScendi in fondo alla guida e rispondi correttamente ad almeno l'80% delle domande.

04Glossario Interattivo

Tocca ogni termine per vederne la definizione.

05Quiz di Verifica

06Esercitazioni Pratiche

Esercizio 1

Nuvola di punti a forma di sfera

Genera punti distribuiti sulla superficie di una sfera (usando coordinate sferiche o np.random.normal e normalizzazione), creane una PointCloud e salvala su file.

⏱ 25 minuti📦 Script + file .ply generato🖥️ Individuale
Esercizio 2

Confronto downsampling

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.

⏱ 20 minuti📦 Tabella con 3 risultati confrontati🖥️ Individuale
Esercizio 3

Trova l'errore: colori senza punti corrispondenti

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.

⏱ 10 minuti📦 Spiegazione scritta🖥️ Individuale o in coppia

🎓 Attestato di completamento

Completa tutti i 5 passaggi della checklist per sbloccare il tuo attestato in PDF.

0 / 5 passaggi completati