• Non ci sono risultati.

Preparazione all’acquisizione

Hole filling

3.1.2 Preparazione all’acquisizione

Prima dell’acquisizione, sulla mano del volontario vengono disegnati con un pen-narello diversi marker ; in alcuni casi, delle croci posizionate opportunamente evitano possibili ambiguit`a nel riconoscimento a occhio nudo dei marker. Non `

e stato definito un protocollo di posizionamento di questi ultimi in quanto non necessario, ma l’euristica adottata `e quella di posizionare un marker in corrispon-denza di ogni giunto delle dita, uno al centro del palmo, uno al centro del dorso, e gli altri concentrati in posizioni “strategiche” per il corretto allineamento, come la punta delle dita e il profilo superiore del pollice. I marker sono indispensabili per impostare manualmente alcune corrispondenze tra due viste da allineare, co-me richiesto dall’algoritmo ICP[6] nella sua concezione iniziale. In Figura 3.4 `e riportato un tipico posizionamento dei marker; notare le croci in corrispondenza delle unghie.

3.1 RICOSTRUZIONE DELLA MANO

Dopo aver collegato lo scanner al PC e configurato il software d’acquisizio-ne ScanStudioHD Pro, l’operatore regola l’altezza del bracciolo e la posiziod’acquisizio-ne dell’asta del treppiede dello scanner in modo che la mano del volontario rien-tri completamente nel volume visuale del dispositivo per ogni possibile rotazione della testa orbitale. Indicativamente, il baricentro della mano deve trovarsi in corrispondenza dl centro di rotazione della testa orbitale, e per evitare interferen-ze del bracciolo durante la scansione `e necessario che il polso non sia appoggiato a quest’ultimo. La posizione lungo il braccio in alluminio `e stata calibrata in fase di assemblaggio del sistema in modo che lo scanner si trovi a circa 45cm dal centro di rotazione, compatibilmente alla distanza ottimale a cui deve essere posizionato l’oggetto da acquisire in modalit`a wide. La rotazione avviene agendo su un’apposita manovella di cui `e dotata la testa orbitale.

Durante la regolazione la mano pu`o essere rilassata, ma n´e il braccio n´e il bracciolo possono essere spostati. Questo vale anche per i passi successivi.

3.1.3 Acquisizione

L’operatore esegue una sequenza di scansioni della mano ad angoli diversi, orien-tando manualmente il braccio prima di ogni scansione e assicurandosi che le vi-brazioni dello scanner siano cessate. Si ribadisce il fatto che, durante il processo, le posizioni dei due treppiedi non vanno modificate, e il soggetto deve mantenere la mano assolutamente immobile. In Figura 3.5 `e riportato un esempio di foto B/W scattata dallo scanner prima della scansione, e serve da texture da applicare alla futura mesh parziale ricostruita dal software tramite triangolazione. Come si nota dall’immagine, il volontario `e munito di occhiali protettivi specifici per la lunghezza d’onda del laser, bench´e la sua intensit`a non sia tale da arrecare danni alla retina.

Il difetto principale di questo sistema `e l’immobilizzazione della mano: l’algoritmo di fusione delle varie viste implementato nel software `e una variante di ICP che, nella sua accezione originale, assume l’ipotesi di corpo rigido. Affinch´e l’ipotesi sia ancora valida nel caso della mano, `e indispensabile che essa sia perfettamente immobile, altrimenti le viste si riferiscono a un diverso oggetto e la minimizza-zione dell’errore di allineamento diventa impossibile. Bench´e il volontario possa trovare una posizione comoda su una sedia che non affatichi il braccio, `e inevi-tabile che la mano dopo poco tempo compia micro movimenti involontari dovuti all’accumulo di tensione nel mantenimento della posa. Di per s´e lo scostamento della mano di pochi millimetri non causa seri problemi, a patto che le dita riman-gano immobili, ma questa situazione si verifica di rado in un contesto reale. Un

