Hand tracking con Kinect e rendering per dispositivi aptici indossabili



Documenti analoghi
ESTRAZIONE DI DATI 3D DA IMMAGINI DIGITALI. (Visione 3D)

Librerie digitali. Video. Gestione di video. Caratteristiche dei video. Video. Metadati associati ai video. Metadati associati ai video

ESAME DI STATO DI LICEO SCIENTIFICO CORSO SPERIMENTALE P.N.I. 2004

Capitolo 13: L offerta dell impresa e il surplus del produttore

Processo di rendering

Un prototipo di 3D scanner

LE FUNZIONI A DUE VARIABILI

4. Proiezioni del piano e dello spazio

Usando il pendolo reversibile di Kater

Raccomandazione del Parlamento europeo 18/12/2006 CLASSE PRIMA COMPETENZE ABILITÀ CONOSCENZE. Operare con i numeri

GIROSCOPIO. Scopo dell esperienza: Teoria fisica. Verificare la relazione: ω p = bmg/iω

ISTITUTO COMPRENSIVO MONTEGROTTO TERME SCUOLA PRIMARIA DISCIPLINA: MATEMATICA - CLASSE PRIMA OBIETTIVI DI APPRENDIMENTO

Anno 4 Grafico di funzione

Il concetto di valore medio in generale

CONI, CILINDRI, SUPERFICI DI ROTAZIONE

Esempi di funzione. Scheda Tre

La distribuzione Normale. La distribuzione Normale

INTEGRALI DEFINITI. Tale superficie viene detta trapezoide e la misura della sua area si ottiene utilizzando il calcolo di un integrale definito.

Esponenziali elogaritmi

Introduzione all analisi dei segnali digitali.

Sistema automatico di acquisizione e modellazione 3D a basso costo

Appunti sulla Macchina di Turing. Macchina di Turing

La spirale iperbolica: Fu descritta per la prima volta da Pierre Varignon ( ). L equazione, espressa in coordinate polari, è del tipo:

CONTINUITÀ E DERIVABILITÀ Esercizi proposti. 1. Determinare lim M(sinx) (M(t) denota la mantissa di t)

Complementi di Analisi per Informatica *** Capitolo 2. Numeri Complessi. e Circuiti Elettrici. a Corrente Alternata. Sergio Benenti 7 settembre 2013

Capitolo V : Il colore nelle immagini digitali

Database. Si ringrazia Marco Bertini per le slides

Per studio di funzione intendiamo un insieme di procedure che hanno lo scopo di analizzare le proprietà di una funzione f ( x) R R

Proiezioni Grafica 3d

3DE Modeling Color. E il modulo che si occupa della costruzione di modelli 3D con tessitura a colori.

Il campionamento. La digitalizzazione. Teoria e pratica. La rappresentazione digitale delle immagini. La rappresentazione digitale delle immagini

GEOMETRIA DELLE MASSE

Sistemi Informativi Territoriali. Map Algebra

Teoria in sintesi 10. Attività di sportello 1, 24 - Attività di sportello 2, 24 - Verifica conclusiva, 25. Teoria in sintesi 26

Corso di Visione Artificiale. Stereopsi. Samuel Rota Bulò

Slide Cerbara parte1 5. Le distribuzioni teoriche

Plate Locator Riconoscimento Automatico di Targhe

Grandezze scalari e vettoriali

Il riduttore di focale utilizzato è il riduttore-correttore Celestron f/ 6.3.

Analisi e diagramma di Pareto

Sistema di ripresa con fotocamera digitale fissa Calibrazione

Trasformazioni Geometriche 1 Roberto Petroni, 2011

Basi di matematica per il corso di micro

~ Copyright Ripetizionando - All rights reserved ~ STUDIO DI FUNZIONE

TRAGUARDI PER LO SVILUPPO DELLE COMPETENZE AL TERMINE DELLA SCUOLA PRIMARIA

13. Campi vettoriali

Forze come grandezze vettoriali

2 Argomenti introduttivi e generali

PROGETTO ESCAVATORE VIRTUALE

bensì una tendenza a ruotare quando vengono applicate in punti diversi di un corpo


Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

DOMINIO E LIMITI. Esercizio 3 Studiare gli insiemi di livello della funzione f, nei seguenti casi: 1) f(x,y) = y2 x 2 + y 2.

Trasformazioni 2D. Grande differenza rispetto alla grafica raster!

Correzione di immagini da camera Vexcel UltraCam utilizzando Geomatica OrthoEngine

La Visione Artificiale. La vis ione delle macchine La vis ione umana Acquis izione di immag ine

Dimensione di uno Spazio vettoriale

Corso di Scienza Economica (Economia Politica) prof. G. Di Bartolomeo

FUNZIONE REALE DI UNA VARIABILE

UNIVERSITÀ DEGLI STUDI DI SIENA

CURVE DI LIVELLO. Per avere informazioni sull andamento di una funzione f : D IR n IR può essere utile considerare i suoi insiemi di livello.

VALORE DELLE MERCI SEQUESTRATE

Le funzioni continue. A. Pisani Liceo Classico Dante Alighieri A.S A. Pisani, appunti di Matematica 1

CONTINUITÀ E DERIVABILITÀ Esercizi risolti

Domande a scelta multipla 1

a) Il campo di esistenza di f(x) è dato da 2x 0, ovvero x 0. Il grafico di f(x) è quello di una iperbole -1 1

RETTE, PIANI, SFERE, CIRCONFERENZE

Test, domande e problemi di Robotica industriale

Generazione Automatica di Asserzioni da Modelli di Specifica

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Lezione 8. La macchina universale

Capitolo II. La forma del valore. 7. La duplice forma in cui si presenta la merce: naturale e di valore.

Comando STAMPA. Attiva la finestra di dialogo nella quale vengono impostati i parametri per ottenere tavole stampate:

Progettazione del robot

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

A.S CLASSE PRIMA SCUOLA PRIMARIA D ISTITUTO COMPETENZA CHIAVE EUROPEA DISCIPLINA

1. Distribuzioni campionarie

PointCloud 7.0 Anno 2011

Misure di base su una carta. Calcoli di distanze

SymCAD/C.A.T.S. modulo Canali Schema

e-dva - eni-depth Velocity Analysis

Tutorial 3DRoom. 3DRoom

2 FUNZIONI REALI DI VARIABILE REALE

LA GRAFICA E LA GEOMETRIA OPERATIVA

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Un ripasso di aritmetica: Rappresentazione binaria - operazioni. riporti

REGOLAMENTO (UE) N. 1235/2011 DELLA COMMISSIONE

Matematica e Statistica

4 3 4 = 4 x x x 10 0 aaa

ESAME DI STATO DI LICEO SCIENTIFICO CORSO DI ORDINAMENTO 2004

LA MISURAZIONE DEL CARATTERE

Compilatore risorse display grafico LCD serie IEC-line

