POISSON RECONSTRUCTION
algoritmo che produce mesh chuise
- scopo: converte una nuvola di punti in triangle mesh per mezzo di una griglia di voxel
- Metafora visiva
- La nuvola di punti è un gregge di pecore sparse in un prato
- Tu stendi una rete a cubetti (griglia voxel) sopra quel prato
- Per ogni voxel nello spazio associo una signed distance:
- 0 → se sei sulla superficie
- > 0 → se sei fuori dall’oggetto
- < 0 → se sei dentro all’oggetto
- in pratica se il voxel sta in direzione opposta alla normale del punto che gli è più vicino, allora gli sta dietro (quindi dentro il modello 3d). Quindi dista da lui di un valore negativo
- questo avviene per mezzo di una SD Function, che viene computata per renedere possibile la definizione della nuvola di punti con i voxel
differenza tra 2 algoritmi di conversione
- conversione diretta: ball pivoting e Diagramma di Voronoi + Triangolazione di Delaunay
- conversione indiretta: poisson reconstruction
difetto dei metodi diretti
🧱 Da nuvola di punti a mesh – Metodi diretti
Quando vuoi costruire una mesh 3D a partire da una nuvola di punti, ci sono due approcci:
👉 Metodi diretti (es. Ball-Pivoting, Front Advancing, Delaunay):
- Usano i punti della nuvola così come sono
- I punti diventano direttamente i vertici della mesh
🚨 Ma c’è un problema:
Le nuvole di punti (soprattutto quelle prese da uno scanner 3D) sono spesso imperfette.
Ecco alcuni difetti comuni che rendono difficile costruire una buona mesh:
❌ Rumore o outliers
- Alcuni punti sono completamente sbagliati, fuori posto.
❌ Difetti di allineamento
- Se la nuvola è formata unendo più scansioni, ci possono essere disallineamenti tra le parti.
❌ Densità irregolari
- Alcune zone hanno troppi punti, altre troppo pochi.
Es: due parti scansionate due volte → risultano sovrapposte e più dense.
❌ Parti mancanti
- Alcune zone non sono state scansionate (es. per ombre, ostacoli, riflessi).
🎯 In breve:
I metodi diretti usano i punti “così come sono”,ma questo può causare problemi seri se la nuvola non è perfetta.
E purtroppo, le nuvole acquisite da scanner 3D quasi sempre hanno questi difetti.
pregio della poisson reconstruction
La Poisson Reconstruction non si limita a collegare i punti.
Fa qualcosa di molto più intelligente:
1. Costruisce una funzione continua (la SDF)
- Che non si fida ciecamente dei singoli punti
- Ma cerca di interpolare e approssimare la superficie ideale che “passa per quei punti”
2. Usa anche le normali (la direzione della “pelle” dell’oggetto)
- Quindi capisce come è orientata la superficie
- E può distinguere quali punti sono coerenti e quali no
3. Riempe i buchi
- Poiché costruisce una superficie chiusa e regolare, tende a colmare le parti mancanti
- Anche se ci sono zone senza punti, la superficie viene interpolata bene
🔧 Metafora semplice:
- I metodi diretti sono come unire i puntini a mano su un foglio: se un punto è fuori posto, lo colleghi lo stesso e rovini il disegno.
- La Poisson invece è come disegnare una linea curva che meglio segue tutti i puntini, ignorando quelli sbagliati e riempiendo le parti mancanti in modo coerente.
difetti di poisson
✅ Cosa fa bene la Poisson Reconstruction:
- Crea nuovi vertici “puliti” e mediati, che aiutano ad eliminare il rumore e gli errori nella nuvola di punti.
- Produce sempre una mesh:
- chiusa (senza buchi)
- orientata correttamente
- 2-manifold (cioè ogni bordo appartiene a due facce → mesh “corretta”)
❌ Ma ha anche degli svantaggi:
1. La mesh risultante è molto irregolare
- Anche se la nuvola di punti era ordinata o precisa, la mesh che ottieni può avere triangoli molto diversi tra loro (piccoli, grandi, storti).
2. Perdi la risoluzione originale della nuvola
- Se la nuvola di punti era dettagliata in alcune aree e meno in altre (cioè “adattiva”),
la Poisson non mantiene questa variazione.
- Ti restituisce una mesh “uniforme”, che non rispecchia le densità originali.
3. I punti vengono ricampionati
- I vertici originali della nuvola vengono ignorati e sostituiti da nuovi punti.
- Questo è un problema se i punti originali erano molto precisi, ad esempio presi con strumenti ad alta precisione.
4. È pesante da calcolare
- Serve molta memoria e tempo per calcolare la funzione SDF e applicare Marching Cubes.
- A meno che tu non usi una griglia di voxel a bassa risoluzione, ma in quel caso...
👉 la qualità della mesh peggiora.
Questo è collegato al problema della "curse of dimensionality", cioè:
in 3D, se raddoppi la risoluzione in ogni direzione, i voxel diventano 8 volte di più→ memoria e tempo esplodono.
🎯 In sintesi:
Vantaggi della Poisson | Svantaggi della Poisson |
+ Mesh chiusa e ben orientata | - Mesh irregolare |
+ Riduce rumore | - Perdi la precisione e la densità originale |
+ Funziona anche con buchi | - Ricampiona i vertici, anche se erano precisi |
ㅤ | - Molto pesante in memoria e calcol |
OCT-TREE
i voxel non sono adattivi → questo aumenta il costo alla memoria
risoluzione = dimensione e numero dei voxel
SOLUZIONE 2D → QUAD TREE (4 figli)
una struttura dati mappa le divisioni effettuate sul piano 2d, se divido in 4 ho 4 figli.
Ogni figlio lo risparmio dal dividerlo a sua volta in 4 solo se:
- sta tutto dentro il modello 2d (bit = 1)
- oppure tutto fuori (bit = 0)
Se lo attraversa parzialmente → lo diviso ulteriormente (aumento la risoluzione)
ESEMPI GRAFICI
ESEMPIO
SOLUZIONE 3D → OCT-TREE (8 figli, attenzione ai parametri nella descrizione)
ha una complessità formalmente cubica O(n^3), ma all’atto pratico memorizza abbastanza pochi nodi da avere una complessità quadratica O(n^2)