Attività preparatoria alla tesi: gestione di una nuvola di punti attraverso CloudCompare
Introduzione
Attraverso un rilevo fotogrammetrico o tramite una scansione laser scanner è possibile ottenere una nuvola di punti dell'oggetto di studio; ognuno dei punti elaborati avrà un'informazione riguardante la sua posizione nello spazio rispetto a un sistema di riferimento locale e verrà salvato all'interno di un file. Oltre a tale informazione è possibile conoscere per ogni punto la data di scansione e, a seconda della strumentazione utilizzata, anche il contenuto radiometrico, l'informazione del colore e qualsiasi altra informazione richiesta dal committente del lavoro.
Il file sarà composto da una nuvola di punti con annessi metadati. I metadati sono dati che descrivono altri dati, in particolare in riferimento ai documenti digitali; a seconda della quantità di punti registrati e dei metadati, la nuvola apparirà più o meno densa e di conseguenza anche il peso del file sarà più o meno importante.
Per processare questi prodotti è necessario utilizzare un software che lavora con le nuvole di punti; in commercio ne esistono molti sia a pagamento che gratuiti; uno dei più famosi è CloudCompare (CC): un software gratuito per piattaforma Windows, iOS e Linux che processa nuvole di punti e mesh triangolari. In origine CC serviva per confrontare nuvole di punti da rilievi laser scanner ma successivamente è stato implementato in un software di elaborazione di nuvole di punti.
Negli anni sono stati implementati e sviluppati nuovi tools e di conseguenza le versioni successive del software permettono all'utente di avere degli strumenti in grado di elaborare dati tridimensionali. CC permette di fare molteplici elaborazioni sulle nuvole di punti, ad esempio: visualizzare la restituzione plano-altimetrica dell'elaborato, ispezionare la nuvola di punti tridimensionale ruotandola nei tre assi dello spazio, disegnare linee e polilinee sul modello tridimensionale per evidenziare aspetti o parti importanti, misurare distanze e superfici per stimare volumi e interventi, eliminare o estrarre una parte della nuvola di punti di maggiore interesse, interrogare le coordinate dei punti, creare delle mesh. Il software è anche in grado di lavorare con più di una nuvola di punti per volta in maniera da poterle sovrapporre, confrontare e unire.
CC è sviluppato in C++ ed è disponibile per architetture a 32 e a 64 bit. La maggior parte degli algoritmi processati dal software si basano sulla struttura octree: essa è una struttura di dati ad albero in cui ogni nodo interno ha esattamente otto figli. Gli octrees sono spesso usati per partizionare uno spazio tridimensionale suddividendolo ricorsivamente in otto ottanti. In un octree point region (PR), il nodo memorizza un punto tridimensionale esplicito, che è il "centro" della suddivisione per quel nodo; il punto definisce uno degli angoli per ciascuno degli otto figli. In un octree basato su matrice (MX), il punto di suddivisione è implicitamente il centro dello spazio rappresentato dal nodo.
Il nodo radice di un octree PR può rappresentare uno spazio infinito; il nodo radice di un octree MX deve rappresentare uno spazio limitato finito in modo che i centri impliciti siano ben definiti. Utilizzando una ricerca in profondità, i nodi devono essere attraversati e devono essere visualizzate solo le superfici richieste. L'algoritmo di quantizzazione del colore octree, inventato da Gervautz e Purgathofer nel 1988, codifica i dati del colore dell'immagine come un octree fino a nove livelli di profondità. Gli octrees sono usati perché 23 = 8 e ci sono tre componenti di colore nel sistema RGB. L'indice del nodo da cui diramarsi al livello superiore è determinato da una formula che utilizza i bit più significativi dei componenti di colore rosso, verde e blu. Il livello inferiore successivo utilizza il significato del bit successivo e così via. A volte i bit meno significativi vengono ignorati per ridurre la dimensione dell'albero. L'algoritmo è altamente efficiente in termini di memoria perché la dimensione dell'albero può essere limitata.
Il livello inferiore dell'octree è costituito da nodi foglia che accumulano dati di colore non rappresentati nell'albero; questi nodi inizialmente contengono singoli bit. Se nell'octree viene immesso un numero di colori della tavolozza molto superiore a quello desiderato, la sua dimensione può essere ridotta continuamente cercando un nodo di livello inferiore e calcolando la media dei suoi dati bit in un nodo foglia, potando parte dell'albero. Una volta completato il campionamento, l'esplorazione di tutti i percorsi nell'albero fino ai nodi foglia, prendendo nota dei bit lungo il percorso, produrrà approssimativamente il numero di colori richiesto.
CC supporta una grande varietà di formati, il che lo rende uno dei software migliori per gestire le nuvole di punti. Di seguito viene riportata una tabella esaustiva:
| Type | Extension(s) | Description | Read | Write | Binary/ASCII | Features |
|---|---|---|---|---|---|---|
| BIN | .bin | CloudCompare own format | X | X | binary | Normals, colors (RGB), scalar fields (>1), labels, viewports, display options, etc. |
| SBF | .sbf | Simple binary format | X | X | binary | Scalar fields (>1) |
| ASCII | .asc, .txt, .xyz, .neu, .pts | ASCII point cloud file (X, Y, Z, etc.) | X | X | ASCII | Colors (RGB) and various scalar fields |
| LAS | .las | ASPRS lidar point clouds | X | X | binary | (see LAS 1.4 specifications) Normals, colors (RGB or I), scalar field |
| E57 | .e57 | ASTM E57 file format | X | X | mixed | (intensity) Robust normals can be computed at loading time |
| PTX | .ptx | LEICA point cloud export format | X | ascii | Robust normals can be computed at loading time | |
| FARO | .fls, *.fws | FARO formats | X | binary | Scalar field (reflection value) | |
| DP | .dp | DotProduct (DPI-7) format | X | binary | Colors (RGB), robust normals can be computed at loading time | |
| PCD | .pcd | Point Cloud Library format | X | X | binary | Colors (RGB), normals, scalar fields (>1) |
| PLY | .ply | Stanford 3D geometry format (cloud or mesh) | X | X | both | Normals, colors (RGB or I), one or several scalar fields, a single texture |
| OBJ | .obj | Wavefront mesh | X | X | ASCII | Normals, materials and textures |
| VTK | .vtk | VTK file format (triangular mesh or cloud only) | X | X | ASCII | Normals, colors (RGB), scalar field(s) (>1) |
| STL | .stl | STereoLithography file format (mesh) | X | X | ASCII | Normals |
| OFF | .off | Object File Format (mesh) | X | X | ASCII | |
| FBX | .fbx | Autodesk (Filmbox) File Format | X | X | ASCII or BINARY | Normals, colors (RGB), materials and textures |
| DXF | .dxf | Autocad DXF format | X | X | ASCII |