lieve scostamento di un dito da una vista all’altra pu`o causare gravi errori nella fase di fusione delle varie viste.

Figura 3.5: Esempio di foto B/W scattata da NextEngine—prima di una scansione. Per ridurre l’affaticamento della mano, si `e cercato di minimizzare il tempo richiesto da un’acquisizione completa agendo sulle impostazioni del software e ri-ducendo il numero di viste, ma al contempo massimizzando il livello di dettaglio. L’ambizione non `e quella di ricostruire fedelmente la mano del volontario per realizzare animazioni realistiche, ma ridurre al minimo gli errori nella successiva determinazione dei parametri del modello. Del resto, `e sempre possibile ridurre il livello di dettaglio di una mesh successivamente tramite alcuni algoritmi di de-cimazione, mentre non `e possibile aumentarlo tramite algoritmi di interpolazione senza introdurre errori.

In seguito a svariati test di posizionamento della mano mirati alla “copertura” della stessa con il minor numero di viste, `e emerso che cinque o al massimo sei vi-ste con il polso ruotato di circa 45°e con le dita aperte sono sufficienti a ricostruire una mesh di discreta qualit`a. Entrando nel dettaglio, due viste coprono il palmo e il dorso della mano, una copre la parte superiore del pollice e parte della pelle delle dita non coperta dalle due viste precedenti, mentre le ultime due sono le pi`u

3.1 RICOSTRUZIONE DELLA MANO

delicate in quanto coprono la punta delle dita e sono determinanti nel raccordo della vista del palmo con quella del dorso. L’angolo delle viste “di raccordo” non `e fissato, ma `e compreso tra i 60° e i 90° per la prima e tra i 90° e i 120° per la seconda. Eventualmente, un’ulteriore sesta vista, pu`o servire a coprire la parte inferiore del mignolo e del palmo, ma in genere essa non `e necessaria. La Figura

3.6 riassume graficamente quanto appena detto.

90°

60°

120° 180°

Figura 3.6: Posizioni del laser scanner scelte per l’acquisizione delle viste parziali.

Una singola scansione di una vista parziale a livelli di grigio in modalit`a wide con la minima risoluzione richiede meno di un minuto per essere portata a termine, mentre l’acquisizione completa richiede meno di dieci minuti. Una parte consi-derevole del tempo `e quella richiesta dall’operatore per impostare manualmente l’angolo della vista agendo sulla testa rotante. Il tempo pu`o essere ulteriormente ridotto operando in coppia: un operatore si occupa delle acquisizioni, mentre un altro riposiziona prontamente lo scanner al termine di ognuna di esse. Non si esclude che, in futuro, la testa venga motorizzata per accelerare il posizionamen-to.

A termine della fase di acquisizione, i dati a disposizione nel software sono una sequenza di mesh incomplete con texture a livelli di grigio, ognuna riferita a una vista parziale della mano. Affinch´e i marker siano visibili, `e necessario che il loro colore sia scuro e possibilmente non rosso. Il blu `e adeguato allo scopo. Prima di passare alla fase successiva, vale a dire il pre-allineamento delle varie viste, l’o-peratore deve esaminarle assicurandosi che, almeno visibilmente, la mano non si sia mossa sensibilmente durante l’acquisizione. Un segno di eccessivo movimento `e l’eventuale alone che si nota attorno alle dita.

In Figura3.7`e mostrato uno screenshot di parte dell’interfaccia di ScanStudio HD al termine della raccolta di tutte le viste necessarie.

Figura 3.7: Sequenza di viste parziali raccolte in Scan Studio.

Per completezza, si conclude la sezione corrente riportando in Figura 3.8 un esempio di foto scattate dallo scanner durante l’acquisizione della mano di un vo-lontario. Da esse saranno estratte le texture applicate automaticamente a ogni vi-sta parziale, come accennato in precedenza. La vivi-sta opzionale in questo esempio non si `e resa necessaria.

a) vista a 0° b) vista a circa 60° c) vista a circa 120°

d) vista a 180° e) vista a circa 30° di elevazione.

Figura 3.8: Esempio di foto scattate da NextEngine—prima dell’acquisizione di ogni vista parziale.

3.1 RICOSTRUZIONE DELLA MANO

3.1.4 Allineamento

Le viste ottenute al passo precedente non sono ancora pronte a essere fuse in un’unica mesh per due motivi:

1. le viste parziali contengono con alta probabilit`a anche porzioni della super-ficie del bracciolo o di altri oggetti della scena

2. le informazioni sugli angoli delle viste sono assenti

Il primo problema `e facilmente risolvibile grazie a un semplice tool per il crop offerto da ScanStudio, mentre il secondo problema deriva dal fatto di aver ruotato manualmente lo scanner attorno alla mano, al posto di averla fatta ruotare dalla base rotante: dal punto di vista del software d’acquisizione, infatti, n´e lo scanner n´e l’oggetto in esame si sono mossi. Se, idealmente si posizionasse ogni mesh parziale nello stesso world space, le viste parziali sarebbero sovrapposte e non ricostruirebbero, cos`ı, il profilo della mano voluto. Tale affermazione `e verificabile importando le viste parziali non allineate in MeshLab, come mostrato in Figura

3.9.

Figura 3.9: Sequenza di viste parziali raccolte in ScanStudio HD.

Per ovviare al secondo problema, `e necessario reintrodurre le informazioni sugli angoli, e a dire il vero anche sulle posizioni3, tramite una procedura di allineamento da effettuare tramite un tool interno a ScanStudio, bench´e non dia buoni risultati. Il motivo `e che il tool analogo offerto da MeshLab, align, pur restituendo risultati migliori, non conserva le texture; di conseguenza, i marker non sono visibili nel tool di MeshLab in quanto appartenenti a texture, e non possono essere quindi usati come supporto all’allineamento. L’allineamento senza

3Difficilmente, infatti, la mano `e posizionata in corrispondenza dell’esatto centro di rotazione della testa fotografica, ergo le viste potrebbero avere range diversi di profondit`a.

punti di riferimento `e un’operazione ardua e soggetta a errori, pertanto `e stata evitata.

L’idea adottata `e effettuare un pre-allineamento manuale tra coppie di viste in ScanStudio, non necessariamente accurato, seguito da un raffinamento ad alta precisione in Meshlab. Il preallineamento `e condotto scegliendo di volta in volta un numero limitato di marker per segnalare alcune corrispondenze, e al termine di questa fase il risultato `e la registrazione globale delle varie viste, cio`e, per ogni vista l’algoritmo estrae la matrice di rototraslazione che minimizzi l’errore di allineamento. Tale errore varia sensibilmente da circa 2.54mm a circa 0.03mm a seconda della qualit`a dell’acquisizione. La procedura richiede molto tempo ed `e inevitabile anche a causa dell’indisponibilit`a di tool efficaci in grado di registrare globalmente le varie viste, nonostante letteratura esistano alcuni metodi come [11]. In Figura 3.10 `e mostrato un esempio di allineamento di due viste parziali in ScanStudio.

a) prima dell’allineamento

b) dopo l’allineamento

Figura 3.10: Esempio di pre-allineamento di due viste parziali in ScanStudio HD.

Importando, ora, le viste pre-allineate in MeshLab per le successive elabora-zioni, ci`o che appare sullo schermo `e una mesh incompleta ma con le fattezze della mano reale. A dire il vero, se la mano si `e mossa eccessivamente in fase d’acquisizione, `e probabile che siano presenti in alcune viste diversi artefatti, per esempio un pezzo di dito piegato che fuoriesce dal profilo corretto del dito o un

3.1 RICOSTRUZIONE DELLA MANO

dito non allineato. In Figura 3.11 `e mostrato un tipico artefatto reso evidente al termine del pre-allineamento.

Figura 3.11: Viste pre-allineate e importate in Meshlab. L’artefatto `e evidenziato in rosso.