. Si determina quindi quale distanza viene percorsa lungo l asse y in questo intervallo di tempo: h = v 0y ( d

Funzioni in C. Violetta Lonati

Teoria dei Giochi. Anna Torre

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

Il database management system Access

Il controllo della visualizzazione

Dispensa di Informatica I.1

UNIVERSITÀ DEGLI STUDI DI PADOVA Facoltà di Ingegneria sede di Vicenza A.A. 2007/08

Transcript:

Università degli studi di Siena Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Hand tracking con Kinect e rendering per dispositivi aptici indossabili Relatore Prof. Domenico Prattichizzo Candidato Valentino Frati Anno Accademico 2010/2011

2

Indice 1 Introduzione 7 2 Kinect: analisi dell hardware e calibrazione 13 2.1 L hardware di Kinect........................ 13 2.2 Il calcolo dei valori di disparità attraverso la structured light.. 15 2.2.1 Il modello della camera e la geometria epipolare..... 16 2.2.2 Come Kinect ottiene le corrispondenze di punti..... 22 2.3 I parametri di calibrazione di Kinect............... 24 3 L algoritmo per il tracking della mano 29 3.1 La procedura dell algoritmo di tracking.............. 29 3.1.1 Elaborazione dell immagine di profondità......... 30 3.1.2 Computazione del bounding box della mano....... 31 3.1.3 Dal contorno 2D della mano ai punti fondamentali e alla posizione dei polpastrelli.................. 34 3.1.4 Filtraggio.......................... 44 3.2 Limitazioni dell algoritmo proposto................ 45 4 Applicazione: rendering e force feedback 49 4.1 L animazione della mano...................... 49 4.2 Il feedback aptico ed i risultati................... 55 5 Conclusioni e sviluppi futuri 61 3

4

Elenco delle figure 1.1 Esempi di tecniche per il rilevamento della posa della mano... 10 1.2 Il gravity grabber sviluppato da Kouta Minamizawa....... 11 2.1 Kinect con frame di riferimento.................. 14 2.2 Modello pinhole della camera................... 16 2.3 Rappresentazione delle linee epipolari............... 19 2.4 Sistema di riferimento per due camere parallele......... 21 2.5 Proiezione di punti su piani immagine............... 22 2.6 Sistema composto da un proiettore ed una camera allineati... 23 2.7 Pattern proiettato da Kinect.................... 24 3.1 Immagine di profondità con bounding box............ 32 3.2 Posizione dell avambraccio rispetto alla mano.......... 33 3.3 Esempio di risultato dopo aver applicato la trasformata di distanza 34 3.4 Rappresentazione grafica dei Convexity Defects......... 36 3.5 Dettaglio della finestra di tracking................. 37 3.6 Punti e vettori fondamentali considerati nell algoritmo di tracking 43 3.7 Errore medio con filtro di Kalman................. 45 3.8 Errore medio rilevamento centro di massa............ 46 3.9 Errore medio angolo di rotazione asse Z.............. 47 3.10 Errore medio angolo di rotazione assi X e Y........... 48 4.1 Dispositivi aptici Omega...................... 50 4.2 Sistema di rendering aptico basato su Kinect........... 54 5

4.3 Errore medio angolo di rotazione indice e pollice......... 56 4.4 Esempio di simulazione di presa di un oggetto cubico...... 57 4.5 Traiettoria dell oggetto durante la simulazione di presa..... 58 4.6 Forza di contatto resa per il pollice................ 58 4.7 Forza di contatto resa per il dito indice.............. 59 4.8 Tempo di esecuzione rilevato per il processo........... 60 6

Capitolo 1 Introduzione Due contesti che costituiscono un attiva area di ricerca rappresentano due settori di relativa integrazione. Quello dell hand tracking, quindi del rilevamento della posizione, della postura e dei movimenti della mano umana, e lo sviluppo di dispositivi aptici in grado di rendere all utilizzatore le forze dell ambiente virtuale. L informazione sul movimento umano è necessaria per i dispositivi aptici, così come la loro presenza fornisce quel livello di realismo che rende l interazione uomo-realtà virtuale completa. Da un lato, vengono ricercate le tecniche migliori, più accurate, meno onerose in termini economici, dall altro i dispositivi aptici indossabili soffrono di una carenza d informazione in quanto studiati per essere di piccole dimensioni, non ingombranti e applicabili direttamente dove la forza deve essere percepita nella realtà: ad esempio sulle dita, considerando la mano umana. L introduzione da parte di Microsoft di un nuovo sensore denominato Kinect [1], dotato di camere per il rilevamento della profondità e del colore degli oggetti, può inserirsi in questo contesto, per produrre le informazioni necessarie alla resa tattile fornita dagli attuatori. Lo studio del dispositivo può da un lato rappresentare una fonte d informazione accurata, poco costosa e poco pesante dal punto di vista computazionale così da poter essere utilizzata in larga scala, dall altro far progredire in modo ancora più rapido la ricerca sugli attuatori indossabili in quanto una loro introduzione nello stesso contesto permette la percezione dell oggetto virtuale come reale, coinvolgendo i tre sensi principali quali la vista, l udito ed il tatto. 7

Esistono diversi approcci per il rilevamento della posizione e della configurazione della mano nello spazio 3D: la ricerca di punti fondamentali e corrispondenze può avvenire tramite marcatori, patterns colorati, guanti provvisti di sensori o direttamente sulla mano nuda. Di seguito vengono brevemente introdotte le tecniche fondamentali: alcune soluzioni sono rappresentate in Fig. 1.1. Motion-capture basata su marcatori: questo sistema è oggetto di ricerca in diversi campi applicativi, ma richiede marcatori retroriflettenti o LED [2] intrusivi oltre che complessi e laboriosi setup delle camere. Esso è però un tipo di metodo che garantisce un elevato livello di accuratezza e precisione data l effettiva identificabilità dei punti di riferimento. Si tratta inoltre di un tipo di soluzione che può rivelarsi costosa e richiedere camere multiple. Tracking della mano nuda: è un tipo di tracking anch esso rappresentante un attiva area di ricerca. Il rilevamento dei contorni e delle silhouettes sono i più comuni metodi utilizzati per identificare la posa della mano. Effettuata con l utilizzo di camere, può soffrire del cambiamento delle condizioni luminose dell ambiente e necessitare di algoritmi complessi a livello computazionale: essi infatti non si prestano per applicazioni real-time, e ciò ne può precludere l utilizzo per applicazioni di controllo in ambienti virtuali. Soluzioni che prediligono velocità di computazione con la semplificazione degli algoritmi perdono a livello di risoluzione e precisione. In questo modo ad esempio è possibile tracciare la posizione approssimata e l orientazione della mano oltre a due o tre gradi di libertà aggiuntivi per la posizione. Applicazioni per il riconoscimento dei gesti della mano sono comunque state proposte nel corso degli anni, anche con buoni livelli di risultati [3] [4]. Il lavoro presentato nei capitoli successivi si propone di percorrere questo tipo di direzione, cercando di superare le limitazioni imposte sia dall hardware che dagli algoritmi utilizzati. 8

Stima della posa data-driven: è un tipo di tecnica che si basa su una ricerca in database, che può presentare problemi dal punto di vista del livello e complessità di tale ricerca. Sono stati introdotti sistemi che effettuano ricerche in un database di pose generate a livello software [5] per la stima della posa del corpo, tecniche di approssimazione nearest neighbor [6] per la stima della posa della mano o database di silhouettes. Il pattern distintivo deve essere il può possibile privo di ambiguità per permettere la corretta interpretazione della posa, migliorare l accuratezza e la velocità di esecuzione. Hand-tracking con guanti: tali sistemi, come il P5 Data Glove e il CyberGlove di Immersion presentano un elevata accuratezza nella cattura dell input 3D e possono essere utilizzati in contesti real-time. Tuttavia si tratta si soluzioni molto costose ed ingombranti, adatte soltanto ad un area di ricerca e non proponibili per l uso di largo consumo. Essi si basano su esoscheletri o numerosi sensori montanti sul guanto, che possono essere inoltre costrittivi per i movimenti. Hand-tracking con marcatori colorati: si tratta di un tipo di tracking basato sull identificazione di determinati punti fondamentali tramite l analisi del colore. Lavori precedenti in tale ambito hanno dimostrato l utilizzo di questa tecnica in domini limitati o per brevi sequenze di movimento [7]. Ad esempio vengono associati ad i giunti delle dita anelli colorati in modo da permetterne l identificazione ed ottenere la posa della mano tramite cinematica inversa. Tale tecnica può essere utilizzata assieme all approccio data-driven per ricercare la posa della mano che meglio combacia con l immagine rilevata. Uno dei primi esperimenti di uso di Kinect nel contesto aptico è stato effettuato in una demo prodotta dal Laboratorio di Biorobotica dell Università di Washington [8]. Essa consiste nell usare Kinect per costruire un immagine di profondità della scena 3D con oggetti che possono essere toccati virtualmente 9

Fig. 1.1: Tre esempi di come è possibile rilevare la posizione della mano: tramite guanti provvisti di sensori (sinistra), tramite marcatori colorati (destra) o tramite marcatori posti sui giunti (in basso) a distanza utilizzando dispositivi aptici come il PHANTOM o altri dispositivi prodotti dallo stesso gruppo di ricerca. Si tratta di un sistema ad alto costo computazionale, in quanto l intera scena deve essere aggiornata tramite calcoli proiettivi, e l aggiornamento del movimento risulta infatti ad un basso framerate, anche se nessun avatar rappresentativo del dispositivo aptico viene per esempio inserito all interno della scena. L approccio proposto dal lavoro descritto nei capitoli successivi è diverso. Quello che si è voluto studiare è l utilizzo della tecnologia di Kinect non per costruire una mappa digitale dell ambiente ma come un componente connesso al dispositivo aptico stesso. In particolare, si vuole usare il sensore di Kinect per identificare la posizione della mano nello spazio e poter così controllare l avatar ad essa associato nell ambiente virtuale. In altre parole, non ci foca- 10

Fig. 1.2: Il gravity grabber sviluppato da Kouta Minamizawa lizziamo sull oggetto ma sull organo coinvolto nell esperienza tattile: la mano umana. L obiettivo principale di questo studio è sviluppare un sistema integrato di dispositivo aptico indossabile, che possiamo considerare inoltre una promettente area di ricerca in aptica. Per citare un esempio di dispositivo aptico indossabile, si può considerare il gravity grabber sviluppato da Kouta Minamizawa e descritto in [9]: esso è un dispositivo indossabile provvisto di due motori (Fig. 1.2) per il feedback di forza al punto di contatto dei polpastrelli. La differenza principale di questo tipo di dispositivo rispetto ai più sofisticati e complessi esoscheletri [10] è che il feedback cinestetico è praticamente inesistente ed il feedback di forza è principalmente tattile [11]. L altro svantaggio è che la parte sensibile della mano umana o del braccio è scarsa. Cercare soluzioni per risolvere quindi il problema dell insufficienza di precisione, accuratezza e livello di dati di rilevamento nel campo del wearable haptics è l obiettivo proposto attraverso la tecnologia fornita da Kinect. Rilevare o tracciare la mano umana è fondamentale in aptica per localizzare l avatar nell ambiente virtuale e per implementare correttamente gli algoritmi di resa delle forze nei dispositivi aptici ad impedenza come quelli utilizzati nel lavoro. Come detto in precedenza, diverse soluzioni sono possibili per ovviare a questo problema, come l uso di guanti sensorizzati, marcatori [12] [13] o camere [14]. Comunque, tutti questi tipi di approccio possono risultare da una parte poveri in termini di performance, troppo complessi per l utilizzo in tempo reale 11

o troppo costosi. Inoltre, la maggior parte delle soluzioni fa uso di dispositivi addizionali che devono essere indossati dall utilizzatore, facendo diventare il sistema ingombrante, talvolta limitativo, ma soprattutto inadatto ad un integrazione con attuatori di piccole dimensioni quali i dispositivi indossabili citati in precedenza. Quello che verrà presentato e che è stato oggetto del lavoro è quindi uno dei primi tentativi di utilizzo di Kinect come sensore per i dispositivi aptici indossabili. E stato sviluppato un algoritmo basato su euristiche per il tracking della mano e la successiva integrazione con l avatar virtuale, così da permetterne l animazione ed il controllo all interno della scena tridimensionale, l interazione con la fisica dell ambiente riprodotto e gli algoritmi di f orce rendering, con particolare attenzione rivolta al realismo della scena e all effettiva utilizzazione in un contesto real-time. L esempio su cui ci si è concentrati è un task di presa di oggetti attraverso due punti di contatto: è ovviamente conseguenziale che i vantaggi dei dispositivi aptici indossabili sono anche più evidenti quanto un interazione a multi punto di contatto è considerata [15]. Nel Capitolo 2 sarà descritta la tecnologia hardware di Kinect, come vengono acquisiti i dati ed i parametri necessari per la calibrazione e la conversione tra gli spazi. Nel Capitolo 3 sarà descritto l algoritmo implementato, attraverso le parti fondamentali che lo compongono e le principali funzioni utilizzate, considerandone infine le limitazioni. Nel Capitolo 4 sarà descritta l applicazione dei dati ottenuti da tale algoritmo per il controllo di un avatar della mano umana all interno dello spazio virtuale con i risultati ottenuti in un esperimento effettuato di presa e spostamento di un oggetto con feedback di forza attraverso attuatori montati sulle dita. 12

Capitolo 2 Kinect: analisi dell hardware e calibrazione In questa sezione verrà brevemente introdotto l hardware di Kinect, sarà discusso il funzionamento di tale tecnologia in riferimento al tipo di dati che verranno utilizzati (dati di profondità attraverso la disparità e dati nello spazio attraverso le coordinate del piano immagine) ed infine verranno riportate e commentate le funzioni di calibrazione ed il loro utilizzo. 2.1 L hardware di Kinect Kinect [1] è un nuovo tipo di tecnologia di game controller introdotta da Microsoft nel Novembre 2010. Sin dal suo lancio è stato evidente che il dispositivo avrebbe trasformato non solo il settore dei giochi da console a cui esso è dedicato e che Microsoft ha inizialmente inteso come unico ambito applicativo, ma che avrebbe potuto trovare applicazione in molti altri possibili settori, relativi alla robotica, alla realtà virtuale o al controllo gestuale, grazie alla sua abilità di tracciamento dei movimenti e di riconoscimento vocale, oltre ad essere in grado di identificare volti, tutto senza la necessità di alcun altro dispositivo addizionale [16]. Kinect (Fig. 2.1) interpreta scene 3D grazie ad una struttura basata su una proiezione continua ad infrarossi di pattern pseudo-casuali di punti. Esso ha una conformazione da web-cam di ridotte dimensioni e permette all utilizzatore di controllare ed interagire con un mondo virtuale attraverso 13

un interfaccia naturale, con l utilizzo di gesti, movimenti, comandi vocali o presentando immagini od oggetti. Il dispositivo include una camera a colori RGB, un sensore di profondità ed un microfono stereo. Tale dispositivo consente un Fig. 2.1: Il dispositivo Kinect prodotto da Microsoft con il frame di riferimento della camera. L asse z è uscente dalla camera completo rilevamento del moto del corpo, e riconoscimento facciale e gestuale. Il sensore di profondità consiste in un proiettore laser ad infrarossi combinato con un sensore monocromatico CMOS, e consente a Kinect di processare scene tridimensionali in ogni condizione di luce ambientale [1]. Questa tecnologia è stata prodotta da Israeli PrimeSense [17]. Una variante della ricostruzione 3D basata su immagini, descritta nel paragrafo successivo, viene utilizzata per ottenere la profondità del punto osservato nella scena 3D [18]. Il range di sensibilità del sensore di profondità è aggiustabile a seconda dello scopo di utilizzo, ed il software di Kinect è capace di calibrare automaticamente il sensore basandosi su specifiche necessità o sull ambiente di utilizzo. Kinect consente di riconoscere simultaneamente fino a sei persone, incluse due in movimento per un analisi del moto con un estrazione di features di 20 giunti per giocatore attivo. L unità centrale del sensore era stata originariamente programmata in modo da avere al proprio interno un microprocessore che potesse occuparsi di operazioni quali la mappatura dello scheletro, ma l idea è stata poi abbando- 14

nata: infatti la richiesta di risorse della cpu da parte di Kinect è minimale. In questo modo è possibile ottenere dal dispositivo una vasta e diversificata gamma di informazioni e dati che coprono l intero range di necessità per lo scopo di tracking di persone od oggetti. Attraverso studi sperimentali, è stato determinato che il sensore di Kinect processa il flusso video ad un frame rate di 30 Hz. Lo stream RGB usa una risoluzione VGA ad 8 bit di profondità con dimensione di 640x480 pixels con un filtro di Bayer per il colore, mentre il sensore monocromatico di profondità genera un flusso dati a risoluzione VGA (640 x 480 pixels) con 11 bit di profondità, quindi con 2048 livelli di sensitività. Il sensore di Kinect ha un range di utilizzo da un minimo di 0.4 ad un massimo di 4.0 metri. Esso ha un campo di vista angolare di 57 orizzontalmente e 43 verticalmente, mentre il fulcro motorizzato è capace di uno spostamento di 27 verso l alto o verso il basso, controllabile via software. Il campo orizzontale ad una distanza di 0.8 m è all incirca 87 cm, mentre quello verticale circa 63 cm, risultando quindi una risoluzione di 1.3 mm per pixel. La risoluzione spaziale x/y a 2 metri di distanza dal sensore è di 3 mm, mentre la risoluzione di profondità z sempre a due metri di distanza è di 1 cm. 2.2 Il calcolo dei valori di disparità attraverso la structured light Per l utilizzo all interno di un algoritmo di tracking, è importante capire come lavora l hardware sensoriale di Kinect e quindi il tipo di dati che è necessario gestire ed interpretare. Per fare ciò, è necessario prima introdurre brevemente due concetti: le definizioni fondamentali del modello della camera [19] e alcune nozioni basilari sulla geometria epipolare, con riferimento al caso preso in esame di due camere calibrate poste parallelamente di fronte alla scena. In seguito tali concetti saranno applicati all approccio di Kinect per ottenere la struttura 3D della scena. 15

2.2.1 Il modello della camera e la geometria epipolare Il modello della telecamera segue quello detto pinhole, nome che deriva dal fatto che lo schema di tale modello è analogo alla proiezione di un immagine all interno di un ambiente attraverso un piccolo foro, in cui l immagine si propaga attraverso lo spazio lungo delle linee immaginarie dette linee ottiche che, per proiezione prospettica, si incontrano in un unico punto chiamato centro ottico. Tale schema è mostrato in Fig. 2.2, in cui è possibile distinguere un piano immagine, o piano retina, indicato con R, un piano f ocale contenente il centro ottico ed indicato con F, ed il centro ottico stesso C. La retta passante per C ed ortogonale ad R viene chiamata asse ottico mentre il suo punto di intersezione con il piano immagine punto principale. Il sistema di riferimento per lo spazio tridimensionale, detto sistema standard x, y, z viene fissato come centrato in C e con l asse z coincidente con l asse ottico. Vengono indicati con X = [x, y, z] T le coordinate di un generico punto nello spazio tridimensionale e con x = [u, v] T le coordinate della proiezione di X su R. Fig. 2.2: Il modello pinhole della telecamera Considerando quindi la proporzionalità dovuta alla proiezione prospettica, 16

possiamo scrivere (valori in metri) da cui si ottengono le due equazioni x : u = z : f y : v = z : f u = xf z v = yf z (2.1) in cui è stato assunto, senza perdere di generalità z = f, che è possibile scrivere come z = f. Si tratta comunque di una relazione tra le coordinate sul piano immagine e quelle nello spazio tridimensionale non lineare. Si utilizza quindi una forma matriciale omogenea per poterci ricondurre ad una relazione lineare. Ponendo quindi U h = u z e V h = v z, otteniamo la forma matriciale: U h V h S h = f 0 0 0 0 f 0 0 0 0 1 0 x y z 1 (2.2) Con S h 0 sempre tranne che in caso di punto appartenente al piano focale F, il che implicherebbe avere delle linee di proiezione verso l infinito. La relazione tra le coordinate sul piano immagine e quelle reali è espressa quindi dalla seguente equazione x h = P m X h (2.3) dove x h = [x, s] T e X h = [X, 1] T, mentre P m è l applicazione lineare o matrice di trasf ormazione prospettica della camera. In realtà il piano retina è fisicamente riconducibile al ccd sul quale l immagine arriva dopo aver attraversato l obiettivo della telecamera. Risulta quindi conveniente esprimere le coordinate 17

di x in pixel anziché metri. Per il piano R valgono quindi le seguenti relazioni: u new = k u u + u 0 = kuxf z + u 0 v new = k v v + v 0 = kvyf z + v 0 con [u 0, v 0 ] coordinate del punto principale e k u,k v numero di pixels per metro (pixel/m), rispettivamente per u e v. La matrice prospettica, dopo la scalatura ottenuta per i pixel, può essere riscritta come P p = fk u 0 u 0 0 fk v v 0 0 0 1 Infine, ponendo α u = fk u e α v = fk v otteniamo la matrice K detta matrice di calibrazione α u 0 u 0 K = 0 α v v 0 (2.4) 0 0 1 in cui α u e α v rappresentano la distanza focale espressa rispettivamente in pixel orizzontali e verticali. α u, α v, u 0 e v 0 vengono detti parametri intrinseci della camera. Si può infine notare che la matrice identità è in realtà la forma normalizzata della matrice K in cui la distanza f = 1 e u 0 = v 0 = 0 poiché il punto principale è allineato con il centro ottico. Quindi la matrice di proiezione della camera P può essere scritta come P = K[I 0] (2.5) Tale matrice viene utilizzata per le considerazioni della geometria epipolare, che verrà di seguito brevemente discussa [20], prendendo in esame il caso di una camera allineata ad un altra, come è stato implementato nell hardware di Kinect considerando il sistema formato da due camere calibrate. La geometria 18

epipolare descrive le relazioni ed i vincoli geometrici che legano due immagini 2D della stessa scena 3D catturata da due camere con posizione ed orientamento distinti: essa quindi permette la ricostruzione della scena tridimensionale a partire da due immagini stereoscopiche e quindi l acquisizione dei dati di profondità dei punti di interesse nello spazio. Per ogni punto nella prima immagine (prima camera) è quindi necessario determinare il punto corrispondente nella seconda immagine (seconda camera). Per ogni coppia di punti ottenuta, si determina poi il punto 3D tramite tecniche di triangolazione. Un punto in un immagine genera una linea epipolare nell altra, ed il punto corrispondente sulla seconda immagine giace su tale linea. La linea epipolare l è l immagine del raggio attraverso x, vettore di dimensione 3 proiezione sul piano immagine del punto nello spazio. L epipolo e è il punto di intersezione della linea congiungente i centri ottici delle due camere con il piano immagine: tale linea è detta linea di base. L epipolo è quindi l immagine del centro dell altra camera: e = PC, e = P C, con P e P matrici di proiezione per la prima e seconda camera rispettivamente. Siccome la posizione del punto nello spazio 3D X, vettore di dimensione 4, varia, il piano epipolare (formato dai vertici X, C, C ) ruota attorno alla linea di base (Fig. 2.3). La geometria epipolare definisce Fig. 2.3: Rappresentazione delle linee epipolari una mappatura lineare dal punto x nella prima immagine alla linea epipolare l nella seconda immagine che dipende esclusivamente dalle matrici P e P delle 19

camere e non dalla loro struttura: l = Fx (2.6) dove F, matrice 3x3, è detta matrice fondamentale. La matrice P è definita in modo generale come P = K[R t] dove K rappresenta la calibrazione interna della camera (matrice 2.4), R e t sono la matrice di rotazione ed il vettore di traslazione dalle coordinate mondo alle coordinate del frame della camera. Per la prima camera vale quindi la relazione scritta in 2.5: P = K[I 0] considerando il frame di coordinate mondo allineato con la prima camera, mentre per la seconda vale P = K [R t] Nel caso preso in esame di due camere allineate, si considerano le seguenti matrici: f 0 0 t x K = K = 0 f 0, R = I, t = 0 (2.7) 0 0 1 0 Al calcolo della matrice F è possibile arrivare dopo semplici considerazioni algebriche [20]: per un punto x nella prima immagine si retroproietta un raggio attraverso la matrice P, si scelgono quindi due punti del raggio e si proiettano sulla seconda immagine attraverso la matrice P e si computa infine la linea passante per i due punti p e q come l = p q. Sviluppando tali considerazioni attraverso calcoli algebrici otteniamo quindi la relazione scritta in 2.6. Essendo [t] la matrice skew-simmetrica del vettore t, la matrice fondamentale può essere scritta come F = K T [t] RK 1 20

Esplicitando tale relazione considerando le matrici scritte in 2.7 F = 1/f 0 0 0 1/f 0 0 0 1 0 0 0 0 0 t x 0 t x 0 1/f 0 0 0 1/f 0 0 0 1 = 0 0 0 0 0 1 0 1 0 La corrispondenza tra x = [x, y, 1] T e x = [x, y, 1] T si può quindi ottenere scrivendo l equazione di appartenenza di un punto ad una retta x T l = 0 e sostituendo l dall equazione 2.6, risultando infine x T Fx = 0 (2.8) che esplicitata diventa [ x y 1 ] 0 0 0 0 0 1 0 1 0 x y 1 = 0 Considerando il sistema di riferimento in Figura 2.4 ci si riduce a y = y e quindi ad una corrispondenza raster, cioè una scansione di linee orizzontali. In questo caso l epipolo e è un vettore appartenente al Kernel di F, Fe = 0. Considerando quindi K = K per entrambe le camere, R = I e t come definito Fig. 2.4: Sistema di riferimento per due camere parallele 21

in 2.7, abbiamo dal risultato precedente y = y ed è possibile calcolare la disparità d raw = x x che verrà utilizzata per ottenere la profondità z del punto considerato X = [X, Y, Z, 1] T nello spazio 3D. Come calcolato in 2.1, x f = X Z, x f = X + t x Z da cui ottenendo quindi x f = x f + t x Z d = x x = ft x z (2.9) Il movimento dell immagine, ossia la disparità (Fig. 2.5), è quindi inversamente proporzionale alla profondità z, per z d 0. Fig. 2.5: Due punti x e x proiettati sui piani immagine delle camere traslate lungo l asse x 2.2.2 Come Kinect ottiene le corrispondenze di punti Come detto, Kinect utilizza un proiettore laser ad infrarossi. Esso illumina l ambiente con un pattern pseudo-casuale di punti noti in modo da rilevare le variazioni indotte dagli oggetti nella scena attraverso le distorsioni presenti 22

nel pattern: questo tipo di proiezione luminosa viene denominata structured light. L idea principale è quella di utilizzare quindi l illuminazione per creare corrispondenze di punti: questa tecnologia sino a questo momento veniva impiegata ad esempio nella metrologia industriale ed è anche conosciuta come active stereo o white light scanning. Essa utilizza un semplice principio di base: impiegare un proiettore per creare non ambigue corrispondenze e successivamente applicare la procedura di visione stereo. Se viene proiettato un singolo punto, il matching è unico, ma più immagini sono necessarie per coprire l intero oggetto. Un esempio di un estensione di tale principio è una proiezione di linee: per camere calibrate, la geometria epipolare è nota, e meno immagini sono necessarie (una per tutti i punti sulla linea), inoltre la linea interseca ogni linea epipolare in un punto, in questo modo il matching è ancora unico. Ma questa non è ancora la soluzione ottimale: è infatti possibile osservare che un proiettore è semplicemente una camera inversa, e la direzione del raggio è soltanto opposta. Il proiettore può così essere descritto dallo stesso modello geometrico: il pattern proiettato e l immagine definiscono due raggi nello spazio, così un proiettore ed una camera sono sufficienti per la triangolazione. Questa è la soluzione adottata da Kinect (Fig. 2.6). I vantaggi sono che il pat- Fig. 2.6: Sistema composto da un proiettore ed una camera allineati 23

tern proiettato (in Fig. 2.7 è riportato il patter proiettato da Kinect) è noto e consente di evitare la scansione riga per riga richiedendo un unica immagine per coprire l intera scena, in questo modo la profondità dipende soltanto dalla posizione del punto nell immagine e il calcolo di tale profondità si riduce ad un semplice table-lookup. In questo modo si ottiene inoltre una soluzione che garantisce una memorizzazione istantanea dei dati ed un procedimento in tempo reale, consentendone l utilizzo in tali ambiti. Fig. 2.7: Pattern proiettato da Kinect 2.3 I parametri di calibrazione di Kinect Kinect è stato prodotto per Xbox 360 e al momento dello sviluppo del lavoro Microsoft non aveva ancora rilasciato né un SDK (Software Development Kit) né un driver ufficiale. Comunque, sviluppatori indipendenti offrono soluzioni per utilizzare Kinect indipendentemente dalla console e con ogni sistema operativo attualmente in commercio. Utilizzando la piattaforma CLNUI prodotta da CodeLaboratories [21] o OpenNI sviluppata da PrimeSense [22] per l hardware che sta alla base di Kinect e che è possibile adattare anche a Kinect stesso grazie alla scrittura di driver appositi, è possibile connettere Kinect e 24

comunicare con il Sistema Operativo Windows e quindi con tutte le librerie necessarie per l interpretazione e la gestione dei dati. Nel lavoro, è stata utilizzata la piattaforma CLNUI, la quale fornisce un semplice ma completo set di funzioni per ottenere dati dal device (dati di profondità monocromatici o a colori grezzi o convertiti, di colore RGB) e per il controllo del motore di Kinect. I dati più importanti per lo studio vengono prelevati dal sensore di profondità di Kinect. Essi sono valori ad 11 bit (da 0 a 2047) e rappresentano i valori grezzi d raw di disparità di un punto p della scena 3D. In accordo con la procedura di calibrazione sviluppata in [23, 24], si ottiene d = Ktan(Hd raw + L) O (2.10) dove H = 3.5 10 4 rad/pixel, K = 12.36cm, L = 1.18rad, O = 3.7cm mentre d è la profondità del punto p ottenuta dalla camera di Kinect espressa in cm. Questa approssimazione tangenziale ha una somma delle differenze quadratiche di 0.33cm 2 per i dati di calibrazione: essa comporta un errore di circa 5cm ad una distanza di 4 metri dalla camera e meno di 1cm entro i 2 metri. Una volta che la profondità è stata ottenuta tramite la funzione di calibrazione sopra menzionata, è possibile quindi rilevare il vettore di coordinate per il punto p all interno del frame di Kinect. Siano (i, j) le coordinate (pixels) della proiezione del punto p all interno del frame (Fig. 2.1). Siano (x, y, z) le coordinate del punto p 3D nel frame della camera espresse in cm. In [25] gli autori hanno proposto la seguente equazione per calcolare il vettore [x, y, z] T dalla proiezione (i, j) e la profondità d per il punto p x = (i c x )f x d y = (j c y )f y d z = d (2.11) dove f x = 0.0016828 1/pixel, f y = 0.0016919 1/pixel, c x = 339.3078 pixel e c y = 242.7391 pixel. 25

In [25] gli autori hanno testato che l accuratezza per la ricostruzione del punto p dal frame di profondità della camera di Kinect è minore di 1cm. Ulteriori test sull accuratezza della misura che è possibile ottenere con il sensore di Kinect sono stati effettuati nell ambito del Kinect node del progetto ROS Kinect al MIT [26]. In questo caso si è analizzato il comportamento del sensore tramite il rilevamento dei valori di disparità in relazione alla funzione inversa della distanza: a valori nell intorno della distanza di un metro l errore medio è di 0.6cm. In tabella 2.1 sono riportati i valori ottenuti attraverso l approssimazione tangenziale: per ogni valore di distanza in metri considerato, ad intervalli di 20cm, viene letto il valore di disparità dal sensore e quindi calcolato il valore attraverso la funzione in 2.10. L errore di rilevamento della profondità è maggiore quanto più l oggetto si trova lontano dalla camera. Distanza [m] Disparità [pixel] Distanza rilevata [m] 0.4 329 0.39998 0.6 568 0.59883 0.8 697 0.79863 1.0 777 0.99809 1.2 834 1.20872 1.4 873 1.40941 1.6 900 1.59056 1.8 928 1.83311 2.0 942 1.98352 2.2 962 2.24558 Tabella 2.1: Valori di profondità rilevati attraverso il sensore di Kinect Per utilizzare l informazione di colore assieme all informazione di profondità è necessario mappare i pixels di profondità con i pixels di colore, in quanto le due camere non hanno la stessa posizione. Il primo step è quello di eliminare la distorsione del sensore rgb e dell immagine di profondità utilizzando coefficienti di distorsione stimati. Successivamente, utilizzando i parametri intrinseci della camera, ogni pixel (x d, y d ) della camera di profondità può essere proiettato nello spazio metrico 3D usando la seguente formula, dove p indica il punto 26

ottenuto nelle nuove coordinate: p x = (x d cx d ) depth(x d,y d ) fx d p y = (y d cy d ) depth(x d,y d ) fy d p z = depth(x d, y d ) con fx d, fy d, cx d e cy d parametri intrinseci della camera definiti come sopra. E così possibile riproiettare ogni punto 3D sull immagine a colori ed ottenere il colore specifico del pixel. Definiamo due matrici, una di rotazione ed una di traslazione (per una distanza tra le due camere di circa 2.5cm), con parametri stimati durante la calibrazione stereo: 0.9998 0.0012 0.0174 [ ] R = 0.0014 0.9992 0.0122, T = 0.0199 0.0007 0.0109 0.0174 0.0122 0.9977 Applicando quindi la trasformazione di rotazione e traslazione al vettore con le coordinate del punto di interesse nello spazio, otteniamo i valori di colore. Indicando con V t = [v x, v y, v z ] T il vettore ottenuto dalla trasformazione di moltiplicazione con la matrice di rotazione e somma del risultato con il vettore di traslazione, abbiamo infine le coordinate 2D del punto d interesse sul piano immagine pc = [pc x, pc y ] T, da cui prelevare l informazione di colore: pc x = vx fx rgb v z + cx rgb (2.12) pc y = vy fy rgb v z + cy rgb dove fx rgb = 529.215, fy rgb = 525.56, cx rgb = 328.94 e cy rgb = 267.48, valori espressi in pixel. 27

28

Capitolo 3 L algoritmo per il tracking della mano In questa sezione saranno illustrati i passi fondamentali dell algoritmo per il rilevamento dei punti fondamentali per il controllo della mano con 6 DoF (Degrees of Freedom) nello spazio ed il movimento delle dita (in particolare in riferimento all individuazione del pollice e del dito indice) attraverso il sensore di Kinect. 3.1 La procedura dell algoritmo di tracking L algoritmo di tracking della mano consiste nei seguenti steps eseguiti ad ogni passo di iterazione: 1. Lettura ed elaborazione dell informazione di profondità ottenuta da Kinect, 2. computazione del bounding box della mano, 3. estrazione dei punti chiave, come la posizione dei polpastrelli, 4. filtraggio delle traiettorie. L intero algoritmo di tracking è stato implementato con l utilizzo dell OpenCV Library [27]. Essa è una libreria per l utilizzo in Computer Vision originariamente sviluppata da Intel. Tale libreria comprende un ampio set di 29

funzioni per la manipolazione di immagini come set di pixel 2D, set di punti 3D, il filtraggio, l analisi strutturale delle forme, l analisi del moto. Nel corso degli anni e delle versioni la sua dimensione ed utilità è cresciuta ed oggi è una delle librerie maggiormente diffuse in tale contesto, meglio documentate e più affidabili, sia in termini di algoritmi utilizzati sia in termini di bassa complessità computazionale associata all ottimizzazione dell uso delle risorse hardware, come ad esempio la presenza di sistemi multi-core. Essa offre funzioni per l interpretazione geometrica, la rilevazione di contorni e di punti specifici all interno dell immagine acquisita che sono state utilizzate come base per l algoritmo di tracking. I dati su cui si è lavorato hanno una profondità di 8 bit per pixel in immagini di dimensioni di 640x480 pixels e risultano valori gestibili in modo ottimale in applicazioni real-time. Tale libreria, infatti, viene utilizzata nella prima di tre fasi di processo che devono essere eseguite in tempo reale in modo ciclico senza eccessiva latenza: la scrittura di funzioni quanto più possibile semplici e l acquisizione del minor numero di dati necessari per una corretta rappresentazione risulta quindi fondamentale per lo scopo. Nella discussione saranno presentate alcune delle funzioni principali per l implementazione dell algoritmo. 3.1.1 Elaborazione dell immagine di profondità I dati vengono ottenuti da Kinect nel modo descritto nel Capitolo 2: viene letta la mappa di profondità e costruita un immagine in scala di grigi della scena 3D. Per ogni punto nello spazio (x, y, z), coordinate espresse in cm, con proiezione sul piano immagine (i, j), coordinate espresse in pixel, la variabile di disparità d raw ad 11 bit di risoluzione viene letta dal sensore di Kinect e convertita in una variabile in virgola mobile rappresentante la distanza del punto dalla camera espressa in centimetri, considerando il sistema solidale al sistema di riferimento della camera, tramite l equazione riportata nel Capitolo 2 per il calcolo della coordinata z di profondità 30

z = 12.36[cm]tan(3.5 10 4 [rad/pixel]d raw [pixel] + 1.18[rad]) 3.7[cm] ed in una ad 8 bit di profondità in modo da poter essere trattata come un immagine in scala di grigi attraverso le funzioni della libreria OpenCV. E possibile considerare come pixel d intensità maggiore quelli più vicini alla camera, o viceversa. Come suggerito nello sviluppo di una libreria per l utilizzo di Kinect sotto il sistema operativo OSX [28], è utile impostare una tabella di lookup con i 2048 valori di conversione memorizzati, da consultare al momento della richiesta dei dati, per un immediata risposta all interno delle funzioni che necessitano di essi. Considerando l intensità dei pixel più vicini alla camera maggiore di quelli più lontani e k il pixel dell immagine come k = i 640 + j si può scrivere intensità(k) = 2048 256 d raw (k) 2048 In questo modo i primi 8 valori ottenuti rappresentati in virgola mobile vengono scritti all interno di un vettore ad 8 bit e quindi convertiti a valori compresi tra 0 e 255. In Fig. 3.1 è riportato un esempio dell immagine di profondità ottenuta. 3.1.2 Computazione del bounding box della mano Dall immagine di profondità, viene quindi costruito il bounding box che include la mano, la quale è supposta essere l oggetto più vicino al sensore di Kinect. Nelle interazioni di tipo aptico con ambienti virtuali questa assunzione non comporta una limitazione in quanto l utilizzatore tipicamente interagisce con oggetti virtuali e di conseguenza nessun oggetto è interposto tra Kinect e la mano umana da considerare. Tale immagine di profondità viene quindi successivamente convertita in un immagine binaria eseguendo un operazione di threshold dei valori tra due limiti impostati a valori di intensità di 160 e 255, 31

Fig. 3.1: Immagine di profondità ottenuta dal sensore di Kinect con il disegno del bounding box della mano corrispondenti ad un eliminazione (valori= 0) degli oggetti più lontani di circa 90 cm e di quelli a livello del bianco, quindi solitamente pixel rumorosi o troppo vicini alla camera per essere rilevati. Negli esperimenti effettuati infatti il valore ottimale della distanza della mano dalla camera risulta di circa 70 cm. Si tratta di un valore adeguato per non perdere troppi dettagli sui punti della mano con il sensore utilizzato da Kinect. Un esempio del bounding box è riportato in Fig. 3.1: in questo caso si considera un bounding box tridimensionale, mentre nei prossimi step ci riferiremo al contorno 2D dell immagine. A livello dello step di threshold, un problema sorge quando con il movimento si viene a portare l avambraccio in una posizione similare a quella della mano, a livello di distanza z dalla camera. In Fig. 3.2 è riportato un esempio di acquisizione in due casi: quando la mano è avanti rispetto al polso e quando invece si trova sulla stessa profondità z. Per risolvere questo problema è possibile seguire due tipi di approcci. Nel primo viene costruito dapprima attorno alla mano il rettangolo orientato secondo l inclinazione, attraverso la funzione cvminarearect(), 32

Fig. 3.2: Caso in cui l avambraccio risulta indietro alla mano rispetto a quando raggiunge una distanza simile poi, considerando la lunghezza del lato maggiore, viene effettuata una eliminazione dei pixel appartenenti all avambraccio a partire dal lato inferiore ad esso relativo (si tratta quindi del lato opposto alla direzione dell orientazione della mano calcolata come descritto successivamente). Esso risulta un metodo piuttosto semplice a livello computazionale, ma può presentare possibili errori in caso di rotazioni marcate della mano rispetto all avambraccio. La seconda soluzione invece prevede l utilizzo della funzione cvdisttransform() che opera una trasformazione impostando la luminosità dei pixels in base alla distanza dal pixel nero più vicino (quindi dalla distanza dal contorno). E possibile impostare alcuni differenti tipi di distanza: in questo caso il calcolo viene effettuato utilizzando la distanza euclidea. In Fig. 3.3 è riportato un esempio del risultato della trasformata. Considerando quindi il pixel (o media dei pixels) più luminosi otteniamo il punto centrale della mano, che costituisce il centro del cerchio inscritto: calcolando quindi il raggio di lunghezza pari alla distanza del pixel dal contorno è possibile ottenere tramite di esso la rappresentazione interna della dimensione del palmo della mano. In questo modo, utilizzando il vettore direzione che sarà discusso più avanti per identificare la parte da eliminare è possibile isolare la mano rispetto all avambraccio. Rispetto alla 33

prima soluzione, essa risulta più complessa computazionalmente, in quanto è necessario un calcolo di distanza per ogni pixel appartenente al contorno, una verifica sulla luminosità dei pixel risultato della trasformazione ed infine una nuova scrittura dell immagine per l eliminazione dei pixel scartati. Essa non dipende però da un parametro numerico che deve essere impostato come nel primo caso (valore di inizio del taglio) e dà risultati in media più precisi anche in caso di rotazioni particolari della mano. Fig. 3.3: Esempio di risultato dopo aver applicato la trasformata di distanza: il cerchio rappresentato ha il suo centro nel pixel di luminosità maggiore 3.1.3 Dal contorno 2D della mano ai punti fondamentali e alla posizione dei polpastrelli Una volta ottenuta l immagine ritagliata dal bounding box, viene rilevato il contorno della mano. La funzione utilizzata per trovare un contorno per gli oggetti in OpenCV [27] è cvfindcontours(): essa prende in ingresso un immagine binaria e ritorna il numero dei contorni trovati, con la possibilità di creare 34

una gerarchia a partire dai contorni esterni sino a quelli interni ad essi. La selezione viene effettuata scansionando tali contorni fino a quello di area massima, che rappresenta nel caso specifico quindi quello della mano: gli altri possono riferirsi a rumore o parti del polso da escludere. In uscita dalla funzione si ha un array di punti: viene eseguita una successiva approssimazione eliminando quelli a distanza minima sia per ottenere una forma geometricamente più rilevante sia per diminuire la complessità computazionale. L approssimazione si basa sull algoritmo di Douglas-Peucker [29]: esso trova, data una curva composta di segmenti, una curva similare con un numero minore di punti, basandosi sulla massima distanza tra la curva originale e la curva semplificata. Una volta che il contorno è stato memorizzato, è possibile computare l involucro convesso che lo comprende utilizzando la funzione OpenCV cvconvexhull(). I punti dell involucro rappresentano il contorno esterno della mano, dal polso alle dita se la mano è aperta come in Fig. 3.4. Questo set di punti è necessario per la funzione usata per identificare le dita: cvconvexitydefects(). La funzione lavora sul contorno e sull involucro convesso e computa quelli che vengono chiamati i difetti di convessità. Per ognuno di essi viene aggiornata una struttura con quattro dati fondamentali: un punto iniziale, corrispondente al polpastrello nella rilevazione finale delle dita, un punto di profondità, corrispondente al punto di congiunzione di due dita adiacenti, un punto f inale, corrispondente al polpastrello del dito adiacente ed una prof ondità, corrispondente alla distanza del punto di congiunzione (punto di profondità interno) dall involucro convesso: essa quindi rappresenta la distanza massima dall involucro convesso stesso. Il punto finale è dove il difetto di convessità termina. In Fig. 3.4 è riportato un esempio grafico della computazione dei difetti di convessità dalla funzione. La funzione cvconvexitydefects() fornisce informazioni rilevanti per localizzare la mano nello spazio 3D. In particolare, quindi, i difetti più vicini all involucro convesso determinano la posizione dei polpastrelli. Tale funzione non calcola però un numero limitato e sempre corretto di difetti, ma il risultato iniziale comprende numerosi punti, riconducibili a punti rumorosi 35

Fig. 3.4: Un esempio di computazione dei difetti di convessità. L algoritmo individua la posizione dei polpastrelli delle dita ed in particolare dell indice e del pollice che corrispondono ai punti iniziale e finale di un difetto di convessità e non di interesse per il rilevamento delle dita. E necessaria quindi un operazione di filtraggio e selezione che si basa su considerazioni sulla posizione degli stessi e sulla loro distanza dall involucro convesso. Per questa operazione e per il controllo della mano all interno dello spazio, è quindi necessario rilevare punti fondamentali quali il centro di massa, i punti esterni del polso ed il vettore di direzione della mano per identificare correttamente le dita e per permettere la rotazione nello spazio. In Fig. 3.5 sono riportati alcuni dettagli degli elementi rilevati per l interpretazione geometrica della mano all interno dell algoritmo: sono mostrati il rettangolo con gli assi allineati all immagine che racchiude la mano, quello orientato secondo il movimento rotatorio ed il cerchio di raggio minimo circoscritto da cui si possono ricavare informazioni sulla dimensione della mano da utilizzare per i parametri di selezione. Il calcolo di tali rappresentazioni geometriche avviene sulla base in ingresso dei punti di contorno o di involucro convesso rilevati, risultanti in un numero relativamente limitato, e questo comporta bassi costi a livello computazionale pur avendo 36

una rappresentazione fedele sul piano immagine delle caratteristiche in termini di dimensioni e orientazione della mano che stiamo considerando. Fig. 3.5: Tracking window: l algoritmo computa il bounding box 2D della mano, il cerchio circoscritto di raggio minimo e il bounding box 2D orientato. Vengono inoltre riportati il polpastrello del pollice, quello dell indice ed il centro della mano Per il calcolo del centro di massa della mano e per le informazioni sulla rotazione è necessario introdurre brevemente alcuni dettagli sul momento di un immagine e sui momenti spaziali e centrali. Nella trattazione di immagini e nella computer vision il momento di un immagine è un metodo statistico che calcola una media pesata dell intensità dei pixels dell immagine stessa, o una funzione di essi, con particolari proprietà e che si presta a utili interpretazioni. I momenti di un immagine sono utili per descrivere gli oggetti dopo la segmentazione: proprietà sull oggetto posso essere ottenuti da essi, come l area totale, il suo centro di massa ed informazioni sulla sua orientazione. Per una funzione 2D continua f(x, y) il momento di 37

ordine (p + q) è definito come x p y q f(x, y)dxdy per p, q = 0, 1, 2... Un teorema di unicità (Papoulis[1991]) afferma che se f(x, y) è continua a tratti ed ha valori diversi da zero solo in una parte finita del piano xy, esistono i momenti di ogni ordine, ed il momento m p,q è unicamente determinato da f(x, y) e viceversa. L immagine quindi risulta come somma di funzioni di momenti di ordine minore. Per un immagine in scala di grigi con un intensità del pixel I(x, y) i momenti m i,j sono calcolati come m i,j = x x i y j I(x, y) (3.1) y Considerando immagini binarie la funzione I(x, y) diventa 1 Objet I(x, y) = 0 Background Il momento di ordine 0 definisce quindi l area dell oggetto. m 0,0 = I(x, y)dxdy I momenti del primo ordine contengono invece informazioni sul centro di gravità dell oggetto (x c, y c ), che è possibile ricavare come x c = m 1,0 m 0,0 (3.2) y c = m 0,1 m 0,0 Il centro di gravità viene quindi anche chiamato momento del primo ordine e rappresenta la media della distribuzione dei pixel, mentre il momento del secondo ordine rappresenta la distribuzione attorno al centro: esso fornisce informazioni circa la distribuzione attorno alla media, ossia la varianza e la 38

deviazione standard. In questo modo, calcolando media e varianza dell oggetto nell immagine, possiamo trovare la posizione, l orientazione ed il rapporto d aspetto (rapporto tra altezza e larghezza) dell oggetto stesso. L equazione 3.1 descrive quelli che vengono chiamati momenti spaziali dell oggetto. Da questi è possibile ottenere i momenti centrali scalando i momenti spaziali con il centro di gravità dell oggetto (x c, y c ), in questo modo i momenti centrali sono relativi ad esso: essi risultano invarianti alla traslazione. µ p,q = (x x c ) p (y y c ) q f(x, y)dxdy I momenti centrali fino al secondo ordine risultano quindi: µ 0,0 = m 0,0 µ 0,1 = 0 µ 1,0 = 0 µ 1,1 = m 1,1 x c m 0,1 = m 1,1 y c m 1,0 µ 2,0 = m 2,0 x c m 1,0 µ 0,2 = m 0,2 y c m 0,1 µ 2,1 = m 2,1 2x c m 1,1 y c m 2,0 + 2x 2 c m 0,1 µ 1,2 = m 1,2 2y c m 1,1 x c m 0,2 + 2y 2 c m 1,0 Con la funzione OpenCV cvmoments() che ha in ingresso un immagine (binaria o in scala di grigi), o una sequenza di punti appartenenti ad un contorno, è possibile calcolare i momenti, che vengono memorizzati in una struttura dedicata. L informazione sull orientazione dell immagine può essere ottenuta utilizzando innanzitutto i momenti centrali del secondo ordine per costruire una matrice di covarianza. µ 2,0 = µ 2,0 µ 0,0 = m 2,0 m 0,0 x c 2 µ 0,2 = µ 0,2 µ 0,0 = m 0,2 m 0,0 y c 2 µ 1,1 = µ 1,1 µ 0,0 = m 1,1 m 0,0 x c y c 39

La matrice di covarianza dell immagine I(x, y) è quindi cov[i(x, y)] = µ 2,0 µ 1,1 µ 1,1 µ 0,2 (3.3) Gli autovettori di questa matrice corrispondono all asse maggiore ed a quello minore dell intensità dell immagine, e l orientazione può essere ottenuta dall angolo associato con il più grande autovalore. Si dimostra[30] che tale angolo θ[rad] è dato da: Gli autovalori della matrice di covarianza risultano θ = 1 2 arctan( 2µ 1,1 ) (3.4) µ 2,0 µ 0,2 µ 2,0 + µ 0,2 ± λ 1,2 = 4 µ 2 1,1 (µ 2,0 µ 0,2) 2 2 (3.5) Essi descrivono inoltre il rapporto d aspetto (dimensione relativa) dell oggetto. Tale calcolo risulta una buona approssimazione e un buon compromesso a livello computazionale (il calcolo dei momenti del primo e del secondo ordine risulta infatti molto rapido e quindi adatto per lo scopo di utilizzo in real-time dell applicazione) per ottenere i dati necessari alla descrizione della mano, con conseguenti considerazioni sia nello spazio 2D (ad esempio ottenendo facilmente l angolo di rotazione attorno all asse z uscente dal piano immagine) che in quello 3D (posizione ed orientazione). Esso risulta un metodo mediamente stabile per calcolare il vettore direzione sul piano xy come [sin(θ), cos(θ)] T, ottenendo quindi da ciò il punto verso up della mano come somma tra il punto identificato dal vettore ruotato dell angolo θ (scalato in rapporto alla dimensione della mano) ed il centro di massa. Il punto identificato p up = [p x, p y ] T sul piano immagine risulta quindi p x = x c + λ 1 sin(θ) p y = y c + λ 1 cos(θ) (3.6) 40

Esso inoltre risulta mediamente più stabile rispetto al calcolo del vettore direzione come differenza tra il centro di massa ed il punto centrale del polso, in quanto quest ultimo può risultare rumoroso in alcune posizioni assunte dalla mano, mentre il calcolo con il momento non risente del rumore causato da pochi pixel rispetto alla globalità dell oggetto. Vengono quindi considerate e confrontate entrambe le soluzioni per ottenere una rappresentazione precisa della direzione della mano, così da poter eliminare casi di divergenza eccessiva. Tramite i procedimenti descritti vengono quindi calcolate le coordinate del centro di massa c2d m = [c i, c j ] T e c3d m = [c x, c y, c z ] T e del punto lungo la direzione del vettore di norma unitaria orientato v2d d = [v i, v j ] T e v3d d = [v x, v y, v z ] T rispettivamente sul piano immagine e nello spazio tramite l equazione di conversione riportata in 2.11, considerando x c, y c come in 3.2 e p x, p y come in 3.6, ottenendo c2d m = v2d d = x c y c p x p y, c3d m =, v3d d = (x c c x )f x z c (y c c y )f y z c z c (p x c x )f x z v (p y c y )f y z v z v (3.7) ed il rispettivo vettore di direzione normalizzato nello spazio per il calcolo degli angoli di rotazione vdir = v3d d c3d m v3d d c3d, considerando con lo stesso ragionamento anche il vettore ad esso ortogonale. Una volta calcolate le coordinate m dei punti fondamentali, è possibile procedere con le considerazioni euristiche riguardanti l eliminazione dei punti di non interesse e successivamente con le osservazioni rivolte all identificazione del pollice e dell indice, le due dita di cui si richiede l informazione di posizione. Tali considerazioni vengono effettuate su vettori 2D appartenenti al piano immagine. Per il rilevamento dei 41

polpastrelli vengono quindi scartati: Tutti i difetti di convessità i cui punti di profondità relativi risultano con una distanza euclidea dal punto centrale del polso minore della distanza tra il centro di massa e lo stesso punto. Tutti i difetti di convessità aventi un angolo compreso tra i vettori differenza tra i punti iniziali ed i punti finali con il rispettivo punto di profondità maggiore di un valore fissato: 120 risulta una buona scelta tenendo conto che l apertura tra pollice ed indice non può raggiungere tale valore. Tutti i difetti di convessità le cui profondità (distanze) dall involucro convesso risultano minori di un valore fissato: il 10% della lunghezza del raggio del cerchio circoscritto rappresenta un buon valore tenendo conto che la chiusura tra pollice ed indice avvicina il punto di profondità corrispondente all involucro per un valore minimo superiore. Per il rilevamento dei due punti corrispondenti al polso si ordinano i punti trovati in funzione dell angolo rilevato al punto 2, in questo caso considerando i due angoli di ampiezza maggiore. Il centro della retta unente i due punti di profondità indica il punto di riferimento per la distanza dal centro di massa della mano. Dopo la selezione, è quindi necessario associare i punti rilevati alle dita, ed in particolare quelli di indice e pollice che vengono utilizzati al passo successivo per la resa delle forze. Innanzitutto viene fatta una distinzione tra i punti a destra del vettore direzione, che è possibile associare al pollice e all indice, e quelli a sinistra, dito medio, anulare e mignolo. Tali considerazioni valgono per il caso preso in esame riguardante la mano sinistra, in quanto l avatar tridimensionale è una sua rappresentazione, ma valgono in misura uguale ma inversa anche per la mano destra. Si considera quindi il prodotto vettoriale tra i vettori 2D (inseriti in un vettore 3D con componente z = 0): il primo è quello risultante dal vettore differenza tra il punto di profondità di una 42

concavità e il centro di massa della mano, normalizzato, mentre il secondo è il vettore direzione di norma unitaria. Se presenti risultati con z positivi (quindi rilevamento di indice o pollice, o entrambi), si verifica l angolo del vettore differenza con il vettore direzione: se questo risulta maggiore di 15 il punto iniziale del difetto di convessità corrispondente viene assegnato al pollice. Una rappresentazione grafica dei punti e dei vettori principali considerati è data in Fig. 3.6. Fig. 3.6: I punti ed i vettori fondamentali rilevati: in nero è riportato il vettore direzione, così come il centro di massa ed il punto centrale del polso. I punti colorati appartengono ai difetti di convessità e vengono chiamati punti di profondità Per eliminare il possibile errore di interpretazione del valore z del prodotto vettoriale precedentemente calcolato tra indice e medio (i due punti di angolo minore rispetto al vettore direzione) che al passo precedente può non aver correttamente scartato il dito medio, si controlla anche l angolo formato dal vettore differenza con il vettore ortogonale (a destra) al vettore direzione: l indice corrisponderà al punto di profondità riferito all angolo minore. Utilizzando 43

il rettangolo circoscritto orientato calcolato con la funzione minarearect() è possibile inoltre avere un indicazione sull ordinamento dei punti di concavità considerando l area del triangolo formato da i vertici superiore ed inferiore destri ed i rispettivi punti di profondità. 3.1.4 Filtraggio Tutti i valori rilevanti ottenuti dagli step precedenti vengono filtrati e regolati per ottenere variazioni attenuate attraverso un filtro di Kalman. La principale funzione OpenCV da utilizzare in questo caso è cvcreatekalman(), che crea un filtro di Kalman di dimensione variabile inizializzando le matrici del filtro. Per un generico punto p = (x, y, z) il filtro stima il vettore di stato s che consiste nella posizione del punto p e nella sua velocità v. Le equazioni della dinamica e della misura (m) sono date da s(k + 1) = As(k) + w(k) m(k) = Cs(k) + v(k) dove A = I t [ and C = 0 I I 0 ] essendo t l intervallo di tempo fra due iterazioni (esso non è minore di 1/30, essendo 30 fps il frame rate di Kinect) mentre w(k) e v(k) rappresentano i rumori della dinamica e della misura. Essi sono assunti essere indipendenti l uno dall altro, bianchi, e con una distribuzione di probabilità normale con matrici di covarianza Q e R, rispettivamente. La matrice Q è una matrice diagonale con valori di 0.00001, mentre la matrice R è una matrice diagonale con valori di 3.0 per il centro di massa e gli angoli di rotazione della mano, di 0.5 per gli altri punti. La predizione avviene tramite la funzione cvkalmanpredict() che agisce sul filtro passato come argomento, a cui segue una correzione del filtro stesso effettuata tramite la misura reale per il passo successivo attraverso 44

la funzione cvkalmancorrect() che ha in ingresso quindi anche i valori della misura effettuata. Nonostante l applicazione del filtro che insegue la traiettoria della mano e delle dita sia effettuata con parametri necessariamente regolati per ottenere una buona stabilità, è possibile seguire un alta velocità di spostamento della mano, principalmente perché la complessità computazionale dell intero algoritmo risulta piuttosto bassa ed il sistema può essere aggiornato in tempo reale, e poiché come detto la precisione del sensore risulta essere minore di un centimetro per la profondità. In Fig. 3.7 sono riportati gli errori di distanza rilevati espressi in cm durante lo spostamento della mano all aumentare della velocità, relativamente al centro di massa (sinistra) ed ai polpastrelli (destra). I valori relativi alla matrice di covarianza R per il centro di massa rendono una maggiore stabilità rispetto ad un inseguimento immediato, mentre per i polpastrelli non è richiesto un valore troppo elevato in quanto gli spostamenti risultano di minore entità. Fig. 3.7: Errore medio rilevato in cm con i parametri di stabilità del filtro di Kalman all aumentare della velocità di spostamento della mano 3.2 Limitazioni dell algoritmo proposto In questa sezione vengono discusse le principali limitazioni dell algoritmo proposto. L errore principale riguarda il terzo passo dell algoritmo: infatti esso si basa su euristiche, considerazioni geometriche e funzioni che operano su vettori di punti. Affinché l algoritmo possa lavorare correttamente, è importante che la parte più ampia possibile della mano sia visibile alla camera, con il minor 45

numero possibile di sovrapposizioni di punti rispetto alla camera che ne impediscono il rilevamento totale o parziale. Come detto, alcune euristiche vengono utilizzate per identificare le dita e queste possono fallire o cadere in errore in caso di occlusioni di parti delle dita. La condizione peggiore generante occlusioni accade quando le dita divengono perpendicolari al piano xy della camera di Kinect. In questo caso nessuna informazione di profondità può essere rilevata per una grande parte della mano (i pixels risultano per la maggior parte = 0): tali posizioni non possono essere raggiunte, ma eventualmente solo stimate, ad esempio considerando la posizione relativa delle altre dita. In questa situazione, l errore medio diventa proporzionale alla chiusura delle dita sulla mano. La distanza ottimale della mano da considerare ed il sensore di Kinect è di circa 70cm. Man mano che ci si allontana da questa distanza, essa inizia a diventare troppo piccola, e vengono perse informazioni di profondità, divenendo una rilevazione povera in termini di accuratezza. Al contrario, Kinect non riesce a rilevare oggetti più vicini di 40-50 cm. In Fig. 3.8 è riportato l errore medio espresso in cm, valutando la distanza tra il centro di massa reale e quello stimato attraverso il momento del primo ordine, con la mano posta all interno del range 65-75cm. Fig. 3.8: Errore medio rilevato in cm facendo compiere alla mano una rotazione attorno all asse Z del frame di riferimento 46

Nonostante le limitazioni imposte, un movimento ampio nello spazio è consentito: completo rispetto all asse spaziale z e fino a circa 70 rispetto agli assi spaziali x e y, e fino a circa 1m di traslazione lungo gli assi del piano xy della camera. Considerando la mano in posizione di riposo quando il palmo si trova parallelo di fronte alla camera, con le dita rivolte verso la direzione dell asse y positivo, in Fig. 3.9 è riportato l errore medio rilevato facendo compiere alla mano una rotazione oraria attorno all asse Z del frame di riferimento, uscente dal piano della camera (a sinistra). L angolo è calcolato attraverso i Fig. 3.9: Errore medio rilevato in gradi quando la mano compie una rotazione attorno all asse Z del frame di riferimento. A destra è riportato il caso in cui si utilizza la trasformata di distanza per ottenere il centro della mano momenti centrali. A destra è riportato invece l errore medio rilevato utilizzando la trasformata di distanza per ottenere il centro della mano. I risultati sono leggermente migliori in quanto la totalità della mano viene identificata correttamente anche in caso di rotazione accentuata, eliminando il rumore aggiunto da eventuali pixels appartenenti all avambraccio. In Fig. 3.10 sono infine riportati gli errori medi espressi in gradi quando la mano compie una rotazione oraria attorno all asse X (in alto) e Y (in basso) del frame di riferimento. 47

Fig. 3.10: Errore medio rilevato in gradi quando la mano compie una rotazione attorno agli assi X e Y del frame di riferimento 48

Capitolo 4 Applicazione: rendering e force feedback In questa sezione verrà illustrato il modello tridimensionale della mano utilizzato, come questo viene controllato attraverso i punti rilevati dall algoritmo descritto al capitolo precedente ed infine verranno riportati i risultati del test effettuato con gli attuatori aptici indossati sul pollice e sul dito indice per la resa delle forze nell interazione con oggetti virtuali. 4.1 L animazione della mano L algoritmo di tracking della mano descritto è stato utilizzato per animare l avatar della mano sinistra come discusso in [31] dove due dispositivi aptici fissi sono stati usati per tracciare il movimento dell indice e del pollice, come riportato in Fig. 4.1. Nel caso discusso vengono sostituite le misure della posizione e della rotazione della mano e delle posizioni dei polpastrelli con i dati forniti dall algoritmo di tracking basato sul sensore di Kinect: le misure dei polpastrelli di indice e pollice vengono fornite da Kinect come in Fig. 3.4. Naturalmente, in questo caso abbiamo più misure per meglio tracciare la mano umana di quelle fornite soltanto dalle interfacce aptiche come in [31], in cui lo studio era rivolto principalmente all interpretazione della postura della mano attraverso un numero minore di misure rispetto ai gradi di libertà, sfruttando appunto le cosiddette sinergie posturali. Il modello cinematico 49

Fig. 4.1: Due dispositivi Omega sono stati utilizzati in [31] per interazione aptica 3D in tempo reale dell avatar della mano umana è quello proposto dallo stesso Laboratorio di Sistemi e Robotica dell Università di Siena. Il modello biomeccanico dell avatar della mano ha uno scheletro cinematico con in totale 20 giunti: la sua animazione fa riferimento alla tecnica smooth skinning, conosciuta anche come sub space deformation (SSD) o linear blend skinning (LBS). Questa si basa sul creare inizialmente uno scheletro gerarchico all interno di un modello statico (ad esempio una mesh) nella posizione di riposo, detta anche dress pose. In seguito un set di giunti è assegnato ad ogni vertice della mesh con un peso corrispondente alla sua influenza. La posizione finale dei vertici è ottenuta come combinazione lineare di trasformazioni rigide di vertici considerando i pesi assegnati. Questo metodo risulta semplice da utilizzare, in quanto coinvolge soltanto computazioni algebriche, non richiedendo ad esempio la risoluzione di equazioni dinamiche, e quindi consente un implementazione in real-time della deformazione anche su sistemi hardware di basso livello. Di contro, siccome esso usa un semplice modello lineare per simulare una complessa relazione non lineare fra lo scheletro e la pelle, la deformazione non appare completamente naturale per tutte le trasformazioni dei giunti, per esempio in casi di ampie rotazioni. In aggiunta, l algoritmo è difficile da controllare poiché le combi- 50