In questi casi, spesso `e sufficiente individuare la vista che contiene l’artefatto e, se possibile (in genere quando pi`u viste coprono la stessa area), rimuoverlo tramite i tool di MeshLab. Se il numero di artefatti `e eccessivo e non `e possibile rimuoverli senza corrompere eccessivamente il profilo della mano, `e necessario ripetere l’acquisizione.

Dopo questa prima “ripulitura”, il pre-allineamento eseguito in ScanStudio viene rifinito tramite un tool di allineamento automatico di Meshlab. La registrazione globale stavolta `e possibile in quanto il tool non richiede la specifica manuale di corrispondenze, a patto che le varie viste siano quasi del tutto allineate. Il risultato dell’allineamento `e riportato in Figura 3.12.

3.1 RICOSTRUZIONE DELLA MANO

3.1.5 Fusione e remeshing

La mesh risultante nelle fasi precedenti e illustrata in Figura 3.12 `e ancora com-posta di varie viste, bench´e allineate. Il passo preliminare della fase corrente consiste nel far collassare in Meshlab tutte le viste, ognuna associata a un livello, in un unico livello. Dopo la fusione, eseguita in meno di un secondo, ha senso parlare di mesh della mano, la quale presenta visivamente innumerevoli “buchi” di grande dimensione dovuti principalmente a quattro concause:

1. regioni non colpite dalla luce laser

2. regioni che hanno assorbito completamente la luce laser 3. regioni che hanno rifratto la luce laser

4. errori dell’algoritmo di triangolazione

Esistono in letteratura due categorie di algoritmi di hole filling: gli algoritmi della prima categoria affrontano il problema ricercando una patch con curvatura compatibile a quella della superficie che circonda il buco da colmare; si cita il metodo di Liepa[18]. Gli algoritmi della seconda categoria, invece, adottano un approccio volumetrico campionando il volume in cui `e immersa la mesh in voxel e determinando quali campioni appartengano alla superficie e quali allo spazio vuoto. Il maggiore esponente della seconda categoria `e il metodo di [22] che, tra l’altro, impiega l’algoritmo Marching Cubes[19] per estrarre dai voxel la mesh completata. Gli autori dell’approccio hanno fornito un software che lo implementa, ma ai fini del progetto esso `e stato abbandonato a causa degli innumerevoli artefatti introdotti nella ricostruzione. Entrambi gli approcci hanno in comune il fatto di poter chiudere solo buchi di dimensioni esigue, mentre non sono in grado di colmare le lacune dovute a serie mancanze di dati, come per la mano in esame. Normalmente, l’unica soluzione in questi casi `e introdurre ridondanza nei dati aumentando il numero di viste parziali, allungando, per`o, il tempo di acquisizione. Inoltre, data la complessit`a della mano, un maggior numero di viste non assicura sempre una maggiore copertura della stessa.

In seguito a svariati tentativi fallimentari di hole filling in Meshlab, il problema `e stato risolto brillantemente all’interno dello stesso programma ricostruendo4 la mesh tramite l’algoritmo di ricostruzione secondo Poisson[15]. Il metodo, per`o, sembra funzionare correttamente solo in Windows 7 e richiede diversi secondi anche impiegando un computer con prestazioni elevate. In Figura3.13`e mostrato

un esempio di mesh ricostruita a partire dalle viste riportate in Figura 3.12; i valori delle componenti cromatiche scelte per lo shading sono state prelevate da una foto.

3.1 RICOSTRUZIONE DELLA MANO

3.1.6 Semplificazione della mesh

La mesh restituita dal passo precedente `e pressoch´e completa. L’elevata accura-tezza di NextEngine5 comporta un alto livello di dettaglio nella superficie rico-struita, ma al contempo aumenta vertiginosamente la taglia della mesh, vale a dire la dimensioni delle strutture dati contenenti le coordinate dei vertici e i loro raggruppamenti in facce che la descrivono. Una taglia elevata peggiora dram-maticamente le prestazioni degli algoritmi che elaborano i dati sopracitati ma, a volte, `e pi`u che accettabile una riduzione del livello di dettaglio a fronte di un sensibile aumento delle prestazioni. La mano rappresentata in Figura 3.13, per esempio, `e descritta da circa 105 facce e 5 · 104 vertici per una dimensione su disco poco superiore a 3MB.

La riduzione della dimensionalit`a, o equivalentemente la semplificazione della mesh, `e condotta in Meshlab attraverso un filtro decimatore che implementa l’algoritmo Quadric-based Surface Decimation[13]. La decimazione `e ottimale se-condo una metrica definita dagli inventori del metodo. In Figura3.14`e riportata la mesh della Figura 3.13 in seguito a una riduzione del 90% sia del numero di facce sia del numero dei vertici, e si nota che la forma della mano e la curvatura della superficie sono state preservate.

La scelta di ridurre la dimensionalit`a del 90% non `e casuale, ma il valore `e stato stimato tenendo conto dei valori dei dati di targa del sensore, in particolar modo la lunghezza focale e la risoluzione, e della specifica del modello pinhole in Figura 1.7. Alcuni semplici calcoli restituiscono l’ordine di grandezza del minor numero di poligoni che la mesh del modello dovrebbe avere affinch´e il livello di dettaglio non sia eccessivo rispetto alla bassa risoluzione del sensore. Secondo i dati di targa, il lato di un pixel del sensore `e lungo 40 · 10−6m6, e dalle formule u = dXZ e v = dYZ si ricava che un segmento di lunghezza luv giacente sul piano immagine e proiettato all’indietro in R3 ha lunghezza pari a Lxyz = Zluv

d . Dal-l’ultima formula si evince che la risoluzione diminuisce in maniera proporzionale all’aumentare della distanza dall’obiettivo, o equivalentemente la distanza mini-ma tra due punti affinch´e questi non siano proiettati sullo stesso pixel aumenta all’aumentare della profondit`a. Estendendo il concetto all’area di un pixel, l’a-rea minima di una faccia affinch´e quest’ultima non venga proiettata assieme alle facce adiacenti su uno stesso pixel `e proporzionale del quadrato della distanza: Axyz = (Zluvd )2

2 = Z2 l2uv

2d27. Di conseguenza, assumendo che la mano da tracciare

5Si ricorda essere inferiore agli 0.4mm in modalit`a wide.

6Nel caso ideale, infatti, i pixel sono quadrati, cosa non sempre vera nella realt`a.

Figura 3.14: Esempio di decimazione della mesh in Figura3.13tramite l’algoritmo[13].

non disti meno di 1m dall’obiettivo, come negli esperimenti condotti nel progetto, si ha banalmente che Axyzmin = luv2

2d2 ≈ 4.5mm2 sostituendo i valori dei dati di targa. In Maya l’area della mesh in Figura 3.13 calcolata ha un valore di circa 49000mm2 che, diviso per l’area minima di una faccia stimata, restituisce una stima di poco meno di 11000 facce. Dato che la mesh di partenza ha pi`u di 105

facce, `e provato che la riduzione pu`o spingersi fino al 90% senza una perdita vi-sibile di dettaglio.

Come ulteriore conferma, la Figura 3.15 contiene un’immagine data dalla diffe-renza della depthmap sintetica generata dal modello con la mesh non semplificata con la depthmap generata dallo stesso modello con mesh semplificata. La scelta della scala di colore e di impostare la profondit`a dei pixel dello sfondo a 0 al posto di 5m `e stata operata solo per evidenziare le profondit`a dei pixel della mano.

3.2 RICOSTRUZIONE DELLA MANO

a) modello originale b) modello semplificato

c) differenza tra i modelli

Figura 3.15: Valutazione della semplificazione

Applicando opportuni filtri in Meshlab `e possibile eliminare alcuni eventuali artefatti introdotti in fase di ricostruzione o semplificazione, o che comunque non sono stati rimossi durante le fasi precedenti. Tra i difetti principali si annoverano:

ˆ vertici isolati dalla superficie (non manifold) ˆ vertici vicini8

ˆ vertici ripetuti

ˆ facce orientate in direzione opposta rispetto a quella delle facce adiacenti ˆ facce ripetute

ˆ facce ad area nulla

Infine, `e possibile orientare e posizionare la mesh nella maniera che si ritiene opportuna. In questo progetto, si `e scelto roto-traslare la mesh affinch´e il ba-ricentro (calcolato automaticamente dal programma) coincida con il sistema di riferimento globale e il palmo sia orientato in direzione del semiasse Z positivo. L’ultimo passo consiste nell’esportazione della mesh completa e orientata in un file per le successive elaborazioni.

Documenti correlati