12.07.2015 Views

Progetto, realizzazione e calibrazione di un sistema di visione ...

Progetto, realizzazione e calibrazione di un sistema di visione ...

Progetto, realizzazione e calibrazione di un sistema di visione ...

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

UNIVERSITÀ DEGLI STUDI DI ROMA“TOR VERGATA”FACOLTÀ DI INGEGNERIACorso <strong>di</strong> Laurea in Ingegneria dell'AutomazioneTesi <strong>di</strong> Laurea <strong>di</strong> Primo Livello<strong>Progetto</strong>, <strong>realizzazione</strong> e <strong>calibrazione</strong> <strong>di</strong> <strong>un</strong><strong>sistema</strong> <strong>di</strong> <strong>visione</strong> stereoscopicaRelatoreIng. F. MartinelliLaureandoPaolo PazzianiAnno Accademico 2010/2011


RingraziamentiUna tesi è sempre frutto <strong>di</strong> <strong>un</strong> intenso lavoro, durante il quale sipossono presentare imprevisti e momenti <strong>di</strong> scoraggiamento che hopotuto superare soltanto grazie al sostegno delle persone che mi sonostate accanto.Per tale motivo desidero ringraziare i miei genitori che hannocreduto in me anche nei momenti più <strong>di</strong>fficili, senza i cui sacrificinon avrei potuto portare a termine il mio progetto.Un particolare ringraziamento va a Gabriella con la quale ho avutola fort<strong>un</strong>a <strong>di</strong> <strong>di</strong>videre momenti importanti della mia vita. Le saròsempre grato perché mi è sempre stata vicino ogni qualvolta si siapresentata <strong>un</strong>a <strong>di</strong>fficoltà, dandomi la forza <strong>di</strong> completare questolavoro.Vorrei esprimere tutta la mia gratitu<strong>di</strong>ne a Fabio il cui supporto èstato in<strong>di</strong>spensabile.Desidero ringraziare il prof. Martinelli, che mi ha offertol'opport<strong>un</strong>ità <strong>di</strong> conoscere il mondo della <strong>visione</strong> artificiale.Ringrazio inoltre tutti coloro che mi hanno sostenuto durante ilpercorso dei miei stu<strong>di</strong>.


In<strong>di</strong>ceIntroduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Nozioni Preliminari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.1Visione computazionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.2 La percezione visiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3 Formazione dell'immagine . . . . . . . . . . . . . . . . . . . . . . . . . . 141.4 Foto sensori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.4.1 Semiconduttori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.4.2 Il Dispositivo MOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.4.3 La Gi<strong>un</strong>zione P-N. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.4.4 Charged Coupled Devices . . . . . . . . . . . . . . . . . . . . . . 191.4.5 Complementary metal-oxide semiconductor . . . . . . . . 221.4.6 Confronto fra CCD e CMOS . . . . . . . . . . . . . . . . . . . . 241.5 Image Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251.5.1 Rumore nelle immagini . . . . . . . . . . . . . . . . . . . . . . . . 261.5.2 Riduzione del rumore . . . . . . . . . . . . . . . . . . . . . . . . . 261.6 Estrazione <strong>di</strong> feature da immagini . . . . . . . . . . . . . . . . . . . . 281.6.1 Edge detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301.6.1.1 Rilevazione dei bor<strong>di</strong> me<strong>di</strong>ante derivata prima . . 301.6.1.2 Rilevazione dei bor<strong>di</strong> me<strong>di</strong>ante derivata delsecondo or<strong>di</strong>ne . . . . . . . . . . . . . . . . . . . . . . . . . . . 321.6.1.3 Canny edge detector . . . . . . . . . . . . . . . . . . . . . . 341.6.2 Corner detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.6.2.1 Classificazione degli algoritmi <strong>di</strong> edge detection 361.6.2.2 Algoritmo <strong>di</strong> Moravec . . . . . . . . . . . . . . . . . . . . . 381.7 Trasformata <strong>di</strong> Hough . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423


1.7.1 La trasformata <strong>di</strong> Hough per le linee . . . . . . . . . . . . . . 431.7.2 La trasformata <strong>di</strong> Hough per i cerchi (CHT) . . . . . . . . 452 Modello della telecamera e <strong>calibrazione</strong> . . . . . . . . . . . . . . . . . . . 482.1 Modello della telecamera . . . . . . . . . . . . . . . . . . . . . . . . . . . 482.1.1 Proiezione prospettica . . . . . . . . . . . . . . . . . . . . . . . . . 482.1.2 Parametri intrinseci ed estrinseci . . . . . . . . . . . . . . . . 502.1.3 Il nucleo <strong>di</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522.1.4 Distorsioni delle lenti . . . . . . . . . . . . . . . . . . . . . . . . . 532.2 Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.2.1 Meto<strong>di</strong> <strong>di</strong> <strong>calibrazione</strong> . . . . . . . . . . . . . . . . . . . . . . . . . 562.2.2 Metodo <strong>di</strong> Zhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582.2.3 Omografia tra l'oggetto panare e la sua immagine . . . 592.2.3.1 Stima dell'omografia H . . . . . . . . . . . . . . . . . . . . . 602.2.3.2 Soluzione sovra-determinata . . . . . . . . . . . . . . . . . 612.2.3.3 Scelta della f<strong>un</strong>zione <strong>di</strong> costo . . . . . . . . . . . . . . . . 612.2.3.4 Least me<strong>di</strong>an of Squares . . . . . . . . . . . . . . . . . . . . 632.2.3.5 RANSAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642.2.4 Stima della matrice dei parametri intrinseci . . . . . . . . 662.2.5 Stima dei parametri estrinseci . . . . . . . . . . . . . . . . . . . 683 Visione stereoscopica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.1 Triangolazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.2 Geometria epipolare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.2.1 La matrice fondamentale . . . . . . . . . . . . . . . . . . . . . . . 743.2.2 Le matrici L e R in <strong>un</strong> <strong>sistema</strong> stereoscopico 753.2.3 Proprietà della matrice fondamentale . . . . . . . . . . . . . 763.2.4 La matrice Essenziale . . . . . . . . . . . . . . . . . . . . . . . . . 773.2.5 La matrice F in <strong>un</strong> <strong>sistema</strong> stereoscopico canonico . . . 784


3.3 Calcolo della matrice fondamentale . . . . . . . . . . . . . . . . . . . 793.3.1 Decomposizione ai valori singolari . . . . . . . . . . . . . . . 813.3.2 Soluzione esatta con sette p<strong>un</strong>ti . . . . . . . . . . . . . . . . . . 813.3.3 Metodo degli otto p<strong>un</strong>ti . . . . . . . . . . . . . . . . . . . . . . . . 823.3.4 Normalizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.3.5 Soluzione ai minimi quadrati . . . . . . . . . . . . . . . . . . . . 843.3.6 Vincolo <strong>di</strong> singolarità . . . . . . . . . . . . . . . . . . . . . . . . . 853.3.7 Meto<strong>di</strong> robusti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.4 Rettificazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863.4.1 Algoritmo <strong>di</strong> Hartley . . . . . . . . . . . . . . . . . . . . . . . . . . 893.4.2 Algoritmo <strong>di</strong> Bouguet . . . . . . . . . . . . . . . . . . . . . . . . . 933.4.3 Mappa <strong>di</strong> rettificazione . . . . . . . . . . . . . . . . . . . . . . . . 954 Hardware e software impiegati . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.1 L'Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.1.1 Sistema <strong>di</strong> elaborazione . . . . . . . . . . . . . . . . . . . . . . . . 1004.1.2 Telecamere e loro collocazione . . . . . . . . . . . . . . . . . . 1014.2 Software utilizzato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034.2.1 Il linguaggio <strong>di</strong> programmazione . . . . . . . . . . . . . . . . . 1034.2.2 OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044.2.3 L'ambiente <strong>di</strong> sviluppo e il Sistema Operativo . . . . . . 1055 Distribuzione dei processi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075.1 Moltiplicare i processi per gestire più telecamere . . . . . . . . 1075.1.1 P<strong>un</strong>tare sul parallelismo . . . . . . . . . . . . . . . . . . . . . . . 1075.1.2 Interazione utente/processi . . . . . . . . . . . . . . . . . . . . . 1085.2 Scelta del metodo <strong>di</strong> com<strong>un</strong>icazione tra processi . . . . . . . . . 1095.3 Strutture <strong>di</strong> base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125.4 Acquisizione delle immagini . . . . . . . . . . . . . . . . . . . . . . . . 1135


5.4.1 Algoritmo relativo al tasto “Avvia”. . . . . . . . . . . . . . . 1155.4.2 Algoritmo associato al tasto “ Scatta” . . . . . . . . . . . . 1175.4.3 Algoritmo relativo al pulsante “Termina” . . . . . . . . . 1186 Sincronizzazione dei processi . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196.1 F<strong>un</strong>zionamento del processo <strong>di</strong> acquisizione . . . . . . . . . . . . 1216.2 F<strong>un</strong>zionamento della GUI . . . . . . . . . . . . . . . . . . . . . . . . . . 1226.3 Diagramma <strong>di</strong> f<strong>un</strong>zionamento . . . . . . . . . . . . . . . . . . . . . . . 1236.3.1 Processo <strong>di</strong> acquisizione . . . . . . . . . . . . . . . . . . . . . . . 1236.3.1.1 Stato 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246.3.1.2 Stato 50 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256.3.1.3 Stato 51. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256.3.1.4 Stato 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1266.3.1.5 Stato 53 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1266.3.1.6 Stato 54 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1276.3.2 GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1286.3.2.1 Stato 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1296.3.2.2 Stato 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1296.3.2.3 Stato 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306.3.2.4 Stato 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307 Interfaccia grafica e tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317.1 Approccio iniziale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317.1.1 Esecuzione del programma . . . . . . . . . . . . . . . . . . . . . 1317.1.2 IDD_BOUTBOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327.1.3 Impostazione dei processi <strong>di</strong> acquisizione . . . . . . . . . 1337.1.4 Avviare i processi <strong>di</strong> acquisizione . . . . . . . . . . . . . . . . 1347.2 Avviare le operazioni inerenti <strong>un</strong>a <strong>calibrazione</strong> . . . . . . . . . . 1377.3 Implementazione del tab control . . . . . . . . . . . . . . . . . . . . . 1386


7.4 Primo sotto-<strong>di</strong>alogo e raccolta delle immagini . . . . . . . . . . . 1397.4.1 Inserimento dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . 1407.4.2 Scatto manuale o automatico . . . . . . . . . . . . . . . . . . . 1427.4.3 Benefici apportati all'applicazione del <strong>sistema</strong> <strong>di</strong>memorizzazione dei fotogrammi . . . . . . . . . . . . . . . . 1447.5 Secondo sotto-<strong>di</strong>alogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1457.5.1 Visualizzazione della lista <strong>di</strong> coppie <strong>di</strong> filename . . . . 1467.5.2 Conferma delle singole coppie <strong>di</strong> immagini . . . . . . . . 1477.5.3 Selezione delle opzioni . . . . . . . . . . . . . . . . . . . . . . . . 1497.6 Stereo-<strong>calibrazione</strong> e visualizzazione dei risultati . . . . . . . . 1507.6.1 Pressione del tasto “ Calibrazione” . . . . . . . . . . . . . . . 1507.6.2 Conferma dei Risultati . . . . . . . . . . . . . . . . . . . . . . . . 1528 Sviluppo <strong>di</strong> <strong>un</strong>'applicazione per il tracciamento <strong>di</strong> <strong>un</strong> oggettosferico nello spazio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568.1 Parametri della Circle Hough Transform . . . . . . . . . . . . . . 1568.2 Oggetto in movimento in <strong>un</strong>a scena reale . . . . . . . . . . . . . . 1588.3 Utilizzo <strong>di</strong> filtri <strong>di</strong> tonalità . . . . . . . . . . . . . . . . . . . . . . . . . . 1598.4 Estrazione delle coor<strong>di</strong>nate 3 D . . . . . . . . . . . . . . . . . . . . . . 1638.5 Verifica dell'accuratezza dei risultati . . . . . . . . . . . . . . . . . . 1639 Conclusioni e sviluppi futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689.1 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689.2 Sviluppi futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1707


IntroduzioneNegli ultimi decenni si è assistito ad <strong>un</strong> rapido sviluppo della <strong>visione</strong>computazionale che ha reso verosimile il tentativo <strong>di</strong> imitare la capacitàdelle specie animali più evolute <strong>di</strong> ricostruire l'ambiente tri<strong>di</strong>mensionale.Nuovi meto<strong>di</strong> ed algoritmi nel riconoscimento <strong>di</strong> oggetti e nellaricostruzione <strong>di</strong> scene e modelli 3D stanno aprendo la strada a nuoveapplicazioni.In campo industriale si sta affermando l'utilizzo <strong>di</strong> sistemi <strong>di</strong> <strong>visione</strong>computazionale [Scaramuzza 2003] [Trucco-98] per:• controllo <strong>di</strong> qualità, allo scopo <strong>di</strong> identificare <strong>di</strong>fetti e garantire ilrispetto delle tolleranze;• navigazione e coor<strong>di</strong>nazione <strong>di</strong> robot me<strong>di</strong>ante asservimentovisuale;• riconoscimento <strong>di</strong> oggetti per classificazione.Impieghi altrettanto importanti si trovano nella video-sorveglianza, graziealla possibilità <strong>di</strong> riconoscere volti, in ambiente militare e spaziale, nellarobotica chirurgica nonché nello sviluppo <strong>di</strong> intelligenze artificiali e realtàvirtuali.Questa ampia varietà <strong>di</strong> applicazioni che sta emergendo conta sul fatto chela cattura dell'informazione dall'ambiente è sempre più veloce, efficienteed a basso costo.La crescente capacità <strong>di</strong> elaborazione dei processori e la <strong>di</strong>minuzione delcosto delle webcam rende accessibile sia ai ricercatori che agli studenti la8


strumentazione che in passato era prerogativa soltanto <strong>di</strong> coloro che eranospecializzati nel settore. Lo studente che non è ancora esperto in questetecniche non ha <strong>di</strong>fficoltà nell'allestire la strumentazione per lo sviluppo <strong>di</strong><strong>un</strong> <strong>sistema</strong> <strong>di</strong> <strong>visione</strong> stereoscopico perciò i suoi sforzi saranno rivolti allacomprensione degli aspetti matematici e all'implementazione deglialgoritmi alla base della computer vision.Per rendere ancor più alla portata <strong>di</strong> tutti la <strong>visione</strong> artificiale, si è spostatal'attenzione verso la facilità <strong>di</strong> utilizzo del software e la sua imme<strong>di</strong>atacomprensione. In tale <strong>di</strong>rezione vanno lo sviluppo delle librerie OpenCV e<strong>di</strong> altri software come l'Image Processing Toolbox <strong>di</strong> Matlab che facilitanol'approccio ad <strong>un</strong>a materia che può risultare ostica per la complessità deglialgoritmi e per le profonde basi geometriche.Questi software, trattando alc<strong>un</strong>i aspetti come black box, celano all'utentegli aspetti più <strong>di</strong>fficili e spostano l'impegno verso lo sviluppo <strong>di</strong> nuoveapplicazioni.In questa tesi viene illustrata la progettazione <strong>di</strong> <strong>un</strong> <strong>sistema</strong> <strong>di</strong> <strong>visione</strong>stereoscopico e la <strong>realizzazione</strong> <strong>di</strong> <strong>un</strong> software user friendly per ilprocessamento delle scene, la <strong>calibrazione</strong> <strong>di</strong> <strong>un</strong>a coppia <strong>di</strong> telecamere el'analisi stereo. Come esempio applicativo viene proposto ilriconoscimento <strong>di</strong> <strong>un</strong> oggetto sferico nello spazio e il calcolo delle suecoor<strong>di</strong>nate spaziali, nonché della <strong>di</strong>mensione del suo raggio attraverso larettificazione delle immagini e la triangolazione.9


Capitolo 1Nozioni Preliminari1.1 Visione computazionaleLa <strong>visione</strong> computazionale è la scienza che si occupa dell'analisi delleimmagini attraverso <strong>un</strong> calcolatore allo scopo <strong>di</strong> determinare le proprietàgeometriche, fisiche e <strong>di</strong>namiche del mondo che ci circonda.Lo scopo ultimo della Computer vision è quello <strong>di</strong> creare <strong>un</strong> modello delmondo reale, riconoscere e classificare gli oggetti che ne fanno parte edestrarre le relazioni spaziali e logiche esistenti tra <strong>di</strong> essi. La comprensionedello spazio tri<strong>di</strong>mensionale può essere considerata <strong>un</strong> problema <strong>di</strong> altolivello a cui si può gi<strong>un</strong>gere soltanto <strong>un</strong>a volta affrontati problemi <strong>di</strong> piùbasso livello ovvero l'estrazione delle proprietà geometriche e fisichedell’ambiente visibile, come i contorni degli oggetti, la loro forma eposizione.L'inizio delle ricerche sull'intelligenza artificiale si fa spesso risalire al1950 con la formulazione del test <strong>di</strong> Turing. In questo senso la <strong>visione</strong>artificiale può essere considerata come <strong>un</strong>a branca dell'intelligenzaartificiale in quanto si potrebbe formulare <strong>un</strong> test che giu<strong>di</strong>chi“intelligente” <strong>un</strong>a macchina in grado <strong>di</strong> rendersi consapevole del mondoche la circonda in modo in<strong>di</strong>stinguibile da <strong>un</strong> essere umano.I cosiddetti chatterbot, seppur non a l<strong>un</strong>go, riescono talvolta ad ingannare iloro interlocutori, <strong>di</strong>mostrando <strong>un</strong>a capacità <strong>di</strong> utilizzo del linguaggio10


naturale molto vicina a quella umana. La vista è il senso che ci permette <strong>di</strong>conoscere meglio il mondo [Aristotele, incipit della Metafisica]; lecapacità dei calcolatori sono tuttavia molto <strong>di</strong>stanti da quelle umane perquanto riguarda la comprensione del mondo esterno. Un computer cheanalizzi <strong>un</strong>'immagine in modo da essere consapevole dello spazio da essarappresentato e delle interazioni oggetto-oggetto e oggetto-scena habisogno <strong>di</strong> <strong>un</strong>a quantità <strong>di</strong> elaborazione assai maggiore <strong>di</strong> quella necessariaper l'interrogazione linguistica <strong>di</strong> <strong>un</strong> database [Koch-Tononi-2008].La <strong>di</strong>stanza tra le capacità umane e quelle delle macchine non sta nelnumero <strong>di</strong> informazioni elaborate, ma nella capacità <strong>di</strong> integrarle. Un<strong>sistema</strong> <strong>di</strong> <strong>visione</strong> artificiale moderno è oggi in grado <strong>di</strong> <strong>di</strong>stinguere <strong>un</strong>amolteplicità <strong>di</strong> oggetti in <strong>un</strong>a scena con <strong>un</strong> <strong>di</strong>screto grado <strong>di</strong> complessità,ma non è in grado <strong>di</strong> metterli in relazione tra <strong>di</strong> loro e <strong>di</strong> confrontarli conaltre immagini viste in precedenza. Il cervello umano mette in relazione leinformazioni a molteplici livelli; non solo <strong>di</strong>stingue colore, posizione eforma <strong>di</strong> <strong>un</strong> singolo oggetto, ma <strong>un</strong>isce tutte le informazioni in <strong>un</strong>'<strong>un</strong>icascena dalla quale estrae le informazioni che ritiene più importanti in quelmomento.1.2 La percezione visivaLa <strong>visione</strong> è l'insieme dei processi <strong>di</strong> registrazione, elaborazione,trasmissione ed interpretazione degli stimoli luminosi, che portano allapercezione delle immagini ed all'analisi delle loro caratteristiche. Talistimoli luminosi derivano dalla percezione della ra<strong>di</strong>azione11


elettromagnetica appartenente al visibile <strong>di</strong> l<strong>un</strong>ghezza d'onda compresa tra350 nm e 780 nm emessi da <strong>un</strong>a sorgente luminosa oppure derivante daluce riflessa. [UTET-91].Illustrazione 1: Sezione trasversale <strong>di</strong> <strong>un</strong> occhio umanoNegli animali il principale organo deputato alla <strong>visione</strong> è l'occhio. Inparticolare la luce entra nell'occhio umano attraverso la cornea, <strong>un</strong>amembrana trasparente che ha la f<strong>un</strong>zione <strong>di</strong> imprimere alle ra<strong>di</strong>azioniluminose che raggi<strong>un</strong>gono l’occhio la convergenza necessaria a esseredeviate sul cristallino, il quale costituisce la lente biologica che faconvergere le immagini su <strong>un</strong>'altra sottile membrana trasparente cheriveste la superficie interna del globo oculare, la retina.La retina è composta da coni e bastoncelli, due tipi <strong>di</strong> fotorecettori chetrasformano gli stimoli luminosi in segnali nervosi e li inviano attraverso ilnervo ottico. I coni sono presenti maggiormente nella zona centrale della12


etina, detta macula, risultano sensibili solo a luci piuttosto intense e sonoresponsabili della <strong>visione</strong> dei colori. I bastoncelli sono più numerosi nellezone periferiche, aiutano la <strong>visione</strong> notturna essendo particolarmentesensibili a basse intensità <strong>di</strong> luce e allargano il campo visivo. Pertanto, iconi operano soprattutto in con<strong>di</strong>zione <strong>di</strong> luce piena, mentre i bastoncellipermettono la <strong>visione</strong> anche quando la luce è scarsa. La luce percepita dal<strong>sistema</strong> visivo umano provoca tre sensazioni principali: luminosità,tonalità e saturazione.La luminosità (brightness) è <strong>di</strong> solito fisicamente correlata alla intensità <strong>di</strong>ra<strong>di</strong>azione luminosa, mentre la tonalità (hue) con la l<strong>un</strong>ghezza d'onda.Questa corrispondenza tuttavia non è esatta in quanto oggetti con lamedesima intensità possono apparire all'occhio umano <strong>di</strong> <strong>di</strong>fferenteluminosità. Inoltre con tonalità noi inten<strong>di</strong>amo la <strong>di</strong>stinzione tra i varicolori derivante dalla interazione delle tre <strong>di</strong>fferenti tipologie <strong>di</strong> coni,responsabili rispettivamente della <strong>visione</strong> dei tre colori primari (rosso,verde e blu).In realtà non esiste <strong>un</strong>a corrispondenza bi<strong>un</strong>ivoca tra colore e l<strong>un</strong>ghezzad'onda, infatti raggi luminosi <strong>di</strong> <strong>di</strong>fferente l<strong>un</strong>ghezza d'onda possonorisultare alla vista con la stessa tonalità e, allo stesso tempo, è necessariocombinare fasci <strong>di</strong> luce <strong>di</strong> <strong>di</strong>fferente l<strong>un</strong>ghezza d'onda per produrre alc<strong>un</strong>etonalità.Alla saturazione solitamente non è associata alc<strong>un</strong>a grandezza fisicaquantitativa in quanto essa in<strong>di</strong>ca il candore della sorgente luminosa.13


1.3 Formazione dell’immagineSi può facilmente constatare come la progettazione delle telecamere si siaispirata alla fisiologia dell'occhio umano, infatti esso è composto da <strong>un</strong><strong>sistema</strong> <strong>di</strong> lenti, da <strong>un</strong> <strong>di</strong>aframma (iride) e <strong>un</strong>'area fotosensibile.Illustrazione 2: Struttura <strong>di</strong> <strong>un</strong>a telecameraIn uscita dall'occhio partono attraverso le fibre del nervo ottico <strong>un</strong>a serie <strong>di</strong>segnali bioelettrici che vengono trasmessi al calcolatore neuralerappresentato dal nostro cervello. Inoltre, l'occhio può percepire i trecolori primari (rosso, verde e blu).Una telecamera è <strong>un</strong> <strong>di</strong>spositivo che memorizza l'intensità <strong>di</strong> ra<strong>di</strong>azioneluminosa in f<strong>un</strong>zione della posizione grazie all'utilizzo <strong>di</strong> <strong>un</strong> <strong>sistema</strong> <strong>di</strong>14


acquisizione dell’immagine (imaging). Questo complesso <strong>sistema</strong> puòschematicamente considerarsi costituito da <strong>un</strong>a lente, <strong>un</strong> <strong>di</strong>aframma, <strong>un</strong><strong>di</strong>visore <strong>di</strong> luce, <strong>un</strong> sensore fotosensibile e dei <strong>di</strong>spositivi elettronici. Lalente fa convergere la ra<strong>di</strong>azione nel centro ottico della lente detto fuoco ocentro <strong>di</strong> proiezione, che verrà in seguito in<strong>di</strong>cato con Oc.1.4 Foto sensoriIl cuore <strong>di</strong> ogni telecamera <strong>di</strong>gitale è il sensore, cioè il <strong>di</strong>spositivo che converte le lucein cariche elettriche, per trasformarle poi in informazioni <strong>di</strong>gitali. La superficie, chepossiamo approssimativamente considerare piana, del <strong>di</strong>spositivo foto-rilevatore vienedetta piano immagine. La maggior parte delle telecamere oggi in commerciosi basano su sensori allo stato solido, realizzati con chip <strong>di</strong> silicio, mentre i<strong>di</strong>spositivi basati sulla tecnologia a tubo cato<strong>di</strong>co sono <strong>di</strong>venuti obsoletidagli anni '90 e hanno oramai <strong>un</strong> interesse soltanto storico [Di Stefano].Tra i sensori allo stato solido le tecnologie più <strong>di</strong>ffuse sono la tecnologiaCCD (Charge-Coupled Devices) e CMOS (Complementary Metal-Oxide-Semiconductor). Entrambi i sensori sfruttano l'effetto fotoelettrico, vale a<strong>di</strong>re il fenomeno fisico per cui quando dei raggi <strong>di</strong> luce colpiscono gliatomi sulla superficie <strong>di</strong> <strong>un</strong> materiale, questi salgono ad <strong>un</strong> livelloenergetico superiore. Per alc<strong>un</strong>i materiali gli elettroni orbitanti possonoanche oltrepassare l'orbita stabile più grande <strong>di</strong>venendo liberi <strong>di</strong> muoversiall'interno del materiale. Questo fenomeno permette ad ogni elementofotosensibile <strong>di</strong> convertire l'energia luminosa in energia elettrica che a suavolta viene co<strong>di</strong>ficata in informazione <strong>di</strong>gitale anche attraverso <strong>un</strong>15


processore numerico.1.4.1 SemiconduttoriAlla base dei circuiti elettronici, e quin<strong>di</strong> anche dei sensori CMOS e CCD,stanno le proprietà dei semiconduttori, in particolare quella <strong>di</strong> comportarsia basse temperature come isolanti, ma se forniti <strong>di</strong> energia come quellatermica o luminosa si comportano in maniera prossima ad <strong>un</strong> metallo, convalori <strong>di</strong> conducibilità elettrica non nulli.Nei semiconduttori intrinseci, come germanio e silicio puri, che hanno <strong>un</strong>astruttura regolare <strong>di</strong>rezionale a reticolo e legami covalenti i cui livelli sonocompleti, basta il contributo <strong>di</strong> energia termica dovuto alla temperaturaambiente per spezzare il legame covalente e far saltare <strong>un</strong> elettrone verso<strong>un</strong> livello energetico libero. Ciò corrisponde al fatto che quell’elettrone è16


passato dalla banda con energia più bassa (banda <strong>di</strong> valenza) alla bandalibera, superando la banda <strong>di</strong> conduzione, cioè quella più alta in energia fraquelle non occupate da elettroni. Nella banda <strong>di</strong> valenza viene così amancare <strong>un</strong> elettrone, la lac<strong>un</strong>a che si genera corrisponde in quella zona ad<strong>un</strong>a area sostanzialmente a polarità positiva, che facilmente attrarrà <strong>un</strong>altro elettrone. Lac<strong>un</strong>e ed elettroni si generano continuamente a coppie inseguito alla rottura <strong>di</strong> legami covalenti per effetto della agitazione termicae scompaiono a coppie, quando <strong>un</strong>a lac<strong>un</strong>a ed <strong>un</strong> elettrone si ricombinanoa riformare <strong>un</strong> legame covalente. Se <strong>un</strong> reticolo <strong>di</strong> materialesemiconduttore tetravalente viene drogato con <strong>un</strong> altro materialesemiconduttore pentavalente (Fosforo, Arsenico) o trivalente (Boro,Alluminio, Gallio, In<strong>di</strong>o) si ottiene <strong>un</strong> semiconduttore estrinseco e puòavvenire nel primo caso che venga rilasciato <strong>un</strong> elettrone dall'atomo delmateriale dopante pentavalente avendo il quinto elettrone spaiato che devecompiere <strong>un</strong> basso salto energetico per passare al <strong>di</strong> sopra del livello <strong>di</strong>conduzione del materiale principale, mentre nel secondo caso incorrispondenza della lac<strong>un</strong>a introdotta dal trivalente è basso il saltoenergetico che <strong>un</strong> elettrone del materiale principale deve fare perraggi<strong>un</strong>gere il livello energetico vuoto corrispondente al suo livello <strong>di</strong>conduzione. Nel primo caso si hanno semiconduttori <strong>di</strong> tipo n il cui livello<strong>di</strong> partenza dell’elettrone si <strong>di</strong>ce livello donatore. Nel secondo caso sihanno semiconduttori <strong>di</strong> tipo p in cui il livello della lac<strong>un</strong>a si <strong>di</strong>ce livelloaccettore.In presenza <strong>di</strong> <strong>un</strong> campo elettrico si stabilisce <strong>un</strong>a corrente <strong>di</strong> deriva (drift17


current), analogamente a quanto avviene nei metalli, a cui si aggi<strong>un</strong>ge <strong>un</strong>secondo meccanismo legato alla <strong>di</strong>ffusione, il quale invece è irrilevante neimetalli, per cui anche in assenza <strong>di</strong> <strong>un</strong> campo elettrico il gra<strong>di</strong>ente <strong>di</strong>concentrazione dei portatori <strong>di</strong> carica dà origine a densità <strong>di</strong> corrente.Mo<strong>di</strong>ficando il drogaggio si può mo<strong>di</strong>ficare la conduttività deisemiconduttori e questo è il principale motivo per cui sono così utili.1.4.2 Il Dispositivo MOSIl nucleo dei sensori CCD e CMOS è costituito dal condensatore MOS(Metal-Oxid-Semiconductor) formato da <strong>un</strong> substrato <strong>di</strong> semiconduttoredrogato e da <strong>un</strong>'armatura, consistente in <strong>un</strong>o strato metallico, detta gate,separate tra loro da <strong>un</strong> ossido isolante.Illustrazione 3: Struttura <strong>di</strong> <strong>un</strong> condensatore MOS18


Il substrato <strong>di</strong> silicio presenta <strong>un</strong>a <strong>di</strong>stribuzione <strong>un</strong>iforme <strong>di</strong> lac<strong>un</strong>e che, seviene applicato <strong>un</strong> potenziale esterno ai capi dell'elettrodo metallico e delsubstrato, tendono ad allontanarsi dall'elettrodo. Si crea così <strong>un</strong>a zona <strong>di</strong>svuotamento associata ad <strong>un</strong>a buca <strong>di</strong> potenziale che va sempre più inprofon<strong>di</strong>tà con l'aumentare del valore della <strong>di</strong>fferenza <strong>di</strong> potenziale.Il processo <strong>di</strong> svuotamento termina quando la buca <strong>di</strong> potenziale è tantoprofonda da attirare nella zona in cui il potenziale è minimo, vale a <strong>di</strong>re incorrispondenza della gi<strong>un</strong>zione tra semiconduttore e ossido, <strong>un</strong>o strato <strong>di</strong>elettroni detto strato <strong>di</strong> inversione.1.4.3 La Gi<strong>un</strong>zione P-NUn altro aspetto in com<strong>un</strong>e è l'utilizzo della gi<strong>un</strong>zione P-N, formata dalcontatto <strong>di</strong> <strong>un</strong>a regione <strong>di</strong> tipo P con <strong>un</strong>a <strong>di</strong> tipo N in modo che si passirapidamente dalla regione con atomi accettori, e quin<strong>di</strong> ricca <strong>di</strong> portatori <strong>di</strong>carica positivi (lac<strong>un</strong>e), alla regione con donatori e ricca <strong>di</strong> portatori <strong>di</strong>carica negativi (elettroni). Nella gi<strong>un</strong>zione si vengono quin<strong>di</strong> ad averefortissimi gra<strong>di</strong>enti <strong>di</strong> concentrazione che attivano <strong>un</strong> flusso elettronicodalla zona N alla zona P che, raggi<strong>un</strong>to il p<strong>un</strong>to <strong>di</strong> equilibrio elettrostatico,determina <strong>un</strong> eccesso <strong>di</strong> carica positiva nella zona n creando inoltre <strong>un</strong>aregione interme<strong>di</strong>a detta zona <strong>di</strong> svuotamento o <strong>di</strong> carica spaziale. Ilrisultato è <strong>un</strong> campo elettrico interno al <strong>di</strong>spositivo.1.4.4 Charged Coupled DevicesUn rilevatore <strong>di</strong> fotoni CCD è costituito da <strong>un</strong>a matrice <strong>di</strong> condensatori19


MOS foto-sensibili che catturano e immagazzinano l'informazione nellaforma <strong>di</strong> carica elettrica localizzata la quale varia con l'intensità luminosaincidente. La matrice <strong>di</strong> sottili strati <strong>di</strong> silicio (wafer) è ripartita da <strong>un</strong>agriglia ortogonale <strong>di</strong> strette strisce <strong>di</strong> elettro<strong>di</strong> sotto carico, o Gate,depositata sul chip la quale definisce i singoli elementi dell'immagine dettipixel [K. R. Spring].Per non a<strong>di</strong>bire dell'elettronica <strong>di</strong> misura per ogni condensatore, la quantità<strong>di</strong> carica non viene misurata sul singolo MOS, ma viene trasferitaattraverso più condensatori contigui fino ad <strong>un</strong>ico nodo <strong>di</strong> lettura.Illustrazione 4: Flusso <strong>di</strong> carica me<strong>di</strong>ante modulazione del potenzialePer trasferire il pacchetto <strong>di</strong> carica immagazzinato nel condensatore apotenziale più basso in <strong>un</strong> condensatore a<strong>di</strong>acente occorre applicare al suo20


Gate <strong>un</strong>a tensione più positiva in modo che le cariche migrino verso <strong>di</strong>esso. Dopo che il trasferimento <strong>di</strong> carica da <strong>un</strong> elettrodo all'altro èavvenuto si può riportare entrambe le tensioni a valori inferiori, in mododa consentire con le stesse tensioni <strong>un</strong> successivo trasferimento. Quin<strong>di</strong>,terminato l’intervallo <strong>di</strong> esposizione, ogni condensatore trasferisce lacarica al suo vicino operando come <strong>un</strong> registro a scorrimento. L'ultimocondensatore svuota il carico in <strong>un</strong> amplificatore <strong>di</strong> carica che lo convertein voltaggio. Per evitare che la carica si <strong>di</strong>sperda in <strong>di</strong>rezione ortogonalealla linea <strong>di</strong> elettro<strong>di</strong> vengono <strong>di</strong>sposti degli impianti <strong>di</strong> lac<strong>un</strong>e ad altaconcentrazione che formano due “barriere” dette channel stops. Mentre glielementi fotosensibili accumulano la carica relativa al nuovo ciclo, ilcontenuto del CCD shift-register viene trasferito all’esterno generando <strong>un</strong>segnale che rispetta <strong>un</strong>o degli standard video.Nel CCD così descritto, chiamato surface channel, la <strong>di</strong>fferenza tra ireticoli del semiconduttore e dell'isolante creano delle imperfezioni cheproducono <strong>un</strong>a notevole per<strong>di</strong>ta <strong>di</strong> carica e rumore. Nel CCD <strong>di</strong> tipo buriedchannel si è sud<strong>di</strong>viso il substrato del semiconduttore creando <strong>un</strong>agi<strong>un</strong>zione P-N che trasporta la carica con minore rumore e maggiorefficienza.La matrice <strong>di</strong> acquisizione immagini f<strong>un</strong>ziona nel seguente modo:• Fase 1: scarica tutti i pixel del CCD.• Fase 2: esposizione alla luce dei pixel• Fase 3: Trasferimento <strong>di</strong> carica orizzontale• Fase 4: Trasferimento <strong>di</strong> carica verticale21


• Fase 5: Amplificazione delle cariche elettriche• Fase 6: Conversione dei segnali elettrici in <strong>un</strong>a immagine.1.4.5 Complementary metal-oxide semiconductorI sensori per l'acquisizione <strong>di</strong> immagini CMOS sono così chiamati poichésfruttano la tecnologia Complementary Metal Oxide Semiconductorutilizzata per la progettazione <strong>di</strong> circuiti integrati. Il suo più importantevantaggio è quello del basso costo grazie alla possibilità <strong>di</strong> utilizzare<strong>un</strong>'<strong>un</strong>ica linea <strong>di</strong> produzione con altri <strong>di</strong>spositivi <strong>di</strong>gitali essendo analogo ilprocesso <strong>di</strong> fabbricazione <strong>di</strong> microprocessori, memorie e altri chip.Illustrazione 5: Architettura <strong>di</strong> <strong>un</strong> sensore CMOS22


Mentre in <strong>un</strong> sensore CCD il foto<strong>di</strong>odo si comporta come <strong>un</strong> condensatore,nel CMOS si comporta come <strong>un</strong> generatore <strong>di</strong> corrente [Xie-2003].Un sensore CMOS generalmente è costituito da <strong>un</strong>'area <strong>di</strong> acquisizioneimmagine che consiste in <strong>un</strong>a matrice <strong>di</strong> active pixel sensors (APS) nellaquale sono incorporati in ogni pixel sia il foto<strong>di</strong>odo che dei transistor ingrado <strong>di</strong> resettare il foto<strong>di</strong>odo, convertire la carica elettrica in <strong>un</strong>a tensionemisurabile, amplificare il segnale (source follower) e ridurre il rumore. Aquesti si aggi<strong>un</strong>gono anche dei circuiti ad accesso orizzontale e verticale edei circuiti <strong>di</strong> lettura che servono per accedere a <strong>un</strong> pixel e a leggerne ilvalore del segnale oltre a dei circuiti <strong>di</strong> <strong>di</strong>gitalizzazione [Otha 2007].Questo tipo <strong>di</strong> architettura consente <strong>un</strong> in<strong>di</strong>rizzamento più semplice adogni pixel rispetto ai CCD, tuttavia questi transistor <strong>di</strong> supporto nonpossono essere utilizzati per la rilevazione <strong>di</strong> fotoni, perciò la percentualedell'area <strong>di</strong> <strong>un</strong> fotosito che risulta utile per raccogliere la luce, detta "fillfactor" (fattore <strong>di</strong> riempimento), è soltanto il 30% dell'area totale.La conseguenza è <strong>un</strong>a per<strong>di</strong>ta significativa <strong>di</strong> sensibilità, <strong>un</strong>acorrispondente riduzione del rapporto segnale-rumore ed <strong>un</strong>a limitatagamma <strong>di</strong>namica. Un sensore CCD ha <strong>un</strong> fill factor del 100%, <strong>un</strong> sensoreCMOS molto meno. In ogni caso, se ben progettati, sia i sensori CCD cheCMOS possono offrire <strong>un</strong>'eccellente qualità dell'immagine.Nel f<strong>un</strong>zionamento <strong>di</strong> <strong>un</strong> CMOS il primo passo è quello <strong>di</strong> inizializzare iltransistor <strong>di</strong> reset al fine <strong>di</strong> smaltire la carica della regione fotosensibile.Successivamente per effetto fotoelettrico vengono prodotti elettroni chevengono immagazzinati nella buca <strong>di</strong> potenziale sotto la superficie.23


Terminato il tempo <strong>di</strong> esposizione, che <strong>di</strong>pende dall'intensità <strong>di</strong> luce, lecariche su ogni colonna vengono convertite in <strong>un</strong>a voltaggio dal sourcefollower de<strong>di</strong>cato.1.4.6 Confronto fra CCD e CMOSOgn<strong>un</strong>a delle due tecnologie mostra vantaggi e svantaggi che la rendonopiù adatta per certe applicazioni e non altre.Le <strong>di</strong>fferenze principali sonno schematizzate nella seguente tabella:CARATTERISTICA CCD CMOSOUTPUTFOTODIODOcarica elettricavoltaggioOUTPUT DEL CHIP voltaggio (analogico) bit (<strong>di</strong>gitale)RUMORE basso moderatoCOMPLESSITàCOSTRUTTIVAPRECISIONECROMATICAFATTORE DIRIEMPIMENTOCONSUMO DIENERGIAbassaaltaaltoaltoaltame<strong>di</strong>amoderatobassoCOSTO RELATIVO me<strong>di</strong>o - alto me<strong>di</strong>o - bassoDIMENSIONEOCCUPATAme<strong>di</strong>o - bassabassa24


1.5 Image ProcessingLa percezione visuale artificiale consiste in <strong>un</strong> processo <strong>di</strong> informazioneche prende immagini <strong>di</strong>gitali come input e produce descrizioni deglioggetti in <strong>un</strong>a scena come output [Xie-2003].Illustrazione 6: Flusso <strong>di</strong> informazioni in <strong>un</strong> <strong>sistema</strong> <strong>di</strong> percezione visualeEssa sfrutta in prima istanza le proprietà d'aspetto come crominanza,luminanza e tessitura (texture), contenute esplicitamente nelle immagini<strong>di</strong>gitali a colori, per poter effettuare <strong>un</strong>a elaborazione dell'immagine inmodo da rilevare la continuità, la <strong>di</strong>scontinuità e l'<strong>un</strong>iformità nelle25


proprietà d'aspetto stesse.Una volta terminato l'image processing è possibile estrarre i p<strong>un</strong>ti salienti,chiamati in letteratura in vari mo<strong>di</strong>: features, keypoints o con i corrispettiviin lingua madre. Attraverso le features si ricavano le proprietà geometrichedella scena, in termini <strong>di</strong> posizione, forma e moto.1.5.1 Rumore nelle immaginiNella computer vision, come in molte altre attività scientifiche, èimportante attenuare quelle entità nei dati e nei risultati che ne possonodegradare la qualità e che non sono <strong>di</strong> interesse.In genere, in assenza <strong>di</strong> informazioni, si ipotizza che il rumoredell'immagine n(i,j) sia ad<strong>di</strong>tivo e casuale così che l'immagine risultantesia data dalla somma dell'immagine “vera” più il contributo del rumore perogni pixel in posizione (i,j). Inoltre si assume che n(i,j) sia caratterizzatodall'assenza <strong>di</strong> perio<strong>di</strong>cità nel tempo e da ampiezza costante su tutto lospettro <strong>di</strong> frequenze, cioè si tratti <strong>di</strong> rumore bianco e che segua <strong>un</strong>af<strong>un</strong>zione <strong>di</strong> <strong>di</strong>stribuzione Gaussiana a me<strong>di</strong>a zero <strong>di</strong> deviazione standardfissa. Questo garantisce bassi livelli <strong>di</strong> rumore ed è ciò che ci si aspetta da<strong>un</strong> buon <strong>sistema</strong> <strong>di</strong> acquisizione [Trucco-98].1.5.2 Riduzione del rumoreNel caso specifico si vuole cercare <strong>un</strong> filtro che attenui il più possibile ilrumore in <strong>un</strong>'immagine senza alterarla. Il metodo più com<strong>un</strong>e è losmoothing che consiste nell'utilizzare <strong>un</strong> filtro lineare che si ottiene dalla26


convoluzione tra l'immagine ed <strong>un</strong>a matrice costante detta maschera ofinestra, allo scopo <strong>di</strong> produrre <strong>un</strong>a sfocatura in grado <strong>di</strong> celare le repentinevariazioni <strong>di</strong> rapi<strong>di</strong>tà. Se sono esatte le ipotesi fatte sul tipo <strong>di</strong> rumore,questo può essere ridotto attraverso <strong>un</strong>a me<strong>di</strong>a sul vicinato (neighborhoodaveraging) che si può ottenere semplicemente utilizzando <strong>un</strong>a maschera <strong>di</strong>valori non negativi. Con questo metodo in genere si ha per<strong>di</strong>ta <strong>di</strong>informazione, in quanto vengono perse le frequenze con<strong>di</strong>vise con ilrumore rendendo l'immagine sfocata e <strong>di</strong>ffondendo allo stesso tempo ilrumore impulsivo.Illustrazione 7: Distribuzione gaussiana bi<strong>di</strong>mensionale27


Se i valori della maschera sono calcolati a partire dalla <strong>di</strong>stribuzioneGaussiana 2D si parla <strong>di</strong> Gaussian smoothing.La <strong>di</strong>stribuzione Gaussiana bi<strong>di</strong>mensionale si può ottenere dal prodotto <strong>di</strong>singole <strong>di</strong>stribuzioni mono<strong>di</strong>mensionali:G x , y= 1e − 1 2 x− x x 2 x2⋅12e −1 y− y y 2 y21= e2 x y− 1 2[ x− x x2 y− y y2 ](1.1)Se poniamo entrambi i valori me<strong>di</strong> a zero e ipotizziamo che le deviazionistandard l<strong>un</strong>go le due <strong>di</strong>mensioni siano identiche otteniamo la f<strong>un</strong>zionesemplificata.G x , y= 11 x 2 y 22 2 e− 2 2 (1.2)Una Gaussiana non è mai nulla, ma è prossima a zero a partire da tredeviazioni standard dalla me<strong>di</strong>a, perciò troncando adeguatamente i valorisi può ottenere <strong>un</strong>a finestra <strong>di</strong> <strong>di</strong>mensioni opport<strong>un</strong>e.1.6 Estrazione <strong>di</strong> feature da immaginiLe immagini <strong>di</strong>gitali acquisite dai sistemi <strong>di</strong> <strong>visione</strong> <strong>di</strong>pendono dallaprospettiva e dalla illuminazione perciò le cause com<strong>un</strong>i per la<strong>di</strong>scontinuità in <strong>un</strong>a immagine sono dovute ai contorni delle superfici, alleombre e alle occlusioni.Possiamo definire formalmente <strong>un</strong>a feature come qualsiasi <strong>di</strong>scontinuità o<strong>un</strong>iformità che sia significativa e utile [Xie-2003].Uno dei più gran<strong>di</strong> vantaggi dell'estrazione <strong>di</strong> feature sta nella significativa28


iduzione dell'informazione (comparata all'immagine originale) nellarappresentazione <strong>di</strong> <strong>un</strong>a immagine allo scopo <strong>di</strong> capirne il contenuto. Lamolteplicità <strong>di</strong> feature contenute in <strong>un</strong>a immagine, sommate alla presenza<strong>di</strong> rumore, rendono arduo il compito <strong>di</strong> progettare <strong>un</strong> filtro che sia in grado<strong>di</strong> isolare <strong>un</strong>a specifica caratteristica dalla scena. In genere se la qualitàdell'immagine non è buona è necessario ridurre il rumore esuccessivamente esaltare la caratteristica <strong>di</strong> interesse attraverso <strong>un</strong> filtrospecifico chiamato feature (o keypoint) detector che risponde in modo<strong>di</strong>verso a caratteristiche <strong>di</strong>verse. A questo p<strong>un</strong>to è possibile avviare <strong>un</strong>processo decisionale per la selezione delle caratteristiche desiderate.Una possibile <strong>di</strong>stinzione tra tipi <strong>di</strong> features estratte è quella tra GeneralFeatures e Domain Features [Lei-99]. Le prime sono dette descrittori <strong>di</strong>basso livello e sono in<strong>di</strong>pendenti dal contesto dell'immagine.Le Domain Features <strong>di</strong>pendono dal contesto dell'immagine e sonoutilizzate prevalentemente per il riconoscimento <strong>di</strong> volti (face recognition)e per l'analisi delle impronte <strong>di</strong>gitali (fingerprint identification). Qualora sivoglia identificare questo tipo <strong>di</strong> descrittori è necessaria l'analisi dellefeatures <strong>di</strong> basso livello, per tale motivo le Domain Features sono dette <strong>di</strong>alto livello.I descrittori <strong>di</strong> basso livello possono essere in generale classificati in 3 tipi:• Blob. Descrittori <strong>di</strong> livello zero, costituito da regioni <strong>un</strong>iformi,caratterizzate da ridotte variazioni dell’intensità.• Edge (spigolo). Descrittore <strong>di</strong> primo livello che si ha incorrispondenza <strong>di</strong> <strong>di</strong>scontinuità del gra<strong>di</strong>ente mono<strong>di</strong>rezionali.29


• Point features, o corner, sono p<strong>un</strong>ti <strong>di</strong>stinti dell’immaginelocalizzati in corrispondenza <strong>di</strong> <strong>di</strong>scontinuità bi<strong>di</strong>rezionali del gra<strong>di</strong>entedell’intensità luminosa. A seconda della forma ass<strong>un</strong>ta dal corner si<strong>di</strong>stinguono gi<strong>un</strong>zioni a T, Y, X o L.1.6.1 Edge detectionPer la rilevazione <strong>di</strong> feature <strong>di</strong> alto livello è fondamentale lasegmentazione dell'immagine per la quale l'edge detection gioca <strong>un</strong> ruolomolto importante. Un edge può essere considerato come <strong>un</strong> confine tra dueregioni <strong>di</strong>ssimili ed essenzialmente il contorno <strong>di</strong> <strong>un</strong> oggetto corrispondead <strong>un</strong> brusco cambiamento nei livelli <strong>di</strong> intensità. L'output dell'edgedetection dovrebbe essere <strong>un</strong>a mappa dei bor<strong>di</strong> nella quale il valore <strong>di</strong> ognipixel riflette quanto sono verificati i requisiti per essere parte <strong>di</strong> <strong>un</strong> bordoda parte del pixel corrispondente nell'immagine originale.1.6.1.1 Rilevazione dei bor<strong>di</strong> me<strong>di</strong>ante derivata primaPer rilevare la posizione <strong>di</strong> <strong>un</strong> bordo spesso è utilizzata la derivata delprimo or<strong>di</strong>ne, che è nulla in presenza <strong>di</strong> <strong>un</strong> segnale costante, mentredovrebbe presentare il massimo in presenza <strong>di</strong> <strong>un</strong> edge.La f<strong>un</strong>zione <strong>di</strong> magnitu<strong>di</strong>ne del gra<strong>di</strong>ente in <strong>un</strong>'immagine <strong>di</strong>gitalizzata puòessere così formulata:d x , y = x 2 y 2 (1.3)con30


x=I x1, y−I x , y y=I x , y1−I x , y(1.4)Spesso nell'image processing la derivata prima <strong>di</strong> <strong>un</strong>'immagine <strong>di</strong>gitaleviene effettuata attraverso la convoluzione con <strong>un</strong>a maschera chiamataedge operator.Per rilevare <strong>un</strong> edge in <strong>un</strong>a immagine reale è opport<strong>un</strong>o effettuare <strong>un</strong>apreliminare riduzione del rumore, dopo<strong>di</strong>ché si effettua la convoluzionecon l'edge operator e infine dall'output si eliminano i valori noncorrispondenti ai massimi.Illustrazione 8: Robert's Cross OperatorLe maschere più semplici per effettuare <strong>un</strong>a derivata del primo or<strong>di</strong>ne sonocostituite da <strong>un</strong> vettore [1,0,-1] per rilevare bor<strong>di</strong> orizzontali e dal suotrasposto per bor<strong>di</strong> verticali.Uno dei primi operatori utilizzati fu il Robert's Cross Operator che utilizza<strong>un</strong>a maschera 2×2 , ma poiché la derivata prima esalta il rumore,analogamente ad <strong>un</strong> filtro passa-alto, i successivi edge operator sonocostituiti da matrici 3×3 in modo da includere all'interno anche ilneighborhood averaging.Seguendo tale principio è stato ideato il filtro <strong>di</strong> Prewitt e il filtro <strong>di</strong> Sobel;31


quest'ultimo però pesa in modo <strong>di</strong>fferente i pixel in base alla <strong>di</strong>stanza dalpixel centrale.Illustrazione 9: Operatore <strong>di</strong> PrewittI filtri <strong>di</strong> Prewitt e Sobel mostrano degli output frammentati seppur benvisibili.Illustrazione 10: Operatore <strong>di</strong> Sobel1.6.1.2 Rilevazione dei bor<strong>di</strong> me<strong>di</strong>ante derivata del secondoor<strong>di</strong>neUn'alternativa alla ricerca dei massimi della derivata del primo or<strong>di</strong>ne èquella <strong>di</strong> trovare l'attraversamento dello zero nella derivata delsecond'or<strong>di</strong>ne. La derivata seconda può essere approssimata con la<strong>di</strong>fferenza tra le derivate del primo or<strong>di</strong>ne <strong>di</strong> due pixel a<strong>di</strong>acenti:32


f ' ' x≃ x− x1 (1.5)considerando la (1.4) si haf ' ' x≃− x2 x1− x2 (1.6)Illustrazione 11: Operatore LaplacianoUn operatore che utilizza la derivata del secondo or<strong>di</strong>ne è quelloLaplaciano che sfrutta le maschere, rappresentate nell'illustrazione 11,ottenute dalla combinazione del vettore [-1, 2, -1] in orizzontale, verticalee <strong>di</strong>agonale.Il laplaciano, non essendo utile per stabilire la <strong>di</strong>rezione <strong>di</strong> <strong>un</strong> edge, vieneutilizzato in genere per stabilire la posizione <strong>di</strong> <strong>un</strong>o spigolo che si facoincidere con lo zero crossing. Inoltre questo filtro non viene utilizzatoper il rilevamento dei bor<strong>di</strong> nella sua forma originale, sia perchéeccessivamente sensibile al rumore, sia per il fatto che produce dei doppibor<strong>di</strong> che complicano la segmentazione.In genere si effettua il Laplaciano della Gaussiana (LoG) (illustrazione 12)ottenuto facendo, preliminarmente al Laplaciano, <strong>un</strong>o smoothingGaussiano per ridurre il rumore e neutralizzare l'effetto <strong>di</strong> amplificazionedel rumore causato dalla derivata seconda.33


Illustrazione 12: Laplaciano della Gaussiana e maschera che ne approssima la forma1.6.1.3 Canny edge detectorCanny ha cercato <strong>di</strong> ottenere <strong>un</strong> rilevatore <strong>di</strong> bor<strong>di</strong> che fosse in grado <strong>di</strong>verificare i seguenti requisiti [Canny-83]:1. Buon riconoscimento: rilevare il maggior numero possibile <strong>di</strong>spigoli nell'immagine2. Buona localizzazione: i contorni rilevati devono essere il più vicinopossibile ai contorni reali dell'immagine.3. Singola risposta: Per ogni edge reale c'è solo <strong>un</strong>a risposta, vale a <strong>di</strong>reche non è permessa la rilevazione <strong>di</strong> “falsi” edge.4. Massimizzare il rapporto segnale-rumore.34


5. Minimizzare la <strong>di</strong>stanza della ra<strong>di</strong>ce della me<strong>di</strong>a dei quadratidell'edge rilevato dal centro del vero edge.6. Minimizzare la <strong>di</strong>stanza me<strong>di</strong>a tra i massimi locali causati dalrumoreL'algoritmo inizia con <strong>un</strong>o smoothing Gaussiano, <strong>di</strong> cui la <strong>di</strong>mensionedella maschera è <strong>un</strong>o dei parametri arbitrari, per ridurre il rumore seguitodall'applicazione <strong>di</strong> quattro filtri per in<strong>di</strong>viduare gli spigoli nelle <strong>di</strong>rezioniprincipali. Il filtro che ottiene il valore più grande corrisponde al massimogra<strong>di</strong>ente <strong>di</strong> luminosità e quin<strong>di</strong> stabilisce la <strong>di</strong>rezione dell'edge per <strong>un</strong>ospecifico pixel.A questo p<strong>un</strong>to vanno selezionati i massimi locali che in generecorrispondono ai bor<strong>di</strong>, ma a <strong>di</strong>fferenza degli algoritmi precedenti inquesto caso si utilizza <strong>un</strong> threshol<strong>di</strong>ng con due soglie. La soglia inferioreserve ad eliminare tutti i valori troppo piccoli, quella superiore invece<strong>di</strong>vide i pixel tra quelli maggiori della soglia che fanno sicuramente parte<strong>di</strong> <strong>un</strong> contorno e quelli compresi tra le due soglie che vengono selezionatisoltanto se contigui ad <strong>un</strong> pixel precedentemente scelto. È importanteimpostare opport<strong>un</strong>amente i valori delle soglie per non incorrere in per<strong>di</strong>ta<strong>di</strong> informazione o al contrario in eccesso <strong>di</strong> elementi non significativi.1.6.2 Corner detectionGli angoli sono features più abbondanti rispetto ai contorni rettilinei nelmondo naturale, cosa che li rende ideali da tracciare; sono inoltre invariantirispetto ai cambiamenti <strong>di</strong> illuminazione. Questa caratteristica li rende35


privilegiati rispetto ad altri descrittori nel motion tracking in quanto sonoesplicitamente inseguibili perchè meno soggetti ad ambiguità e perciò piùfacilmente identificabili in immagini successive.Queste caratteristiche sono estraibili anche da immagini in toni <strong>di</strong> grigio,riducendo a <strong>un</strong> terzo il carico computazionale e facendo risultare l'utilizzo<strong>di</strong> tali features adatto al real time processing.Fino ad oggi sono stati sviluppati numerosi algoritmi per la rilevazione <strong>di</strong>feature, che sostanzialmente si <strong>di</strong>fferenziano per la replicabilità dei cornerestratti dall'immagine e per il carico computazionale utilizzato. Alc<strong>un</strong>ipossiedono anche le caratteristiche <strong>di</strong> essere invarianti alle rotazioni e/o aicambiamenti <strong>di</strong> scala. La capacità dell'estrattore <strong>di</strong> rilevare le stesse featurein immagini che mostrano lo stesso contenuto da <strong>un</strong> p<strong>un</strong>to <strong>di</strong> vista poco<strong>di</strong>fferente è fondamentale per la ricerca delle corrispondenze. In assenza <strong>di</strong>tale proprietà, feature estratte possono <strong>di</strong>ventare inutili per i passisuccessivi dell'algoritmo o rappresentare <strong>un</strong>a sorgente d'errore,conducendo a corrispondenze errate e rendendo meno robusta la stima delmoto.1.6.2.1 Classificazione degli algoritmi <strong>di</strong> edge detectionNegli ultimi anni sono stati pubblicati vari algoritmi per il rilevamento deicorner, che possiamo <strong>di</strong>videre secondo due approcci:• Edge Based: Algoritmi che si basano sull'estrazione dei contorni e lasuccessiva identificazione dei p<strong>un</strong>ti a massima curvatura, o ai p<strong>un</strong>ti <strong>di</strong>intersezione tra gli edge. Questo approccio risente tuttavia della qualità36


della segmentazione dell'immagine acquisita.• Raw Based: Approccio che si basa sull'analisi <strong>di</strong>retta delle variazioni<strong>di</strong> intensità in immagini in scala <strong>di</strong> grigio. I corner sono in<strong>di</strong>pendenti dallevariazioni <strong>di</strong> luminosità, quin<strong>di</strong> si può gi<strong>un</strong>gere all'identificazioneattraverso <strong>un</strong>a semplice analisi dell'intensità del gra<strong>di</strong>ente dell'immagineacquisita. I meto<strong>di</strong> raw based sono i più numerosi, ma <strong>di</strong> solito necessitano<strong>di</strong> <strong>un</strong> ulteriore analisi degli intorni degli angoli in quanto tendono a rilevarefalsi corner.Gli algoritmi <strong>di</strong> corner detection sono più frequentemente <strong>di</strong>visi in:• Rilevatori a scala fissa (fixed scale detector)• Rilevatori multi scala (multi scale detector).Tra i primi i principali algoritmi sono:• Moravec• Harris• SUSAN• FASTI fixed scale detector calcolano la risposta a partire da maschere <strong>di</strong><strong>di</strong>mensioni prefissate. Poiché gli oggetti in genere hanno significatosoltanto in <strong>un</strong> certo intervallo <strong>di</strong> scale, l'operatore applicato ha successosoltanto se la grandezza della finestra è proporzionata a quella dellastruttura <strong>di</strong> cui si vogliono identificare i p<strong>un</strong>ti caratteristici. Questialgoritmi in genere mostrano problemi nella ripetibilità dei risultati su<strong>di</strong>verse scale della stessa immagine. Per risolvere questo genere <strong>di</strong>inconveniente sono stati sviluppati algoritmi invarianti alla scala che37


iescono ad in<strong>di</strong>viduare sulla stessa immagine, ingran<strong>di</strong>ta o rimpicciolita,gli stessi p<strong>un</strong>ti salienti con <strong>un</strong> <strong>di</strong>screto margine <strong>di</strong> errore.Tra i multi scale detector i più noti sono:• SIFT• Harris-Laplace• SURF1.6.2.2 Algoritmo <strong>di</strong> MoravecTra gli algoritmi <strong>di</strong> rilevamento raw based troviamo il metodo <strong>di</strong> Moravec[Moravec-79].L'operatore <strong>di</strong> Moravec considera p<strong>un</strong>ti <strong>di</strong> interesse quei p<strong>un</strong>ti che sonocaratterizzati da <strong>un</strong>a considerevole variazione <strong>di</strong> intensità in verticale,orizzontale o <strong>di</strong>agonale. È considerato <strong>un</strong> corner detector pur rilevandoanche p<strong>un</strong>ti isolati.La variazione <strong>di</strong> intensità viene misurata a partire dal pixel I x , y su cuiviene centrata <strong>un</strong>a piccola finestra quadrata W dalle misure in pixel 3×3 ,5×5 , o 7×7 . Spostando la finestra nelle <strong>di</strong>rezioni suddette <strong>di</strong> <strong>un</strong>aquantità <strong>di</strong>screta x , y viene calcolata la variazione <strong>di</strong> intensitàattraverso il criterio SSD (Sum of Squared Differences) che ha il dupliceeffetto <strong>di</strong> eliminare il segno e <strong>di</strong> amplificare la <strong>di</strong>fferenza tra piccole egrosse variazioni:SSD x , y=∑∀ x k, y k∈W[ I x k, y k−I x k x , y k y] 2 (1.7)Il passo successivo è quello <strong>di</strong> costruire <strong>un</strong>a mappa che in<strong>di</strong>chi per ognipixel dell'immagine il minimo tra le variazioni <strong>di</strong> intensità calcolate sulle38


otto <strong>di</strong>rezioni principali.Questo coefficiente, detto cornerness, sara dato da:C x , y=minSSD x , y (1.8)Il passo finale è quello <strong>di</strong> fissare <strong>un</strong>a soglia al <strong>di</strong> sotto della quale i valori<strong>di</strong> C(x,y) siano posti a zero in modo da sopprimere i non massimi alloscopo <strong>di</strong> trovare i massimi locali. I p<strong>un</strong>ti rimanenti <strong>di</strong>versi da zero nellamappa sono corner.Illustrazione 13: Risposta anisotropa dell'operatore <strong>di</strong> Moravechttp://kiwi.cs.dal.ca/~dparks/CornerDetection/moravec.htmUno dei <strong>di</strong>fetti più evidenti <strong>di</strong> questo approccio è che, poiché la finestra simuove soltanto l<strong>un</strong>go le <strong>di</strong>rezioni principali, gli edge aventi <strong>di</strong>rezione<strong>di</strong>versa hanno valori <strong>di</strong> cornerness molto elevati pur non essendo né cornerné p<strong>un</strong>ti isolati. Questo significa che la risposta è anisotropa, essendo39


calcolata su <strong>un</strong> insieme finito <strong>di</strong> spostamenti, e, <strong>di</strong> conseguenza, l'operatoreha <strong>un</strong> basso tasso <strong>di</strong> ripetitività non essendo invariante alla rotazione.Lafinestra usata da Moravec è quadrata, perciò per i pixel l<strong>un</strong>go i bor<strong>di</strong> dellafinestra la <strong>di</strong>stanza Euclidea dal centro è maggiore ed è ulteriormenteaccentuata per quelli ai quattro angoli. Inoltre, tutti i pixel della finestrahanno lo stesso peso, ma intuitivamente i pixel vicini al centro danno <strong>un</strong>ain<strong>di</strong>cazione migliore della variazione <strong>di</strong> intensità locale.L'uso <strong>di</strong> <strong>un</strong>a finestra gaussiana risolve entrambi i problemi, infatti i valorilontani dal centro sono molto piccoli e crescono avvicinandosi al centro,approssimando <strong>un</strong>a finestra circolare. La deviazione standard dellagaussiana fissa la scala spaziale alla quale si vogliono determinare gliangoli.Illustrazione 14:Gaussian windowLa variazione <strong>di</strong> intensità allora viene calcolata come:V x , y=∑∀ x k, y k∈Ww k [ I x k, y k− I x k x , y k y] 2 (1.9)Per evitare <strong>di</strong> calcolare la f<strong>un</strong>zione nelle varie <strong>di</strong>rezioni si considera lo40


sviluppo in serie <strong>di</strong> Taylor troncato al primo or<strong>di</strong>ne.In cuiI xh≃I x∇ I x T h=I x[ ∂ I x∂ xx= x ky k eh= [ x y] è <strong>un</strong> piccolo vettore spostamento.T∂ I x∂ y ]h (1.10)La (1.10) può essere riscritta in modo più intuitivo considerando chel'immagine è descritta su <strong>un</strong> dominio <strong>di</strong>scretoI x x ky k y ≃ I x ky k [ I x x ky k −I x ky kxIky k y − I x kDalla (1.10) con dei semplici passaggi algebrici si ottiene:y k][ x y] (1.11) I xh− I x 2 = ∇ I x T h 2 =h T ∇ I x ∇ I x T h (1.12)Che può essere sostituita nella (1.9)V x , y= ∑ w x h T ∇ I x∇ I x T h=∀ x∈W=h T ∑∀ x∈Ww x ∇ I x∇ I x T h (1.13)Sviluppando il prodotto all'interno della sommatoriaconM =[∑∀ x∈W∑∀ x∈WV x , y=h T M h (1.14)w x ∂ I x2∂ x w x ∂ I x∂ x∂ I x∂ y∑ w x ∂ I x ∂ I x∀ x ∈W ∂ x ∂ y∑∀ x∈Ww x ∂ I x∂ y]2(1.15)Questa relazione è strettamente connessa con la f<strong>un</strong>zione <strong>di</strong>autocorrelazione locale.M è semi-definita positiva, perciò i suoi autovalori saranno non negativi,inoltre M è simmetrica, pertanto può essere scomposta tramite41


Diagonalizzazione <strong>di</strong> Schur attraverso <strong>un</strong>a matrice ortogonale S le cuicolonne sono gli autovettori <strong>di</strong> M.S T M S==<strong>di</strong>ag 1, 2 (1.16)Gli autovalori sono <strong>un</strong> in<strong>di</strong>ce della variazione <strong>di</strong> intensità dell'immagineessendo proporzionali alle curvature principali dell'autocorrelazione localee formano <strong>un</strong> descrittore invariante per rotazione della matrice M, infatti:• Se gli autovalori sono entrambi nulli o molto vicini a zero nel p<strong>un</strong>toconsiderato, l'immagine sarà <strong>un</strong>iforme e quin<strong>di</strong> è presente <strong>un</strong> blob.• Se soltanto <strong>un</strong>o è prossimo a zero, mentre l'altro è molto più grandesi ha <strong>un</strong> edge. L'autovettore associato all'autovalore più grande èperpen<strong>di</strong>colare all'edge• Se entrambi gli autovalori sono gran<strong>di</strong> si ha <strong>un</strong> corner.Essendo M =[ A BB C] <strong>un</strong>a matrice 2×2 , gli autovalori sono facilmentecalcolabili in forma chiusa dal calcolo del polinomio caratteristico 1,2= 1 2 AC ± A−C 2 4 B 2 (1.17)1.7 Trasformata <strong>di</strong> HoughUn metodo <strong>di</strong> feature extraction <strong>di</strong> cui si è fatto <strong>un</strong> importante uso nelprogetto in <strong>di</strong>scussione è la trasformata <strong>di</strong> Hough. Questa proceduraconsente <strong>di</strong> trovare linee, cerchi, o altre semplici forme in <strong>un</strong> immagine. Latrasformata <strong>di</strong> Hough classica [Hough59] concerneva l'identificazione <strong>di</strong>linee per uso in esperimenti fisici, mentre l'attuale uso della trasformata,42


detta standard (SHT) o generalizzata, è dovuto a R. Duda e P. Hart[Duda72] e può essere esteso ad altri casi rispetto alle semplici linee.1.7.1 La trasformata <strong>di</strong> Hough per le lineeIl caso più semplice è quello in cui si vogliono rilevare gruppi <strong>di</strong> p<strong>un</strong>ticollineari in <strong>un</strong>a immagine in bianco e nero. Dati n p<strong>un</strong>ti verificare ognicoppia <strong>di</strong> p<strong>un</strong>ti è computazionalmente proibitivo risultando On 2 .Il metodo <strong>di</strong> Hough prevede la trasformazione <strong>di</strong> tutti i p<strong>un</strong>ti della figurasu <strong>un</strong>a linea retta in <strong>un</strong>o spazio dei parametri. La descrizione in formaesplicita della retta consente <strong>di</strong> parametrizzare ogni linea con inclinazionem e intercetta q , trasformando ogni p<strong>un</strong>to nell'immagine nel luogo deip<strong>un</strong>ti nel piano m ,q corrispondente a tutte le linee passanti attraversoquel p<strong>un</strong>to. Se preso ogni pixel <strong>di</strong>verso da 0 nell'immagine in input loconvertiamo in tale insieme <strong>di</strong> p<strong>un</strong>ti e sommiamo tutti tali contributi, alloraalle linee che appaiono nell'immagine corrisponderanno dei massimi localinel piano m ,q in output, detto piano accumulatore. In altre paroleciasc<strong>un</strong> p<strong>un</strong>to nello spazio dei parametri fornisce il proprio contributo, ovoto, alla ricerca della soluzione.Purtroppo il dominio in cui sono definite pendenza e intercetta non sonolimitati e quin<strong>di</strong> <strong>di</strong>fficilmente rappresentabili computazionalmente.L'insieme delle linee rette nel piano costituisce <strong>un</strong>a famiglia a dueparametri, se <strong>un</strong>o <strong>di</strong> questi due parametri viene fissato possiamorappresentare <strong>un</strong>a linea retta attraverso <strong>un</strong> singolo p<strong>un</strong>to. Laparametrizzazione proposta da Duda e Hart consiste nel rappresentare ogni43


linea come <strong>un</strong> p<strong>un</strong>to in coor<strong>di</strong>nate polari , , in cui in<strong>di</strong>ca la<strong>di</strong>stanza dall'origine, mentre è l'angolo che la normale alla retta formacon il semiasse positivo delle ascisse. In altre parole la linea passanteattraverso il p<strong>un</strong>to in<strong>di</strong>cato è perpen<strong>di</strong>colare al raggio dall'origine a quelp<strong>un</strong>to. L'equazione per tale linea è= x cos y sin Se restringiamo il dominio <strong>di</strong> theta all'intervallo [ 0,] allora il parametrorelativo all'angolo è <strong>un</strong>ico. Con questa restrizione ogni linea nel pianox , y corrisponde ad <strong>un</strong> <strong>un</strong>ico p<strong>un</strong>to nel piano , .Dato <strong>un</strong> insieme <strong>di</strong> n p<strong>un</strong>ti dell'immagine possiamo trovare <strong>un</strong> insieme <strong>di</strong>linee rette passanti tra loro trasformando i p<strong>un</strong>ti in curve sinusoidali nelpiano , ; infatti le curve corrispondenti a p<strong>un</strong>ti collineari hanno <strong>un</strong>p<strong>un</strong>to in com<strong>un</strong>e <strong>di</strong> intersezione in questo piano. Il problema dellarilevazione <strong>di</strong> p<strong>un</strong>ti collineari viene così convertito nel problema <strong>di</strong> trovarele curve concorrenti. Essendo valida anche la proprietà duale possiamoriassumere queste interessanti proprietà della trasformazione p<strong>un</strong>to-curvacome segue1. Un p<strong>un</strong>to nel piano immagine corrisponde ad <strong>un</strong>a curva sinusoidalenel piano dei parametri.2. Un p<strong>un</strong>to nel piano dei parametri corrisponde ad <strong>un</strong>a linea retta nelpiano immagine.3. P<strong>un</strong>ti giacenti sulla stessa linea retta nel piano immaginecorrispondono a curve attraverso <strong>un</strong> p<strong>un</strong>to com<strong>un</strong>e nel piano deiparametri.44


4. P<strong>un</strong>ti giacenti sulla stessa curva nel piano dei parametricorrispondono a linee attraverso lo stesso p<strong>un</strong>to nel pianoimmagine.I p<strong>un</strong>ti <strong>di</strong> accumulazione rappresentano le can<strong>di</strong>date rette presentinell'immagine. Il costo computazionale <strong>di</strong> questo algoritmo èproporzionale al numero <strong>di</strong> p<strong>un</strong>ti che costituiscono la regione <strong>di</strong> interesse.Per ridurre ulteriormente la complessità si può far uso della trasformata <strong>di</strong>Hough progressiva probabilistica (PPHT), la quale piuttosto cheaccumulare ogni possibile p<strong>un</strong>to nel piano accumulatore, lo fa solo per <strong>un</strong>aloro frazione. Si congettura che in questo modo il picco possa esserecom<strong>un</strong>que abbastanza alto, quin<strong>di</strong> è possibile trovare <strong>un</strong>a soluzioneriducendo considerevolmente il tempo computazionale. La PPHT permetteoltre al calcolo dell'orientazione delle linee anche quello della loroestensione.1.7.2 La trasformata <strong>di</strong> Hough per i cerchi (CHT)L'approccio generale della trasformata <strong>di</strong> Hough può essere esteso ad altrigeneri <strong>di</strong> curve. Ad esempio per rilevare configurazioni circolari <strong>di</strong> p<strong>un</strong>ti sipuò scegliere <strong>un</strong>a rappresentazione parametrica per la famiglia <strong>di</strong> tutti icerchi. Una rappresentazione può essere data da x−a 2 y−b 2 =R 2In questo modo possiamo trasformare <strong>un</strong> arbitrario p<strong>un</strong>to della figura nellospazio tri<strong>di</strong>mensionale dei parametri a ,b , R . Se il p<strong>un</strong>to giace su <strong>un</strong>cerchio il luogo nello spazio dei parametri è dato da <strong>un</strong> cono circolare45


etto. Se <strong>un</strong> insieme <strong>di</strong> p<strong>un</strong>ti sono <strong>di</strong>sposti sul perimetro <strong>di</strong> <strong>un</strong> cerchio conparametri a 0,b 0, R 0 allora i luoghi dei parametri risultanti da ogn<strong>un</strong>o <strong>di</strong>tali p<strong>un</strong>ti passeranno attraverso lo stesso p<strong>un</strong>to a 0,b 0, R 0 nello spazio deiparametri. Quin<strong>di</strong> tutti i rispettivi coni circolari retti si intersecheranno in<strong>un</strong> p<strong>un</strong>to com<strong>un</strong>e.Per rappresentare le triplette che descrivono ogni cerchio si dovrebbe fareuso <strong>di</strong> <strong>un</strong> array a tre <strong>di</strong>mensioni rimpiazzando il piano accumulatore con<strong>un</strong> volume accumulatore e <strong>di</strong> conseguenza con maggiore lentezza rispettoal caso delle linee e grande richiesta <strong>di</strong> memoria. L'uso del metodo delgra<strong>di</strong>ente <strong>di</strong> Hough [Ballard-79] permette <strong>di</strong> evitare tali problemi. Seconosciamo l'informazione associata al gra<strong>di</strong>ente <strong>di</strong> <strong>un</strong> p<strong>un</strong>to su <strong>un</strong> edgepossiamo ridurre il luogo da <strong>un</strong> cono ad <strong>un</strong>a linea, poiché il centro delcerchio per quel p<strong>un</strong>to dovrà giacere ad <strong>un</strong>a <strong>di</strong>stanza R l<strong>un</strong>go la <strong>di</strong>rezionedel gra<strong>di</strong>ente. Prima l'immagine passa attraverso <strong>un</strong>a fase <strong>di</strong> edgedetection, ad esempio attraverso l'algoritmo <strong>di</strong> Canny. In tal modo si puòpassare da <strong>un</strong>a immagine a colori ad <strong>un</strong>a immagine in bianco e nero nellaquale per i pixel <strong>di</strong>versi da zero deve essere considerato il gra<strong>di</strong>ente locale.Fort<strong>un</strong>atamente questo può essere fatto semplicemente applicandol'operatore <strong>di</strong> Sobel in grado <strong>di</strong> stimare l'orientazione <strong>di</strong> <strong>un</strong> edge. Una voltaapplicata la convoluzione con la maschera <strong>di</strong> Sobel sono <strong>di</strong>sponibili lecomponenti locali del gra<strong>di</strong>ente g x, g y da cui possiamo calcolare lagrandezza del vettore del gra<strong>di</strong>ente dell'intensità locale [Davies-2005]:e la sua orientazioneg= g 2 2xg y 46


=arctan g y/ g xScrivendo l'equazione parametrica del cerchio finora considerato comeEssendo poix=aR cosy=bR sin cos=g x/ g esin =g y/ gpossiamo stimare le coor<strong>di</strong>nate del luogo dei centri cona= x−R gx/ g b= y−R gy /g (1.18)Se la <strong>di</strong>rezione dell'egde è precisa e si conosce il valore <strong>di</strong> R alloranell'accumulatore vengono aumentati i p<strong>un</strong>ti per i valori (a,b) chesod<strong>di</strong>sfano la (1.18). Tenendo però conto che è improbabile che sia precisala stima della <strong>di</strong>rezione <strong>di</strong> <strong>un</strong> edge possiamo aggi<strong>un</strong>ge <strong>un</strong>a tolleranzadovuta all'errore. In questo accumulatore bi<strong>di</strong>mensionale vengono poiselezionati i centri can<strong>di</strong>dati, i quali devono superare <strong>un</strong>a certa soglia edessere maggiori dei p<strong>un</strong>ti a loro più vicini. I can<strong>di</strong>dati sono poi or<strong>di</strong>nati inbase ai valori dell'accumulatore in or<strong>di</strong>ne decrescente, in modo dain<strong>di</strong>viduare prima i centri con più voti. In molti casi non si conosce concertezza il valore del raggio e perciò è opport<strong>un</strong>o imporre per questo <strong>un</strong>a<strong>di</strong>stanza massima e minima. I pixel non nulli vengono quin<strong>di</strong> or<strong>di</strong>nati inbase alla loro <strong>di</strong>stanza dal centro e selezionati in modo da lavorarenell'intervallo scelto. Il singolo raggio maggiormente supportato da questipixel viene infine selezionato se tale supporto è sufficientemente elevato ese ha <strong>un</strong>a <strong>di</strong>stanza sufficiente da qualsiasi altro centro selezionato inprecedenza.47


Capitolo 2Modello della telecamera e <strong>calibrazione</strong>2.1 Modello della telecameraIl modello geometrico più semplice che descrive il processo <strong>di</strong>acquisizione dell'immagine da parte <strong>di</strong> <strong>un</strong> <strong>sistema</strong> <strong>di</strong> <strong>visione</strong> artificiale èquello della proiezione centrale <strong>di</strong> <strong>un</strong> p<strong>un</strong>to dello spazio su <strong>un</strong> piano.Illustrazione 15: Trasformazione prospettica2.1.1 Proiezione prospetticaLa proiezione della scena tri<strong>di</strong>mensionale sul piano immagine effettuata daogni telecamera può essere rappresentata da <strong>un</strong>a matrice che mappa i p<strong>un</strong>tida R 3 in R 2 . Si consideri a tal proposito <strong>un</strong>a terna O c− X cY cZ c solidalealla telecamera con l'origine nel centro <strong>di</strong> proiezione e Z c perpen<strong>di</strong>colare48


al piano immagine e detto asse principale o asse ottico. Il piano paralleloal piano visivo e passante per il centro ottico viene chiamato piano focale.Il p<strong>un</strong>to <strong>di</strong> intersezione tra l'asse principale e il piano immagine è dettop<strong>un</strong>to principale. Tale p<strong>un</strong>to nella fotocamera stenopeica che rappresenta ilmodello ideale più semplice, anche detta stenoscopio ( o pinhole camera),coincide con l'origine della griglia <strong>di</strong> pixel del sensore visivo.Sfruttando la similitu<strong>di</strong>ne tra triangoli si può ricavare la trasformazioneprospettica frontale che lega le coor<strong>di</strong>nate P c =[ P x c P y c P zc ] <strong>di</strong> <strong>un</strong> p<strong>un</strong>to nellospazio 3D in <strong>un</strong> p<strong>un</strong>to nel piano immagine (il piano visivo 2dell'illustrazione 15) <strong>di</strong>stante f (l<strong>un</strong>ghezza focale) da O c , cioè:xccfR 3 R :P cx2 ccPPzyP z f P cycP z= X fY f (2.1)La <strong>di</strong><strong>visione</strong> per la componente l<strong>un</strong>go l'asse principale causa l'effetto <strong>di</strong>scorcio per cui la <strong>di</strong>mensione <strong>di</strong> <strong>un</strong> oggetto risulta inversamenteproporzionale alla <strong>di</strong>stanza dello stesso dall'osservatore. Tale <strong>di</strong><strong>visione</strong>rende inoltre non lineare questa trasformazione detta proiezioneprospettica.Le coor<strong>di</strong>nate nel piano immagine sono solitamente campionate in pixel.L'espressione che lega le coor<strong>di</strong>nate relative alla terna solidale allatelecamera (camera reference frame) a quelle della griglia <strong>di</strong> pixel delsensore visivo, si può ottenere attraverso <strong>un</strong>a trasformazione affine cheintroduce duefattori <strong>di</strong> scala <strong>di</strong>versi l<strong>un</strong>go x e y che legano le <strong>un</strong>ità49


metriche al pixel e aggi<strong>un</strong>gendo l'offset tra l'origine della griglia <strong>di</strong> pixel eil p<strong>un</strong>to principale:xfPc P xP X c 0zz y f P cyc 0= X IP Y Y I (2.2)zPcxcP yc2.1.2 Parametri intrinseci ed estrinseciQuesta relazione non lineare si può esprimere in coor<strong>di</strong>nate omogeneeottenendo:cPcX Ix f 0 X 0 0 xz Y =P c cI z p=[ 0 yf Y 00P y1 0 0 1 0]P = P cc(2.3)P z1La matrice =[ xf 0 X 000 yf Y 000 0 1 0]=[M 0] è detta matrice <strong>di</strong> proiezioneprospettica, mentre la matrice M costituita dalle prime tre colonne dellamatrice co<strong>di</strong>fica i parametri intrinseci della telecamera ed è dettamatrice <strong>di</strong> prospezione [Scaramuzza 2003].Per passare dalle coor<strong>di</strong>nate telecamera a quelle spaziali (world referenceframe), relative alla terna base, si deve effettuare il seguente cambio <strong>di</strong>coor<strong>di</strong>nate:PcxcP ysxsP yPc=RP zPsTz50


che in coor<strong>di</strong>nate omogenee <strong>di</strong>venta:La matriceP c =P xcP ycP zc1=[ R T0 1]PsxsP ysP z1=GP xsP ysP zs1(2.4)G co<strong>di</strong>fica i parametri estrinseci della telecamera.Sostituendo la (2.4) nella (2.3) si ottiene:PcX Iz Y =P c I z p= G1con = G=[ M 0][ R T =M [R T ]0 1]PsxsP ysP z1=P xsP ysP zs1(2.5)PonendoR=[r 1Tr 2Tr 3T ]T e T =[t 1 t 2 t 3 ] T si ottiene=[f x r 1 T X 0 r 3Tf yr 2 T Y 0r 3Tr 3Tf x t 1 X 0 t 3]f yt 2Y 0t 3(2.6)t 3La matrice è <strong>un</strong>a matrice 3×4 , perciò ha 12 elementi, ma ha solo 11gra<strong>di</strong> <strong>di</strong> libertà perdendone <strong>un</strong>o a causa del fattore <strong>di</strong> scalaEsprimendo con p i , j gli elementi della matrice si ottiene:=[PcX Ip 11 p 12 p 13 p 14z Y Ip 21p 22p 23p 241 p 31 p 32 p 33 p 34]PsxsP ys(2.7)P z1Per eliminare il fattore <strong>di</strong> scala imposto le seguenti due equazioni nonlineariP zc.51


{X I= p P s 11 x p 12P s y p 13P s z p 14p 31P s x p 32P s y p 33P s z p 34Y I = p P (2.8)s21 x p 22P s y p 23P s z p 24p 31P s x p 32P s y p 33P s z p 34Ponendo=[ p 1Tp 2Tp 3T ] T, avendo messo in evidenza le righe checompongono , possiamo riscrivere la relazione (2.8) in modo sintetico:2.1.3 Il nucleo <strong>di</strong> T P s{X I= p 1p T 3P sY I = p (2.9)T2P sp T 3P sIl centro ottico può essere pensato come l'intersezione tra i tre piani definitidagli assi del <strong>sistema</strong> <strong>di</strong> riferimento telecamera. I p<strong>un</strong>ti dello spazioappartenenti al piano passante per X c e l'asse principale, sono proiettatil<strong>un</strong>go l'asse X c pertanto hanno equazione p 2 T P s =0 , analogamente ip<strong>un</strong>ti che si proiettano l<strong>un</strong>go Y c hanno equazione p 1 T P s =0 . I p<strong>un</strong>tiappartenenti al piano focale invece vengono proiettati all'infinito perciòsarà il denominatore delle equazioni (2.9) ad annullarsi p 3 T P s =0 . Indefinitiva il centro ottico si può ottenere dal seguente <strong>sistema</strong> <strong>di</strong> equazioni:{p 1T[ O c1 ] =0p 2T[ O c1 ] =0p 3T[O c1 ] =0 ⇒ C =M [ R T ] [O c1 ] =M R O c M T =0 (2.10)Da questa si deduce che si può esprimere T in f<strong>un</strong>zione del centro ottico:52


T =−R O c (2.11)Quin<strong>di</strong> la matrice <strong>di</strong> proiezione prospettica può essere espressa così:=M [ R −R O c ]La retta passante per il centro ottico e per <strong>un</strong> p<strong>un</strong>toX I,Y I è dettaraggio ottico e tutti i p<strong>un</strong>ti appartenenti a tale retta sono proiettati su talep<strong>un</strong>to.In<strong>di</strong>cando con + la pseudoinversa della matrice <strong>di</strong> proiezioneprospettica, tutti i p<strong>un</strong>tiP s = + p=[M R −1[ X IY I1]0]appartengono al raggio ottico, infatti sostituendo tali p<strong>un</strong>ti nella (2.5) siottengono le coor<strong>di</strong>nate nel piano immagine.Considerando che l'equazione (2.5) <strong>di</strong>pende da <strong>un</strong>o scalare e che per la(2.10) il centro ottico è il nucleo <strong>di</strong> possiamo ricavare l'equazioneparametrica del raggio ottico:P S = C p=[ + O c1 ] −1[ X I][M R Y I ],10∈ R∪{∞ } (2.12)2.1.4 Distorsioni delle lentiIl modello finora trattato non è ancora sufficiente per descrivere con <strong>un</strong>margine <strong>di</strong> errore trascurabile il <strong>sistema</strong> ottico <strong>di</strong> <strong>un</strong>a telecamera reale53


poiché approssima l'obiettivo usato per la proiezione dell'immagineluminosa ad <strong>un</strong>a lente <strong>di</strong> spessore infinitesimo.Le imperfezioni delle lenti oppure l'esigenza <strong>di</strong> ampliare il campo visivoutilizzando <strong>un</strong>a telecamera con <strong>di</strong>stanza focale corta causano<strong>un</strong>'aberrazione, detta <strong>di</strong>storsione, che non permette <strong>un</strong>a perfetta proiezionerettilinea.La mappatura tra p<strong>un</strong>ti 3D e p<strong>un</strong>ti 2D della immagine può esserescomposta in <strong>un</strong>a proiezione prospettica e <strong>un</strong>a f<strong>un</strong>zione che modella le<strong>di</strong>fferenze rispetto alla macchina stenopeica ideale.La f<strong>un</strong>zione <strong>di</strong> <strong>di</strong>storsione delle immagini può essere scomposta in duecomponenti. Nella prima componente, chiamata <strong>di</strong>storsione ra<strong>di</strong>ale, i p<strong>un</strong>tidell'immagine sono <strong>di</strong>storti simmetricamente l<strong>un</strong>go <strong>di</strong>rezioni ra<strong>di</strong>ali dalcentro <strong>di</strong> <strong>di</strong>storsione. Questo tipo <strong>di</strong> <strong>di</strong>storsione è causato dalla formaimperfetta delle lenti e <strong>di</strong>pende soltanto dalla <strong>di</strong>stanza dal centro del p<strong>un</strong>toconsiderato = X I 2 Y I2.La seconda è detta <strong>di</strong>storsione tangenziale o decentrante ed è causata da <strong>un</strong>assemblaggio improprio della lente. Questa <strong>di</strong>pende sia dadall'angolo da esso formato con l'asse delle ascisseA questo p<strong>un</strong>to si deve introdurre <strong>un</strong>a f<strong>un</strong>zione=arctan Y IX I . chef D X I,Y I,, che cipermetta <strong>di</strong> passare dalle coor<strong>di</strong>nate non <strong>di</strong>storte a quelle <strong>di</strong>storte eviceversa.La <strong>di</strong>storsione può essere modellata come la somma del contributo ra<strong>di</strong>alee quello tangenziale [Brown-66]:54


X DY D = X DrY Dr X DtY Dt(2.13)I due adden<strong>di</strong> della (2.13) possono essere espressi come <strong>un</strong>a serie <strong>di</strong>potenze <strong>di</strong> : X Y Dr = 1K Dr1 2 K Dr2 4 K Dr3 6 X IY I (2.14) X Y Dt = [ 2 K X Y K Dt1 I I Dt2 2 2 X 2 I]2 K Dt2X IY I K Dt1 2 2Y 2 I(2.15)Si noti che nelle precedenti equazioni è stato utilizzato il pe<strong>di</strong>ce“Dr” per in<strong>di</strong>care gli elementi associati al contributo della<strong>di</strong>storsione ra<strong>di</strong>ale e il pe<strong>di</strong>ce “Dt” per quelli relativi alla<strong>di</strong>storsione tangenziale.La f<strong>un</strong>zione f D è dominata dalla componente ra<strong>di</strong>ale [Brown-71], della quale il coefficiente più influente è K Dr1 . Gli altri adden<strong>di</strong> sonovia via sempre meno influenti, perciò <strong>un</strong> modello più complicato introduceelementi trascurabili oltre a portare instabilità numerica [Tsai-87].2.2 CalibrazionePer conoscere la matrice <strong>di</strong> proiezione prospettica è necessariovalutare i parametri intrinseci che costituiscono la matrice M e quelliestrinseci relativi alla matrice G. I parametri intrinseci rappresentano lageometria interna della telecamera e le caratteristiche ottiche, mentre iparametri estrinseci si riferiscono a posizione e orientazione del <strong>sistema</strong> <strong>di</strong>riferimento telecamera rispetto al <strong>sistema</strong> <strong>di</strong> riferimento mondo.55


Il processo <strong>di</strong> misurazione <strong>di</strong> tali parametri è detto <strong>calibrazione</strong> e si basasul presupposto che si conoscano le proiezioni <strong>di</strong> alc<strong>un</strong>i p<strong>un</strong>ti 3D, dettip<strong>un</strong>ti <strong>di</strong> <strong>calibrazione</strong> (o p<strong>un</strong>ti <strong>di</strong> controllo, mire, p<strong>un</strong>ti fiduciali) le cuicoor<strong>di</strong>nate sono note.Sono stati sviluppati <strong>di</strong>versi meto<strong>di</strong> <strong>di</strong> <strong>calibrazione</strong> la maggior parte deiquali utilizzano <strong>un</strong> oggetto (target <strong>di</strong> <strong>calibrazione</strong>) sul quale sono tracciatii p<strong>un</strong>ti <strong>di</strong> <strong>calibrazione</strong> costituiti da N elementi che nella immagine devonoessere riconoscibili senza ambiguità ed avere coor<strong>di</strong>nate note conaccuratezza. Gli N elementi in genere sono quadrati <strong>di</strong>sposti a scacchiera o<strong>di</strong>schi circolari, solitamente <strong>di</strong> colore nero su sfondo bianco.Illustrazione 16: Schemi <strong>di</strong> p<strong>un</strong>ti tracciati sui target <strong>di</strong> <strong>calibrazione</strong>2.2.1 Meto<strong>di</strong> <strong>di</strong> <strong>calibrazione</strong>Tra questi meto<strong>di</strong> <strong>un</strong>o dei più <strong>di</strong>ffusi è quello <strong>di</strong> [Tsai-87] il quale assumeche i parametri X 0 , Y 0 , x e y siano forniti dal costruttore della56


telecamera o almeno possano essere des<strong>un</strong>ti dai dati a <strong>di</strong>sposizione. Essorichiede la conoscenza delle coor<strong>di</strong>nate spaziali <strong>di</strong> n p<strong>un</strong>ti per immagine erisolve il problema <strong>di</strong> <strong>calibrazione</strong> con <strong>un</strong> insieme <strong>di</strong> n equazioni linearibasate sul vincolo <strong>di</strong> allineamento ra<strong>di</strong>ale.Il metodo descritto in [Caprile-90] non necessita delle coor<strong>di</strong>nate assolute<strong>di</strong> p<strong>un</strong>ti della scena, ma sfrutta le proprietà dei p<strong>un</strong>ti <strong>di</strong> fuga (vanishingpoint) <strong>di</strong> <strong>un</strong> target <strong>di</strong> <strong>calibrazione</strong>, avente almeno tre piani ortogonali traloro. La <strong>calibrazione</strong> me<strong>di</strong>ante vanishing point è meno utilizzata poichésperimentalmente si è <strong>di</strong>mostrato non essere particolarmente accurata.In [Faugeras-93] è descritta <strong>un</strong>a procedura che consente <strong>di</strong> ottenere<strong>di</strong>rettamente la matrice <strong>di</strong> proiezione prospettica, potendo ricavare in <strong>un</strong>secondo momento i parametri intrinseci ed estrinseci sulla base <strong>di</strong> .Questo metodo che sfrutta la Direct Linear Trasform (DLT) necessita <strong>di</strong>almeno sei p<strong>un</strong>ti non complanari, ma per minimizzare l'errore <strong>di</strong> misura ènecessario <strong>un</strong> numero maggiore <strong>di</strong> p<strong>un</strong>ti in modo da poter risolvere il<strong>sistema</strong> ai minimi quadrati.Questi p<strong>un</strong>ti vengono prelevati su <strong>un</strong> oggetto costituito da almeno duepiani ortogonali tra loro in modo che il <strong>sistema</strong> <strong>di</strong> riferimento mondo possacoincidere con i suoi spigoli. Questo accorgimento rende particolarmenteagevole la determinazione delle coor<strong>di</strong>nate dei p<strong>un</strong>ti <strong>di</strong> <strong>calibrazione</strong> che ingenere vengono prese attraverso griglie spaziate in maniera <strong>un</strong>iforme,appositamente <strong>di</strong>segnate sulle facciate dell'oggetto.57


2.2.2 Metodo <strong>di</strong> ZhangNonostante il metodo <strong>di</strong> Faugeras sia particolarmente accurato, in alc<strong>un</strong>icasi si preferisce il metodo illustrato in [Zhang-98] che risparmia la<strong>realizzazione</strong> dell'oggetto suddetto sostituendolo con <strong>un</strong> semplice oggettoplanare. In particolare nel presente progetto è stato scelto questo metodo incui l'oggetto planare consiste in <strong>un</strong>a scacchiera i cui vertici delle casellecostituiscono i p<strong>un</strong>ti <strong>di</strong> <strong>calibrazione</strong>. Nel caso in questione i p<strong>un</strong>ti <strong>di</strong><strong>calibrazione</strong> giacciono su <strong>un</strong> piano Π, perciò esiste <strong>un</strong>a corrispondenzabi<strong>un</strong>ivoca tra questi e i p<strong>un</strong>ti sul piano immagine.Illustrazione 17: Mosaico con varie orientazioni della scacchieraLe corrispondenze, pertanto, sono co<strong>di</strong>ficate da <strong>un</strong>a omografia che riduce iparametri incogniti ad 8, vale a <strong>di</strong>re <strong>un</strong>a mappatura invertibile da P 2a se58


stesso, tale che tre p<strong>un</strong>ti giacciono sulla stessa linea se e solo se anche iloro p<strong>un</strong>ti mappati sono collineari.2.2.3 Omografia tra l'oggetto planare e la sua immagineUna mappatura P 2 → P 2 è <strong>un</strong>a proiettività se e solo se esiste <strong>un</strong>a matrice3×3 non singolare H tale che per ogni p<strong>un</strong>to in P 2 è vero che il suo p<strong>un</strong>tomappato valeH x [Hartley-2003].Infatti se si sceglie il <strong>sistema</strong> <strong>di</strong> riferimento mondo O s− X sY sZ s tale chegli assi X S e Y S siano giacenti sul piano, vale a <strong>di</strong>re in modo chel'equazione del piano sia Z S=0 , l'espressione (2.7) per <strong>un</strong> p<strong>un</strong>to P appartenente al piano <strong>di</strong>venta:=[PcX Ip 11p 12p 13p 14z Y Ip 21 p 22 p 23 p 241 p 31p 32p 33p 34](2.16)1PsxsP y0Pertanto il piano Π induce <strong>un</strong>a omografia rappresentata da <strong>un</strong>a matrice3×3 la quale permette <strong>di</strong> scrivere la precedente relazione come:=[XsIp 11p 12p 14 xY Ip 21p 22ps24 P y1 p 31p 32p 34]P ⇒ p=H P (2.17)1La matrice H possiede 9 elementi, ma considerato lo scalare incognito λ,che fa variare la matrice senza alterare la trasformazione, i gra<strong>di</strong> <strong>di</strong> libertàsi riducono a 8.Il primo passo consiste nel trovare gli elementi della omografia H59


2.2.3.1 Stima dell'omografia HLa prima domanda da porsi è quanti p<strong>un</strong>ti corrispondentisono richiesti per calcolare la trasformazione proiettiva. X IY I P ssxP yNell'equazione (2.16) per le ipotesi fatte abbiamo posto P z s =0 per cuipossiamo semplificare anche l'espressione (2.8) ottenendo:{X I= p 11P s x p 12P s y p 14p 31P s x p 32P s y p 34Y I = p (2.18)21P s x p 22P s y p 24p 31P s x p 32P s y p 34che po' essere riscritta come p 31 P x s p 32 P y s p 34 X I − p 11 P x s − p 12 P y s − p 14 =0 p 31P x s p 32P y s p 34 Y I− p 21P x s − p 22P y s − p 24=0Portando in forma matriciale si ha:(2.19)A i h= −P s sx−P y−1 0 0 0 P s xX IP s yX IX Is s0 0 0 −P x−P y−1 P x s Y IP y s Y IY Ip11p12p14p21p22 (2.20)p24p31p32p34=0Ogni p<strong>un</strong>to fornisce due equazioni corrispondenti alle sue componentiperciò impilando quattro matrici 2×9 si ottiene <strong>un</strong>a matrice A <strong>di</strong><strong>di</strong>mensione 8×9 il cui spazio nullo è la soluzione per h. Se non sonopresenti triplette allineate, sono sufficienti quattro p<strong>un</strong>ti per vincolare Hpienamente e calcolare <strong>un</strong>a soluzione esatta.60


2.2.3.2 Soluzione sovra-determinataIn genere i dati sono sporcati da rumore, perciò quattro p<strong>un</strong>ti costituisconosoltanto la <strong>di</strong>mensione del sottoinsieme più piccolo per ottenere <strong>un</strong>asoluzione minima. La stima ai minimi quadrati è la tecnica migliore inpresenza <strong>di</strong> rumore con <strong>di</strong>stribuzione Gaussiana, ma tra i p<strong>un</strong>ti si possonotrovare degli outliers, vale a <strong>di</strong>re <strong>un</strong> insieme <strong>di</strong> valori anomali e aberrantiche possono essere dovuti a errori <strong>di</strong> localizzazione o a falsi accoppiamentie che non possono essere trattati come rumore Gaussiano dal momento cheanche solo <strong>un</strong>o <strong>di</strong> essi può essere in grado <strong>di</strong> alterare drasticamente lastima del modello. Gli errori <strong>di</strong> localizzazione sono previsti nelcomportamento gaussiano e per la maggior parte dei p<strong>un</strong>ti <strong>di</strong> interessesono <strong>di</strong> piccole <strong>di</strong>mensioni (<strong>un</strong>o o due pixel). Alc<strong>un</strong>i p<strong>un</strong>ti però a causa <strong>di</strong>rumore impulsivo, si collocano nella coda della gaussiana, ed essendolontani dalla tendenza generale dei dati, riducono notevolmente laprecisione della stima. Per fronteggiare la presenza <strong>di</strong> campioni perifericiche danneggiano la precisione <strong>di</strong> H, sono pertanto necessari meto<strong>di</strong> <strong>di</strong>stima robusti che adattano <strong>un</strong> modello alla maggioranza dei dati e inseguito in<strong>di</strong>viduano come outliers quei dati che presentano <strong>un</strong> residuoelevato.2.2.3.3 Scelta della f<strong>un</strong>zione <strong>di</strong> costoCon <strong>un</strong> numero maggiore <strong>di</strong> corrispondenze non si può ottenere <strong>un</strong>asoluzione esatta che non sia il vettore nullo. In questo caso è necessarioimporre <strong>un</strong>'appropriata f<strong>un</strong>zione <strong>di</strong> costo da minimizzare in modo che la61


soluzione per il vettore h sia <strong>un</strong>ica e non nulla.La f<strong>un</strong>zione <strong>di</strong> costo più semplice è quella che minimizza la norma ∥A h∥ovvero quella che rende minimo il vettore <strong>di</strong> errore algebrico. Per esserecerti che la soluzione non sia il vettore nullo, si aggi<strong>un</strong>ge il vincolo che lanorma <strong>di</strong> h sia <strong>un</strong>itaria. La soluzione a questo problema può essere trovatacon la DLT e la decomposizione ai valori singolari (SVD) preceduti peròda <strong>un</strong> processo <strong>di</strong> normalizzazione [Hartley-2003] descritto in maggioredettaglio nel capitolo 3. Sebbene questa f<strong>un</strong>zione <strong>di</strong> costo sia lineare ecomputazionalmente poco onerosa ha lo svantaggio che la quantitàminimizzata non ha significativo geometrico né statistico.Illustrazione 18: Sistema <strong>di</strong> riferimento mondo sul modello <strong>di</strong><strong>calibrazione</strong>Come detto in precedenza abbiamo posto il <strong>sistema</strong> <strong>di</strong> riferimento mondocon l'asse Z S giacente sul piano rappresentato dal modello <strong>di</strong><strong>calibrazione</strong>. Se tale modello è <strong>un</strong>a scacchiera risulta agevole porre gli altridue assi coincidenti con i due bor<strong>di</strong> più esterni della scacchiera come62


nell'illustrazione 18 1 . Se si conosce la <strong>di</strong>mensione <strong>di</strong> <strong>un</strong>a casella in questo<strong>sistema</strong> <strong>di</strong> riferimento si possono determinare imme<strong>di</strong>atamente lecoor<strong>di</strong>nate <strong>di</strong> tutti i vertici della scacchiera. Una f<strong>un</strong>zione <strong>di</strong> costo quin<strong>di</strong> sipuò basare sulla minimizzazione della <strong>di</strong>stanza euclidea tra i p<strong>un</strong>ti deicorner nell'immagine p j e quelli generati dalla stima me<strong>di</strong>ante il prodotto<strong>di</strong> H per le coor<strong>di</strong>nate della scacchiera nel world reference frame P j .Possiamo quin<strong>di</strong> scrivere:in cuiminH ir j =minH i è il numero <strong>di</strong> corner rilevati.∑∥p j −H i P j ∥, j=1,... , (2.21)jQuesto errore geometrico può essere minimizzato ai minimi quadrati, se siprevede che l'errore non sia perfettamente gaussiano e quin<strong>di</strong> sianopresenti degli outlier il risultato ottenuto può essere raffinato utilizzandometo<strong>di</strong> robusti tra i quali i più utilizzati sono il metodo LmedS e ilRANSAC.2.2.3.4 Least me<strong>di</strong>an of SquaresIl metodo della minima me<strong>di</strong>ana dei quadrati (LmedS) [Rousseeuw-87] è<strong>un</strong>a delle tecniche <strong>di</strong> stima robusta più utilizzate. Questa tecnica stima iparametri attraverso il problema <strong>di</strong> ottimizzazione non lineare:minH i{ medjr j2} (2.22)cioè si cercano i valori che minimizzano la me<strong>di</strong>ana del quadrato deiresidui, e non la loro somma come si fa con il metodo dei minimi quadrati.1 In realtà, come si vedrà in seguito, gli angoli non sono rilevati a partire dal margine più esterno, madalla prima fila in cui si <strong>di</strong>stinguono le intersezioni l<strong>un</strong>go le due <strong>di</strong>rezioni e quin<strong>di</strong> anche il <strong>sistema</strong><strong>di</strong> riferimento risulta più spostato verso l'interno.63


Rousseeuw congettura che non sia possibile formulare <strong>un</strong>a soluzione informa chiusa per la (2.22), né impiegare algoritmi iterativi, ma deve essererisolto attraverso <strong>un</strong>a ricerca su <strong>un</strong> campione casuale (random resampling)nello spazio delle stime possibili generate dai dati, esplorandotale insieme in maniera casuale. Senecessario a determinare <strong>un</strong> vettore <strong>di</strong> parametri em volteq è il minimo numero <strong>di</strong> dati è la percentuale <strong>di</strong>outlier, la probabilità <strong>di</strong> scegliere almeno <strong>un</strong> insieme privo <strong>di</strong> outlier èP=1−1−1− q m (2.23)Ponendo P=0.99 e risolvendo rispetto a m , si determina quanto devevalerem per ottenere <strong>un</strong>a stima corretta con buona approssimazione:log 1−P m=log 1− 1− q (2.24)In genere l'algoritmo non è molto efficiente in presenza <strong>di</strong> rumoreGaussiano, perciò la soluzione viene raffinata attraverso <strong>un</strong>aminimizzazione ai minimi quadrati sui residui pesati2min∑ w ir iiconse∣rw i ={1 i ∣≤3.7065 1 m−s 5 me<strong>di</strong>0 altrimentiI dati a cui viene associato 0 sono considerati outliers.r i22.2.3.5 RANSACL’algoritmo RANSAC (RANdom SAmple Consensus) adotta la stessa64


tecnica <strong>di</strong> campionamento random del metodo LmedS. In questo caso però sulsottoinsieme <strong>di</strong> q elementi si determina quanti dati hanno <strong>un</strong>o scostamento dallastima inferiore ad <strong>un</strong>a certa soglia . In <strong>un</strong>a <strong>di</strong>stribuzione Gaussiana con me<strong>di</strong>a zeroe deviazione standard , per avere <strong>un</strong>a probabilità del 95% che <strong>un</strong> p<strong>un</strong>todell'insieme sia <strong>un</strong> inlier si deve avere =1.96 .Successivamente si determina l'insieme <strong>di</strong> consenso C maggiore, vale a<strong>di</strong>re quello la cui car<strong>di</strong>nalità delle osservazioni che concordano con lastima è più numerosa.La percentuale <strong>di</strong> outlier che si prevede nell'insieme <strong>di</strong> osservazionimoltiplicata per il numero complessivo <strong>di</strong> dati ci fornisce <strong>un</strong>a stima per ilvalore atteso per il consenso C .Se il consenso è inferiore a tale valore vengono ripetuti i primi passi per <strong>un</strong>altro sottoinsieme casuale, finché non viene trovato <strong>un</strong> insieme <strong>di</strong> consensosuperiore sul quale viene effettuata la regressione.In caso <strong>di</strong> conoscenza a priori e C sono determinate, ma nei casisperimentali <strong>di</strong>fficilmente sono noti i valori <strong>di</strong> e , perciò si deveprocedere per tentativi.Nel caso in cui l'algoritmo non termina dopo <strong>un</strong> certo numero <strong>di</strong> iterazionisignifica che potrei aver scelto <strong>un</strong> valore <strong>di</strong> soglia per C troppo elevato ein tal caso si può decidere <strong>di</strong> far fallire l'algoritmo oppure aggiornare ilnumero <strong>di</strong> tentativi m durante l’esecuzione in base alla (2.24) edeffettuare la regressione sull'insieme <strong>di</strong> consenso maggiore.65


2.2.4 Stima della matrice dei parametri intrinseciConsiderando che =M [R T ] ed R=[ r 1r 2r 3 ] , si ha:Da cui si ottiene:H = M [ r 1r 2T ]=[ h 1h 2h 3 ] (2.25)r 1 = M −1 h 1r 2 = M −1 h 2(2.26)Grazie al fatto che le colonne <strong>di</strong> R sono ortonormali, ovvero che r 1 T r 2=0 er 1 T r 1 =r 2 T r 2si hah 1 T M −T M −1 h 2 =0h 1 T M −T M −1 h 1 =h 2 T M −T M −1 h 2(2.27)Zhang <strong>di</strong>mostra che, in<strong>di</strong>cando comee con B la matrice simmetricah i=[h i1h i2h i3]la i-esima colonna <strong>di</strong> HB=M −T M −1 =[1 xf 2 0è possibile effettuare la decomposizioneposto− X 0 xf 2]1−Y*0 y f 2 y f 2* * 1 X 20 xf Y 202 yf 2(2.28)h i T M −T M −1 h j =v ij T b (2.29)66


11B 12b=[B B 22B 13B 23B 33]e v ij =[avendo in<strong>di</strong>cato con B ij il generico elemento <strong>di</strong> B.h i1h j1h i1h j2h i2h j1]h i2h j2h i3h j1h i1h(2.30)j3h i3 h j2 h i2 h j3h i3 h j3<strong>di</strong> cui soltanto sei dei nove elementi non sono duplicati.Le (2.27) possono pertanto essere riscritte comeTv T] 12v 11 −v b=V b=0 (2.31)22dove V è <strong>un</strong>a matrice 2×6 .[Se sono osservate n immagini del piano, impilando le equazioni ottenute,V <strong>di</strong>venta 2n×6 e per n≥3 si ottiene <strong>un</strong>'<strong>un</strong>ica soluzione definita a meno<strong>di</strong> <strong>un</strong> fattore <strong>di</strong> scala. Tenendo in considerazione che la (2.28) è nota ameno <strong>di</strong> <strong>un</strong> fattore <strong>di</strong> scala , cioè B=M −T M −1 ; <strong>un</strong>a volta noti glielementi <strong>di</strong> B si possono ricavare i parametri intrinseci:X 0= −B 13B 11Y 0= −B 23B 22=B 33 X 0 B 13 B 23 Y 0(2.32) xf = B 11 y f = B 2267


2.2.5 Stima dei parametri estrinseciPer quanto riguarda i parametri estrinseci, nota M possiamo ricavare glielementi della matrice=M [R T ] sfruttando le relazioni:r 1 = M −1 h 1r 2 = M −1 h 2(2.33)r 3 =r 1 ×r 2t=M −1 h 3In cui il fattore <strong>di</strong> scala è determinato dalla con<strong>di</strong>zione <strong>di</strong> ortonormalità1=∥M −1 h 1 ∥ = 1∥M −1 h 2 ∥ .Successivamente in genere è opport<strong>un</strong>o applicare <strong>un</strong>a decomposizione aivalori singolari della matrice R=[ r 1 r 2 r 3 ] ottenuta, per aggirare ilproblema che, a causa del rumore, questa non sod<strong>di</strong>sfa le proprietà <strong>di</strong> <strong>un</strong>amatrice <strong>di</strong> rotazione.68


Capitolo 3Visione stereoscopicaL'uomo e molte altre specie animali sono dotati <strong>di</strong> <strong>visione</strong> binoculare,ovvero l'<strong>un</strong>ica percezione visiva della realtà è il risultato del contributo deidue occhi che da posizioni <strong>di</strong>fferenti, attraverso il cristallino e la cornea,mettono a fuoco la luce catturata dall'esterno e me<strong>di</strong>ante il nervo otticoinviano impulsi elettrici al cervello per l'elaborazione e l'interpretazione.Poiché i due occhi hanno <strong>un</strong>a certa <strong>di</strong>stanza tra loro (per l'uomo circa 6cm) le due viste presentano <strong>un</strong>a certa <strong>di</strong>sparità. La stereopsi è la capacitàdel cervello <strong>di</strong> <strong>un</strong>ire le due immagini sfruttando tale <strong>di</strong>sparità per assegnare<strong>un</strong> senso <strong>di</strong> maggiore o minore profon<strong>di</strong>tà agli oggetti dello spazio visivoche consente la <strong>visione</strong> tri<strong>di</strong>mensionale.3.1 TriangolazioneLa possibilità <strong>di</strong> in<strong>di</strong>viduare la <strong>di</strong>stanza a cui si trova <strong>un</strong> oggetto è <strong>di</strong>fondamentale importanza non solo nel mondo animale, ma anche inambito tecnologico. Problemi tipici che possono avere tale necessità sonol'Object recognition, la ricostruzione <strong>di</strong> modelli 3D <strong>di</strong> <strong>un</strong>a scena e lamanipolazione <strong>di</strong> robot me<strong>di</strong>ante asservimento visuale ( visual servoing).Il caso più semplice si ha in presenza <strong>di</strong> <strong>un</strong> impianto stereo canonico, valea <strong>di</strong>re quando si hanno immagini corrispondenti senza <strong>di</strong>storsioni,perfettamente complanari e allineate per riga <strong>di</strong> pixel, con assi principali69


perfettamente paralleli, l<strong>un</strong>ghezze focali coincidenti e i p<strong>un</strong>ti principalic L e c R sono stati calibrati in modo da trovarsi alle stesse coor<strong>di</strong>nate inpixel nelle due immagini. Tale <strong>di</strong>sposizione è detta frontale-parallela ed èsintetizzata con <strong>un</strong>a vista aerea nell'illustrazione 19.Illustrazione 19: Vista aerea <strong>di</strong> <strong>un</strong> impianto stereo canonicoLa retta che congi<strong>un</strong>ge i centri ottici O L e O R delle due telecamere èdetta linea <strong>di</strong> base o baseline. Con il termine baseline si può in<strong>di</strong>care ancheil segmento O LO R nel qual caso si può anche parlare <strong>di</strong> l<strong>un</strong>ghezza dellabaseline.Per ogni p<strong>un</strong>to P nello spazio, in<strong>di</strong>viduato da entrambe le telecamere, la<strong>di</strong>sparità sarà data dalla <strong>di</strong>fferenza tra le ascisse X L e X R dei sistemi <strong>di</strong>70


coor<strong>di</strong>nate sul piano immagine che hanno origine in alto a sinistra nelleimmagini in pixel come mostrato nell'illustrazione 20.Illustrazione 20: Assonometria <strong>di</strong> <strong>un</strong> impianto stereo in <strong>di</strong>sposizionefrontale-parallelaConsideriamo ora i due triangoli simili aventi come vertice in com<strong>un</strong>e ilp<strong>un</strong>to dello spazio P. Il lato opposto al vertice <strong>di</strong> <strong>un</strong>o dei due triangoli èrappresentato dal segmento p Lp R , mentre per l'altro triangolo è labaseline O LO R . Dall'analisi dei due triangoli si desume che la profon<strong>di</strong>tàZ è inversamente proporzionale alla <strong>di</strong>sparità X L− X R tra le due viste:O LO R− X L− X R = O O L RZ− f Z⇒Z = f⋅O L O RX L − X R(3.1)Quando la <strong>di</strong>stanza Z è piccola si ha <strong>un</strong>a <strong>di</strong>sparità molto grande e quin<strong>di</strong>71


<strong>un</strong>a risoluzione rispetto alla profon<strong>di</strong>tà elevata, vale il contrario per<strong>di</strong>stanze gran<strong>di</strong>.Nel mondo reale le telecamere non saranno mai esattamente allineate nellaconfigurazione frontale-parallela, perciò è necessario capire come si puòmappare coppie <strong>di</strong> immagini prelevate dal mondo reale in coppie cherispettino la geometria ideale.3.2 Geometria epipolarePer ottenere informazioni sulla profon<strong>di</strong>tà da <strong>un</strong>a coppia <strong>di</strong> immaginiprovenienti da telecamere è necessaria <strong>un</strong>a stereopsi computazionale chein<strong>di</strong>vidui i p<strong>un</strong>ti corrispondenti nelle due immagini ovvero che sonoproiezione <strong>di</strong> <strong>un</strong>o stesso p<strong>un</strong>to 3D (problema della corrispondenza o <strong>di</strong>matching). Questi p<strong>un</strong>ti, detti p<strong>un</strong>ti coniugati [Fusiello-2010], possonoessere computazionalmente onerosi da calcolare se ci si basa solo suvincoli <strong>di</strong> similarità. Per ogni p<strong>un</strong>to <strong>di</strong> <strong>un</strong>a immagine sarebbe necessarioverificare la similarità su tutte le righe e tutte le colonne dell'altraimmagine generando inoltre numerosi falsi accoppiamenti. Fort<strong>un</strong>atamenteil p<strong>un</strong>to coniugato sull'altra immagine può trovarsi soltanto l<strong>un</strong>go <strong>un</strong>a retta,detta retta epipolare. Tale vincolo deriva dallo stu<strong>di</strong>o della geometriadell'intersezione dei piani immagine con il fascio <strong>di</strong> piani passanti per labaseline.Questa geometria, chiamata geometria epipolare, <strong>di</strong>pende solo daiparametri intrinseci ed estrinseci delle due telecamere e non dallageometria tri<strong>di</strong>mensionale della scena.72


Una qualsiasi retta nel piano ha come equazione in forma implicitaaxbyc=0, quin<strong>di</strong> <strong>un</strong>a generica retta epipolare sull’immagine puòessere rappresentata dal vettore:il i =[a bi] . icIllustrazione 21: Intersezione dei piani immagine con il piano epipolareConsideriamo tra tutti i piani passanti per la baseline quello passante per ilp<strong>un</strong>to P, il piano epipolare. L'intersezione del piano epipolare con i duepiani immagine genera due rette l L e l R dette linee epipolari passanti perle proiezioni p L e p R <strong>di</strong> P sui due piani immagine. Da ciò si deduce cheil p<strong>un</strong>to corrispondente <strong>di</strong> <strong>un</strong>o dei due p<strong>un</strong>ti dovrà giacere sulla linea73


epipolare corrispondente sull'altro piano immagine.Da questa geometria si in<strong>di</strong>viduano anche i p<strong>un</strong>ti e L ed e R derivantidalla intersezione della baseline con i piani immagine detti epipoli.3.2.1 La matrice fondamentaleUn epipolo corrisponde anche alla proiezione sul piano immagine delcentro ottico dell'altra telecamera, perciò, espressa con L la matrice <strong>di</strong>proiezione prospettica riferita al piano immagine sinistro, si ha:e R= R[ O L1 ] =M R [ R RT R ] [O L1 ] =M R R R O L M R T R (3.2)Dalla (11) si ricava che O L =−R L −1 T L quin<strong>di</strong>e R= R[ O L1 ] =M T −M R R −1 R R R R LT L (3.3)È semplice notare che la retta epipolare è la proiezione <strong>di</strong> <strong>un</strong> raggio otticosull'altro piano immagine per cui dalla (3.4)da cui si ottiene l'equazione parametrica:oppure in forma <strong>di</strong> prodotto vettoriale R[ M L R L −1 p L0 ] =M R R R M L R L −1 p L= R L + p L (3.5)l R : p R =e R R L + p L (3.6)l R = R C × R L + p L =e R ×M R R R M L R L −1 p L (3.7)La (3.7) può essere riscritta, con l'ausilio della matrice antisimmetrica,comel R =S e R R L + p L =F p L (3.8)avendo definito la matrice fondamentale 3×3 <strong>di</strong> rango 274


F =S e R R + L =S e R M R R R M L R L −1 (3.9)+La matrice A= R L rappresenta <strong>un</strong>a omografia che mappa i p<strong>un</strong>ti da <strong>un</strong>piano immagine all'altro [Hartley-2003].3.2.2 Le matrici L e R in <strong>un</strong> <strong>sistema</strong> stereoscopicoSe nell'impianto stereo canonico dell'illustrazione 20 poniamo il <strong>sistema</strong> <strong>di</strong>riferimento spaziale in modo da far coincidere l'origine O S con il centro<strong>di</strong> proiezione della telecamera sinistra O L otteniamo <strong>un</strong>a semplificazionedell'equazione (2.5). La matrice dei parametri estrinseci relativi allatelecamera sinistra G L è data quin<strong>di</strong> dalla matrice identità per cui siottiene L=M L[ I 0 ] . Nella configurazione mostrata nell'illustrazione 21per passare da <strong>un</strong> <strong>sistema</strong> <strong>di</strong> riferimento sinistro al destro si deve fareancora ricorso alla (2.5). L'origine della telecamera destra si trova ad <strong>un</strong>a<strong>di</strong>stanza T =O LO R per cui si ha R=M R[ R T ] . Da quanto affermato siricava che L + =[M −1]L0 e C = 0 1(3.10)LLa proprietà (3.2) <strong>di</strong>venta con l'attuale impostazione delle coor<strong>di</strong>nate esfruttando la proprietà R T =R −1 :e L= LC R=M L[ I(3.11)e R= RC L=M R[ R T ] [01] =M T R0 ][ −RT T1 ] =M L RT75


3.2.3 Proprietà della matrice fondamentalePremoltiplicando la (3.6) a sinistra e a destra perp R T S e R si ottiene:p R T S e R p R = p R T S e R A p L p R T S e R e RPoiché il prodotto vettoriale <strong>di</strong> vettori linearmente <strong>di</strong>pendenti è nulloS e Re R=0ed è nullo anche il prodotto scalare <strong>di</strong> vettori ortogonalip T R S e R p R =0 si ricava l'equazione <strong>di</strong> Longuet-Higgins:p T R F p L =0 (3.12)Con questa equazione è possibile caratterizzare la matrice fondamentalesolo in termini <strong>di</strong> p<strong>un</strong>ti corrispondenti senza conoscere la matrice .Le più importanti proprietà della matrice fondamentale [Hartley-2003]sono:1. Se F è la matrice fondamentale <strong>di</strong> <strong>un</strong>a coppia <strong>di</strong>telecamere, la matrice F T lo è della coppia nell'or<strong>di</strong>ne opposto;quin<strong>di</strong> dalla (3.9) si haF =S e R A=A −T S e L (3.13)2. La (3.8) fornisce la linea epipolare sull'immaginesinistra. La linea epipolare sull'altra immagine sarà l L =F T p R3. Ad ogni p<strong>un</strong>to p R e p L nel piano immagine destrocorrispondono rispettivamente la linea epipolare sinistracontenente l'epipolo e L e la linea epipolare destra contenentel'epipolo e R . Per questo si ha e T R F p L =0 e dalla primaproprietà e T L F T p R =0 . Questo ci conduce alla seguenteproprietà:76


e R T F =0 ⇒ F T e R =0e L T F T =0⇒ F e L =0(3.14)4. F ha sette gra<strong>di</strong> <strong>di</strong> libertà. I due gra<strong>di</strong> <strong>di</strong> libertà rimossi<strong>di</strong>pendono dal solito fattore <strong>di</strong> scala e dal vincolo det F =0 . Lamatrice F infatti non avendo rango pieno non è invertibile.Questo può essere spiegato sottolineando il fatto che la matricefondamentale mappa, attraverso la relazione (3.7), <strong>un</strong> p<strong>un</strong>to sulprimo piano immagine in <strong>un</strong>a linea nel secondo, perciò non èpossibile ricostruire il p<strong>un</strong>to corrispondente sull'altro pianoimmagine soltanto dalla conoscenza <strong>di</strong> F e della linea epipolare.Possiamo <strong>di</strong>mostrare la prima uguaglianza della proprietà (3.13)sostituendo le (3.10) e (3.11) nella (3.9) ottenendoF =S RC L M R[ RT ][ M −1L0 ] =S M T M R M −1 −1R R L=S e R M RR M L(3.15)Grazie alla proprietà delle matrici antisimmetriche per cuiSa M =M −T S M −1 a (3.16)si ricava la seconda uguaglianza nella proprietà (3.13)F =M R R M L−1 −T S M R R M L −1 −1 M R T =M R −T R M LTS M L R T =M R −T R M L T S e L 3.2.4 La matrice EssenzialeSfruttando ancora la (3.16) nella (3.15) possiamo ricavare <strong>un</strong>'altra formaper F:F =M R −T S M R −1 e R R M L −1 =M R −T S M R −1 M R T R M L−1(3.17)Andando a definire la matrice Essenziale77


E=S T R (3.18)l'equazione (3.17) può essere ridotta inDalla (2.9) è semplice dedurre cheF =M R −T E M L−1(3.19)p T R M −T R E M −1 L p L =M −1 R p R T E M −1 L p L =0 (3.20)la quale introdotte le coor<strong>di</strong>nate normalizzate p=M −1 p assume la formap T R E p L =0 (3.21)3.2.5 La matrice F in <strong>un</strong> <strong>sistema</strong> stereoscopico canonicoIn <strong>un</strong> impianto stereo canonico, come quello nelle illustrazioni 19 e 20, ipiani focali contengono la baseline O LO R e sono complanari, gli epipoligiacciono all'infinito e le linee epipolari sono parallele, orizzontali epresentano la proprietà <strong>di</strong> collinearità, cioè la retta epipolare destra risultaessere la prosecuzione <strong>di</strong> quella sinistra. La collinearità comporta che <strong>un</strong>p<strong>un</strong>to abbia il suo coniugato sulla stessa scanline, ovvero sulla stessa riga<strong>di</strong> pixel, favorendo il calcolo delle corrispondenze.In questo caso la matrice fondamentale assume la forma [Cyganek-09]=[ 0 0 00]F C 0 0 c (3.22)0 −cdove c è <strong>un</strong> valore costante <strong>di</strong>verso da 0. Sostituendo F C nella (3.12)otteniamop R T F Cp L=[ X RY R1][0 0 00 0 c0 −c 0][XLY L1]=078


che equivale a Y R=Y L , ovvero conferma che in <strong>un</strong> impianto stereocanonico due p<strong>un</strong>ti corrispondenti si trovano sulla medesimaor<strong>di</strong>nata,mentre hanno <strong>di</strong>fferente ascissa che genera la <strong>di</strong>sparità necessaria allatriangolazione.Dalla (3.8) si ricava anche la formula che riba<strong>di</strong>sce l'orizzontalità dellalinea epipolare in <strong>un</strong>a <strong>di</strong>sposizione frontale-parallela:=[ 0 0 0 L]=[0l R =F C p L 0 0 c Y Lc0 −c 0][X L]1 −cY3.3 Calcolo della matrice fondamentaleLa matrice F <strong>di</strong>pende dai parametri intrinseci ed estrinseci dellatelecamera, questo si può facilmente constatare osservando la relazione(3.13). Il calcolo <strong>di</strong> F è possibile anche senza tali informazioni, èsufficiente infatti <strong>un</strong> sufficiente numero <strong>di</strong> p<strong>un</strong>ti coniugati. La matricefondamentale che si ricava contiene tutta l'informazione sulla geometriadel <strong>sistema</strong>, ma se F è calcolata da <strong>un</strong> <strong>sistema</strong> stereoscopico non èpossibile estrarre e G, bensì è necessario avere almeno <strong>un</strong>a terna <strong>di</strong>immagini prese da posizioni <strong>di</strong>verse me<strong>di</strong>ante la stessa telecamera (peresempio nel caso <strong>di</strong> telecamera in movimento). Questo problema è dettoauto-<strong>calibrazione</strong>, ma non verrà trattato.La determinazione della matrice fondamentale in genere serve per ottenere<strong>un</strong>a nuova configurazione del <strong>sistema</strong> <strong>di</strong> <strong>visione</strong> stereoscopica in modo dapoter considerare le immagini come acquisite da <strong>un</strong> impianto stereo79


canonico. Per poter sfruttare anche nel caso generale le proprietà <strong>di</strong>quest'ultimo si ricorre alla rettificazione epipolare, cioè <strong>un</strong>a trasformazioneche lascia inalterata la baseline e attraverso <strong>un</strong>a rotazione attorno ai centriottici rende i piani focali paralleli tra loro e alla baseline.La matrice fondamentale ha rango pari a 2 ed è definita a meno <strong>di</strong> <strong>un</strong>fattore <strong>di</strong> scala, perciò avendo nove elementi ha 7 gra<strong>di</strong> <strong>di</strong> libertà.Il vincolo epipolare p R T F p L =0 valido per ogni coppia <strong>di</strong> p<strong>un</strong>ticorrispondenti può essere usato per stimare la matrice fondamentalequalora si conoscano <strong>un</strong> numero sufficiente <strong>di</strong> p<strong>un</strong>ti. Questa idea fu usatainizialmente da Longuet-Higgins per trovare i coefficienti della matriceEssenziale [LonguetHiggins-81].Ogni corrispondenza fornisce la seguente equazioneDenotando con11F 12F 13 L X RY R1[F F 21F 22F 23 Y LF 31 F 32 F 33]X 1=0 (3.23)f il vettore costituito dagli elementi <strong>di</strong> F or<strong>di</strong>nati per rigapossiamo esprimere questa equazione come X RX L, X RY L, X R,Y RX L, Y RY L, Y R, X L, Y L, 1 f =0Da <strong>un</strong> insieme <strong>di</strong> n coppie <strong>di</strong> p<strong>un</strong>ti si ottengono <strong>un</strong> insieme <strong>di</strong> equazionilineari nei coefficienti della matrice fondamentale F che definiscono <strong>un</strong><strong>sistema</strong> lineare omogeneo Q f =0 , conX R1X L1X R1Y L1X R1Y R1X L1Y R1Y L1Y R1X L1Y L11XQ=[R2X L2X R2Y L2X R2Y R2X L2Y R2Y L2Y R2X L2Y L21⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮X RnX lnX RnY lnX RnY RnX lnY RnY lnY RnX lnY ln1]80


la cui soluzione è il nucleo <strong>di</strong> Q.Analogamente a quanto visto nel capitolo 2, numerosi algoritmipermettono <strong>di</strong> calcolare la soluzione cercata.Conoscere il f<strong>un</strong>zionamento <strong>di</strong> tali meto<strong>di</strong> consente la scelta della tecnicapiù opport<strong>un</strong>a in base al numero <strong>di</strong> corrispondenze richieste, allacomplessità computazionale e alla possibilità che siano presenti valorianomali.3.3.1 Decomposizione ai valori singolariGli algoritmi che prevedono la conoscenza del minor numero <strong>di</strong>corrispondenze sono l'algoritmo dei sette p<strong>un</strong>ti e quello degli otto p<strong>un</strong>ti.Questi algoritmi si basano su <strong>un</strong>a applicazione com<strong>un</strong>e per la risoluzione<strong>di</strong> sistemi <strong>di</strong> equazioni sovradeterminati chiamata Singular ValueDecomposition (SVD).La matrice Q viene decomposta come Q=U D V T , dove U e V sonomatrici ortogonali e D è <strong>un</strong>a matrice <strong>di</strong>agonale i cui elementi <strong>di</strong>agonalisono detti valori singolari e corrispondono alle ra<strong>di</strong>ci quadrate degliautovalori della matrice Q T Q . Essendo Q T Q simmetrica e semidefinitapositiva allora i valori singolari sono reali e non negativi.Le colonne <strong>di</strong> V corrispondenti ai valori singolari nulli sono <strong>un</strong>a base perKer Q perciò possono fornire <strong>un</strong>a soluzione per Q f =0 .3.3.2 Soluzione esatta con sette p<strong>un</strong>tiI sette gra<strong>di</strong> <strong>di</strong> libertà <strong>di</strong> F comportano <strong>un</strong> numero minimo <strong>di</strong> coppie per81


avere <strong>un</strong>a soluzione riguardo alla geometria epipolare pari a 7.La matrice Q con n=7 ha <strong>un</strong> nucleo <strong>di</strong> <strong>di</strong>mensione 2 dato dallacombinazione lineare F 1 1− F 2 , in cui le matrici F 1 e F 2 sonoottenute dai vettori corrispondenti f 1 e f 2 , che si possono ottenereattraverso la SVD. La matrice fondamentale deve avere determinante nulloperciò si ha det F 1 1− F 2 =0 da cui si ottiene <strong>un</strong> polinomio cubicoin che ha al massimo 3 soluzioni reali [Zhang-96].Questo algoritmo non genera sempre <strong>un</strong> <strong>un</strong>ica soluzione, la qualecom<strong>un</strong>que non fornisce valori atten<strong>di</strong>bili per il basso numero <strong>di</strong> p<strong>un</strong>ti usati.Com<strong>un</strong>que questo algoritmo viene ripreso nei meto<strong>di</strong> robusti come passo<strong>di</strong> algoritmi iterativi.3.3.3 Metodo degli otto p<strong>un</strong>tiIn assenza <strong>di</strong> rumore, con n pari a otto, il nucleo <strong>di</strong> Q è <strong>un</strong>o spaziovettoriale <strong>di</strong> <strong>di</strong>mensione 1, poiché i parametri <strong>di</strong>f sono definiti a meno <strong>di</strong><strong>un</strong>a costante moltiplicativa. La soluzione può essere calcolata con ilcosiddetto algoritmo degli 8 p<strong>un</strong>ti, variante del DLT, il quale però puòrisultare instabile a causa del rumore, degli errori dovuti ad arrotondamentinumerici, ma soprattutto a causa del malcon<strong>di</strong>zionamento dovutoall'utilizzo <strong>di</strong> coor<strong>di</strong>nate pixel omogenee che rendono la terza <strong>di</strong>mensionemolto <strong>di</strong>versa dalle altre due [Hartley-97].3.3.4 NormalizzazioneGli elementi della matrice Q in cui compaiono le singole coor<strong>di</strong>nate pixel82


sono dell'or<strong>di</strong>ne <strong>di</strong> 10 2 , mentre si ha <strong>un</strong> or<strong>di</strong>ne <strong>di</strong> 10 4 per quelli in cuisono presenti i prodotti delle coor<strong>di</strong>nate e valori <strong>un</strong>itari per l'ultimacolonna. Per ridurre tale sproporzione viene applicata <strong>un</strong>a trasformazioneche rende molto più stabile l'algoritmo in modo che i risultati possanoessere confrontati con gli algoritmi iterativi che saranno analizzati inseguito. Tale trasformazione, chiamata normalizzazione da Hartley, è <strong>un</strong>atrasformazione affine che deve essere applicata in<strong>di</strong>pendentemente alle dueimmagini e consiste in due passi principali. Il primo consiste in <strong>un</strong>atraslazione tale da far coincidere l'origine [ 0 0 1] T con il centroidedell'insieme <strong>di</strong> p<strong>un</strong>ti. Il secondo passo è quello <strong>di</strong> scalare gli stessi p<strong>un</strong>tiaffinché la <strong>di</strong>stanza me<strong>di</strong>a dall'origine sia pari a 2 in modo che il p<strong>un</strong>tome<strong>di</strong>o sia pari a [1 1 1] T .Data <strong>un</strong>a matrice <strong>di</strong> normalizzazione N si avrà [Cyganek-09]:x 0 −X m s x Xp=N P=[s][0 s y−Y ms y0 0 1iY i1]=[s x X i− X m ]s y Y i−Y m (3.24)1in cui compaiono le coor<strong>di</strong>nate omogenee del p<strong>un</strong>to me<strong>di</strong>o calcolatorispetto ai p<strong>un</strong>ti non ancora normalizzati]=[1∑ nXm n i]i=1p m=[X Y m 11 ∑ nYn ii =11e i fattori <strong>di</strong> scala s x= 1 ∑ n i =1n X i− X m − 1 2e s y=1 ∑ nn i=1Y i−Y m − 1 2Nel dominio delle coor<strong>di</strong>nate normalizzate si avrà83


p RTF p L= N Rp R T F N Lp L = p R T N RTF N Lp Lda cui si deduce cheF =N RTF N L (3.25)Questa relazione è determinante per la denormalizzazione finale.3.3.5 Soluzione ai minimi quadratiNel caso in cui a causa del rumore o <strong>di</strong> errori <strong>di</strong> misura Q possegga rangopieno, risultando non singolare si può cercare <strong>un</strong>a soluzione approssimataai minimi quadrati.Questa soluzione può essere trovata a meno <strong>di</strong> <strong>un</strong> fattore <strong>di</strong> scala, perquesto è necessario porre <strong>un</strong> ulteriore vincolo; in questo modo si escludeanche la soluzione banale f =0 . Per tale vincolo esistono varie opzionitra le quali la più utilizzata è quella <strong>di</strong> porre ∥ f ∥=1 .La robustezza dell'algoritmo può essere aumentata con n8 . In questomodo si hanno più equazioni lineari che incognite e si può cercare <strong>di</strong>minimizzare il criterio <strong>di</strong> errore [Faugeras-01]:che equivale a trovare il minimo <strong>di</strong>nC F =∑i =1 p T RiF p Li 2 (3.26)C F =∥Q f ∥ 2 (3.27)Il vantaggio del metodo degli otto p<strong>un</strong>ti è che porta ad <strong>un</strong> algoritmo noniterativo e quin<strong>di</strong> è più semplice da implementare, ma oltre alla sensibilitàal rumore presenta due problemi rilevanti:• Non è rispettato il vincolo det F =0 .84


• La (4.4) non ha alc<strong>un</strong>a interpretazione geometrica3.3.6 Vincolo <strong>di</strong> singolaritàLa proprietà che gli epipoli siano autovettori della matrice F sottolinea ilfatto che la matrice F sia singolare e in particolare abbia rango pari a 2.Per forzare la singolarità della matrice fondamentale normalizzata in modoche le linee epipolari passino tutte per l'epipolo com<strong>un</strong>e, F vienerimpiazzata dalla matrice F più vicina in norma <strong>di</strong> Frobenius che sod<strong>di</strong>sfii requisiti, vale a <strong>di</strong>re dalla matrice che, sotto la con<strong>di</strong>zione det F =0 ,minimizzi la norma ∥F −F∥ .La SVD permette <strong>di</strong> porre in or<strong>di</strong>ne decrescente i valori singolari <strong>di</strong> D,perciò si può far corrispondere all'ultima colonna della matrice V il valoresingolare più piccolo. Applicando la SVD a F , per avere <strong>un</strong>a F che siala matrice singolare più vicina in norma <strong>di</strong> Frobenius si pone a zero ilvalore singolare minore e si calcola la matrice cercata comeF =U DV T =U <strong>di</strong>ag r , s ,0V Tin cui U e V sono le matrici ortogonali ottenute dalla SVD <strong>di</strong> F .In questo modo si può ottenere, dopo la denormalizzazione (3.25), <strong>un</strong>amatrice fondamentale singolare, la quale però è stata ottenutaminimizzando <strong>un</strong>a f<strong>un</strong>zione che non possiede <strong>un</strong>a interpretazionegeometrica.3.3.7 Meto<strong>di</strong> robustiAbbiamo detto in precedenza <strong>di</strong> voler minimizzare <strong>un</strong>a quantità85


geometricamente significativa, perciò potremmo utilizzare <strong>un</strong>a f<strong>un</strong>zione <strong>di</strong>errore che tenga conto delle <strong>di</strong>stanze dalle linee epipolari.In questo modo si può ottenere <strong>un</strong> residuo r i per cui vale [Faugeras-01]r i 2 =d 2 p Ri , F p Lid 2 p Li , F T p Ri (3.28)La struttura per gli algoritmi RANSAC e LmedS, descritti nel capitolo 2,per la stima della matrice fondamentale è la seguente:Date N corrispondenze{ p Li , p Ri ∣i=1,... , N } si seguono i seguenti passi:1. Vengono generati m sotto-campioni casuali attraverso <strong>un</strong>a tecnicaMonte Carlo estraendo per ogni sotto-campione q=7 corrispondenze.2. Attraverso il metodo dei 7 p<strong>un</strong>ti vengono calcolate al più 3 soluzioniF J per ogni sotto-campione J .3. Se utilizzo LmedS calcolo m volteM J = {me<strong>di</strong>=1,... , N [ d 2 p Ri , F J p Li d 2 p Li , F J T p Ri ]}La F J che presenta il minor M J sarà la nostra stima finale per la matricefondamentale. Se utilizzo RANSAC calcolo il numero <strong>di</strong> inlier chepresentano <strong>un</strong>a <strong>di</strong>stanza minore <strong>di</strong>2 e prendo la F J con maggior consenso. per ogni soluzione generata al passo3.4 RettificazioneRiassumendo quanto detto in precedenza, lo scopo finale della <strong>visione</strong>stereo è quello <strong>di</strong> fornire <strong>un</strong>a stima della profon<strong>di</strong>tà degli oggetti attraversola triangolazione.Il calcolo della (3.1) non può essere determinato se non si è risolto in86


precedenza il problema della corrispondenza, infatti per sapere il valore <strong>di</strong>X L e X R si deve conoscere quali parti delle due immagini sonoproiezione dello stesso elemento della scena.Una mappa delle corrispondenze in grado <strong>di</strong> fornire per ogni p<strong>un</strong>todell'immagine <strong>di</strong> partenza la posizione del pixel corrispondente potrebberisolvere questo problema.Se si conosce la geometria epipolare, co<strong>di</strong>ficata nella matricefondamentale, è possibile ridurre il problema ad <strong>un</strong>a ricerca 1D grazie alfatto che p<strong>un</strong>ti coniugati si trovano sulla stessa linea epipolare.Naturalmente la ricerca dei p<strong>un</strong>ti corrispondenti risulta semplificata se ledue immagini possono essere <strong>di</strong>storte in modo che qualsiasi coppia <strong>di</strong>p<strong>un</strong>ti coniugati si trovi sulla stessa scanline nelle due immagini. In altreparole si vuole trovare <strong>un</strong>a trasformazione geometrica che alteril'arrangiamento spaziale dei pixel (image warping) [Fusiello-2010] inmodo che le linee epipolari coincidano nelle due immagini e sianoparallele all'asse orizzontale.La rettificazione epipolare è <strong>un</strong>a omografia che porta l'impianto stereo in<strong>un</strong>a <strong>di</strong>sposizione frontale-parallela riducendoforma canonica.la geometria epipolare inLe matrici generali delle telecamere in configurazione canonica sono datada [Hartley-2003] L=[I 0] e R=[ M Re R ] (3.29)e più nel dettaglioM R =S e R F e R v T (3.30)87


in cuiv è <strong>un</strong> vettore <strong>di</strong> tre elementi.La seguente tabella riassume le proprietà fondamentali <strong>di</strong> <strong>un</strong> <strong>sistema</strong>stereoscopico qualsiasi e <strong>di</strong> quello canonico.Configurazione non rettificata R=M R[ R T ] R=[ Sistema con epipoli ad ∞M Re R ] L=M L[ I 0 ] L=[ I 0]A= R L + =M R R M L−1F =S e R A= A −T Se Le L= LC R=M LRTe R= RC L=M RT A = M RF =S e R M R = M R −T S e L e L=Te R= RC L= M Re LTabella 1: Sommario delle proprietà delle matrici delle telecamereSi noti che la maggior parte degli algoritmi <strong>di</strong> <strong>visione</strong> stereoscopicapresentati nella letteratura della computer vision assumono immaginirettificate[Isgrò-99].Per ottenere delle linee epipolari orizzontali l'omografia rettificante devemappare gli epipoli ad infinito, perciòeL= eR=[ 1 0]0(3.31)In questo modo l'immagine del centro <strong>di</strong> proiezione in <strong>un</strong>a immagine èparallela all'altro piano immagine. L'esecuzione degli algoritmi <strong>di</strong>rettificazione <strong>di</strong> <strong>un</strong> immagine in genere ha scarso successo quando gliepipoli si trovano all'interno dell'immagine, vale a <strong>di</strong>re quando l'impiantostereo è caratterizzato da <strong>un</strong>a baseline troppo ampia o con assi ottici troppoconvergenti. La trasformazione proiettiva H che mappa gli epipoliall'infinito sfrutta 3 gra<strong>di</strong> <strong>di</strong> libertà, quin<strong>di</strong> rimangono 4 gra<strong>di</strong> <strong>di</strong> libertà dai88


7 totali <strong>di</strong> <strong>un</strong>'omografia qualsiasi. Se i restanti vincoli non vengono sceltiopport<strong>un</strong>amente si rischia <strong>di</strong> scegliere <strong>un</strong>'omografia che causa severe<strong>di</strong>storsioni all'immagini. Poiché ci sono <strong>un</strong> infinito numero <strong>di</strong> possibilipiani frontali-paralleli da scegliere, si devono introdurre ulteriori vincolicome minimizzare la <strong>di</strong>storsione o massimizzare la sovrapposizione delleviste.Esistono algoritmi che necessitano <strong>di</strong> <strong>un</strong>a completa <strong>calibrazione</strong>dell'impianto ed altri che invece sono in<strong>di</strong>pendenti dalla <strong>calibrazione</strong>. Inquesto senso possiamo <strong>di</strong>stinguere due categorie <strong>di</strong> algoritmi <strong>di</strong>rettificazione:• Uncalibrated stereo rectification• Calibrated stereo rectification3.4.1 Algoritmo <strong>di</strong> HartleyQuesto metodo non utilizza i parametri intrinseci e estrinseci delletelecamere, ma sfrutta il fatto che tale informazione è contenuta nellamatrice fondamentale. La rettificazione quin<strong>di</strong> può essere effettuatasemplicemente in<strong>di</strong>viduando almeno 7 p<strong>un</strong>ti necessari per il calcolo <strong>di</strong> F.Questo algoritmo tenta <strong>di</strong> minimizzare le <strong>di</strong>sparità esistenti tra le due viste,ma in genere produce immagini più <strong>di</strong>storte <strong>di</strong> quelli che prevedonol'utilizzo dei parametri della <strong>calibrazione</strong>. Un ulteriore svantaggio è chenon essendo a conoscenza dei parametri intrinseci e in particolare dellal<strong>un</strong>ghezza focale, non si ha alc<strong>un</strong>a sensibilità alla scala. Ciò comporta cheoggetti nello spazio aventi <strong>di</strong>fferente scala e, <strong>di</strong> conseguenza, p<strong>un</strong>ti89


caratteristici con <strong>di</strong>fferenti coor<strong>di</strong>nate 3D, possano avere medesimaproiezione [Bradski-2008].Il proce<strong>di</strong>mento presentato in [Hartley-98] inizia applicando all'immaginedestra l'omografia H R che mappa all'infinito l'epipolo destro e in <strong>un</strong>secondo tempo calcola l'omografia corrispondente H L da applicaresull'immagine <strong>di</strong> sinistra in modo che sia minimizzata la <strong>di</strong>sparità e quin<strong>di</strong>la quantità∑id H Lp Li, H Rp Ri 2 (3.32)L'algoritmo per il calcolo della prima omografia può essere schematizzatonel seguente modo:1. Si sceglie <strong>un</strong> p<strong>un</strong>to p O nel cui vicinato può essere desiderabileavere <strong>un</strong>a <strong>di</strong>storsione minima. Nei successivi passi verrà applicata<strong>un</strong>a trasformazione che nell'origine può essere approssimata ad <strong>un</strong>atrasformazione rigida. L'applicazione <strong>di</strong> <strong>un</strong>a traslazione (prima <strong>di</strong>applicare la trasformazione rigida) in grado <strong>di</strong> portare il p<strong>un</strong>to p Onell'origine permette <strong>di</strong> rendere quello scelto il p<strong>un</strong>to a <strong>di</strong>storsioneminima. È ragionevole scegliere come p<strong>un</strong>to da mappare nell'origineil centro dell'immagine p O= X OY O1 T , in tal caso la traslazioneha la forma:0 − X OT =[1 ]0 1 −Y O(3.33)0 0 12. Il secondo passo è quello <strong>di</strong> trovare <strong>un</strong>a rotazione che porti l'epipolodestro sull'asse X. Per la (3.14) possiamo calcolare l'epipolo destro90


trovando il nucleo <strong>di</strong> F T . Da notare che l'epipolo ha già subito latraslazione al passo 1. Quin<strong>di</strong> avremo:=( e ) ( e −X R1xe =T e = Rx OR1 R e Ry−Y O1e R1y1)(3.34)da cui possiamo ricavare l'angolo che allinea e R1 con l'ascissa eR1=−atan2e R1y,e R1x (3.35)e infine la matrice <strong>di</strong> rotazione cercata attorno all'asse ZeR1 ) −sin (ϕ eR1 ) 0R=[cos(ϕ1]sin(ϕ eR1) cos(ϕ eR1) 0(3.36)0 03. L'ultimo passo è quello <strong>di</strong> trovare <strong>un</strong>a trasformazione che mappaall'infinito l'epipolo e R2=R e R1 che ora giace sull'asse X e quin<strong>di</strong> hala forma e R2=( f 0 1) T a meno <strong>di</strong> <strong>un</strong> fattore <strong>di</strong> scala che puòessere eliminato <strong>di</strong>videndo per la terza componente. Hartley proponela seguente omografia:=[1K0 00 1 0− 1 f0 1](3.37)4. Infine si calcola l'omografia finale dalla composizione delle tretrasformazioni:H R=K R T (3.38)Dalla (3.30) possiamo ora calcolare M R e le matrici delle telecamere in(2.29).Hartley <strong>di</strong>mostra che se la matrice fondamentale è data daF =Se R M R91


allora la trasformazione proiettiva H L dell'immagine I L corrisponde adH Rse e solo seH L = IH R e R a T H R M (3.39)per qualche vettore a . Nel nostro caso la (3.39) si può semplificarepoiché H R mappa l'epipolo destro all'infinito:H L= I H Re Ra T H R M R=I [ 1 0]0 aTH R M R=H AH R M Rin cui H A è <strong>un</strong>a trasformazione affine della forma=[ a b c1]H A 0 1 0(3.40)0 0A questo p<strong>un</strong>to trovare <strong>un</strong>a matrice H L che minimizzi la <strong>di</strong>sparitàsecondo la (3.32) può essere così riformulataIn particolare siano∑id H AH R M Rp Li, H Rp Ri 2 =∑id H A p Li, p Ri 2 (3.41)=X Lip Li Y Lie1=X Rip Ri Y Ri1allora la (3.41) <strong>di</strong>venta∑id [a X Li b Y Li c , Y Li , 1] T ,[ X Ri , Y Ri , 1] T 2e ancora, considerando che con la rettificazione i p<strong>un</strong>ti coniugati devonogiacere sulla stessa scanline, la <strong>di</strong>sparità <strong>di</strong>pende soltanto dalla <strong>di</strong>stanza trale ascisse92


∑ a X Lib Y Lic− X Ri 2 (3.42)iChe è <strong>un</strong> semplice problema <strong>di</strong> minimizzazione ai minimi quadrati lineare.3.4.2 Algoritmo <strong>di</strong> BouguetBasandosi sulla conoscenza dei parametri della <strong>calibrazione</strong> Bouguetspartisce la rotazione determinata dalla matrice R, calcolata a partire dalla(2.33), tra le due telecamere in modo da renderle complanari. In questomodo minimizza la <strong>di</strong>storsione prodotta dalla riproiezione e rende massimal'area sovrapponibile tra le due immagini[Bouguet]. In particolare dato ilvettore <strong>di</strong> rotazione v LR le cui componenti descrivono l'asse <strong>di</strong> rotazionetra i due piani immagine e la cui norma∥v LR∥ fornisce il valoredell'angolo <strong>di</strong> tale rotazione, possiamo trovare le due matrici <strong>di</strong> rotazioner R= f ROD −v LR2 e r =r TL Rrispettivamente per la telecamera destra e sinistra.Si noti che per la rotazione <strong>di</strong> destra si è in<strong>di</strong>cato con(3.43)f ROD la formula <strong>di</strong>Rodrigues che converte <strong>un</strong> vettore <strong>di</strong> rotazione nella corrispettiva matrice<strong>di</strong> rotazione, mentre per la rotazione <strong>di</strong> sinistra è stata utilizzata laproprietà <strong>di</strong> ortogonalità. Le due “mezze rotazioni” rendono gli assiprincipali paralleli tra loro e alla somma degli assi ottici originali. Dopotali trasformazioni i due piani sono complanari, ma non ancora allineati perriga, ciò significa che l'asse <strong>di</strong> riferimento X S non è parallelo allabaseline la cui <strong>di</strong>rezione è data dal nuovo vettore traslazionedeve quin<strong>di</strong> fare in modo che il vettoret=r RT . Sit abbia la stessa <strong>di</strong>rezione del93


vettore 1 0 0 T . Per determinare il vettore <strong>di</strong> rotazione si devecalcolare il vettore che descrive l'asse della rotazione cercata e l'angolo. Ilprimo si può calcolare attraverso il prodotto vettoriale=t× 1 00(3.44)mentre si può risalire all'angolo <strong>di</strong> rotazione sfruttando la proprietà delprodotto scalare nel piano definito dagli stessi vettorit⋅1 0 0=arccosT∥(3.45)∥t∥ ∥ 1 0 0 TÈ possibile stabilire il vettore <strong>di</strong> rotazione moltiplicando il risultato della(3.44) con quello della (3.45) perciò le rotazioni globali da applicare adentrambe le viste saranno:R R= f RODr RR L = f ROD r L(3.46)Per sod<strong>di</strong>sfare la richiesta <strong>di</strong> collinearità le due nuove matrici dei parametriintrinseci devono avere lo stesso valore yf . Per semplicità i fattori <strong>di</strong>scala x e y presenti nella (2.3) vengono resi uguali ponendof new= xf = yf , in modo che i pixel risultino quadrati. Il valore <strong>di</strong>f newviene scelto cercando <strong>di</strong> trovare <strong>un</strong>a l<strong>un</strong>ghezza focale in grado <strong>di</strong>mantenere il maggior numero <strong>di</strong> informazioni contenute nelle dueimmagini originali <strong>di</strong>storte. I nuovi p<strong>un</strong>ti principali Y 0L e Y 0R sonoinizialmente calcolati in modo da massimizzare l'area nelle immaginirettificate; poi per la componente verticale viene posto <strong>un</strong> valore com<strong>un</strong>efacendo la me<strong>di</strong>a tra le coor<strong>di</strong>nate verticali dei due p<strong>un</strong>ti principali, vale a94


<strong>di</strong>re in formule Y 0 = Y 0L Y 0R2.Le nuove matrici <strong>di</strong> prospezione avranno quin<strong>di</strong> la forma:=[f new 0 X 0LM L 0 f new Y] =[f new 0 X 0R 0M R 0 f new Y]0(3.47)0 0 1 0 0 1Le nuove matrici <strong>di</strong> proiezione prospettica non avranno quin<strong>di</strong> la forma(3.29), ma avranno matrici dei parametri intrinseci quasi identiche e<strong>di</strong>fferiranno tra loro anche per il vettore <strong>di</strong> traslazione T = R RT : L= M L[ I 0] R= M L[I T ](3.48)3.4.3 Mappa <strong>di</strong> rettificazioneUna volta calcolate le trasformazioni <strong>di</strong> rettificazione con <strong>un</strong>o dei duemeto<strong>di</strong> si costruisce <strong>un</strong>a mappa in grado <strong>di</strong> in<strong>di</strong>care dove deve esserecollocato ogni pixel originario nell'immagine destinazione. Tuttavia allecoor<strong>di</strong>nate intere dell'immagine originale corrispondono coor<strong>di</strong>nate realinell'immagine finale perciò si procede al contrario:1. Per ogni posizione intera dell'immagine destinazione pcalcoliamo da quale coor<strong>di</strong>nata in virgola mobile dell'immaginesorgente dovrebbe provenire.2. Il valore <strong>di</strong> quel pixel destinazione viene poi calcolato attraverso<strong>un</strong>a interpolazione bilineare dall'immagine sorgente dei valoriinteri dei pixel più prossimi a quello calcolato al passo 1.95


Ve<strong>di</strong>amo ora come determinare la mappa nel caso in cui si è utilizzato ilmetodo <strong>di</strong> Bouguet.La trasformazione (3.48) produce due nuove equazioni corrispondenti alla(2.5) in cui si ha <strong>un</strong> nuovo p<strong>un</strong>to nel piano immaginep L = L P sp R = R P s (3.50)Dalla equazione (2.12) possiamo trovare i p<strong>un</strong>ti del raggio otticocorrispondenti ad ogni pixel intero delle immagini riproiettate per laconfigurazione (3.48)P =[ s M −1Lp L0 ]P =[ s O R1 ] [ M −1 Rp R0 ](3.51)Applicando <strong>un</strong>a rotazione inversa a quella applicata in (3.46) ricaviamo ip<strong>un</strong>ti rispetto al <strong>sistema</strong> <strong>di</strong> riferimento telecamera:P =[ c R −1L M −1 Lp L0 ]P =[ c R −1RM −1 Rp R0 ](3.51)Dividendo le prime due componenti per la terza si elimina il fattore <strong>di</strong>scala e si determina la corrispondenza tra le nuove coor<strong>di</strong>nate e i rapporti X u =P x c / P zce Y u=P y c / P zcoriginali non <strong>di</strong>storte.Ènelle vecchie coor<strong>di</strong>nate delle immagininecessario aggi<strong>un</strong>gere il contributo della <strong>di</strong>storsione ra<strong>di</strong>ale etangenziale che abbiamo calcolato durante la <strong>calibrazione</strong>.Tra<strong>di</strong>zionalmente i coefficienti <strong>di</strong> <strong>di</strong>storsione in (2.14) e (2.15) vengono96


posti in <strong>un</strong> vettore 5×1 e or<strong>di</strong>nati nel seguente modo:DC=[ K Dr1 K Dr2 K Dt1 K Dt2 K Dr3 ]Come si può notare il terzo elemento della componente ra<strong>di</strong>ale è posto perultimo, questo per il fatto che è stato inserito solo in <strong>un</strong> secondo tempo alfine <strong>di</strong> rendere più accurata la stima della <strong>di</strong>storsione per le telecameregrandangolari. Le espressioni (2.14) (2.15) possono essere quin<strong>di</strong> espressenella forma:X DDY =[1 DC 1DC 2DC 5][1 2 46] X uuY [ DC 3DC 40DC 40 DC 3][Utilizzando la (2.3) si può passare alle coor<strong>di</strong>nate immagineu L,v L, 1 T =M L X DL, Y DL, 1 T2 X uY u2] 2 22 X u 2 2Y uu R,v R, 1 T =M R X DR, Y DR,1 T (3.52)97


Questa relazione sta ad in<strong>di</strong>care che il valore ass<strong>un</strong>to dall'immaginedestinazione nel p<strong>un</strong>to X , Y a coor<strong>di</strong>nate intere dovrebbe essere lostesso del p<strong>un</strong>to u , v a coor<strong>di</strong>nate reali nell'immagine originale. In realtàtale p<strong>un</strong>to non corrisponde ad alc<strong>un</strong> p<strong>un</strong>to X ,Y a coor<strong>di</strong>nate interedell'immagine originale perciò si utilizza <strong>un</strong> processo <strong>di</strong> interpolazione.Più precisamente dalle coor<strong>di</strong>nate u ,v calcolate nella (3.52) sidetermina il p<strong>un</strong>to X i,Y i le cui coor<strong>di</strong>nate sono il risultatodell'approssimazione <strong>di</strong> u e v al valore intero minore uguale più vicino.A partire da tali coor<strong>di</strong>nate si valutano i seguenti parametri:dx=u−X idy=v−Y i(3.53)che servono poi per determinare i coefficienti a i dell'interpolazionebilineare:a 1= 1−dx ⋅1−dy a 2=dx⋅1−dy a 3 = 1−dx ⋅dya 4=dx⋅dyIl valore finale del pixel dell'immagine rettificata allora sarà(3.54)I X , Y =a 1I X i,Y ia 2I X i 1,Y ia 3I X i,Y i1a 4I X i1,Y i 1 (3.54)I parametri (3.54) devono essere calcolati per ogni pixel dell'immaginedestinazione, ma per ridurre i tempi <strong>di</strong> calcolo possono essere determinatisoltanto <strong>un</strong>a volta.Se si è utilizzato il metodo <strong>di</strong> Hartley non sarebbe necessario utilizzare iparametri intrinseci, ma nel caso in cui siano com<strong>un</strong>que <strong>di</strong>sponibili iparametri da <strong>un</strong>a <strong>calibrazione</strong>, per praticità si può riutilizzare la stessaprocedura che sfrutta il calcolo della mappa <strong>di</strong> rettificazione utilizzata con98


il primo metodo. In tal caso le matrici utilizzate in (3.51) possono esseresostituite nel seguente modo [Bradski-2008]:−1RL M −1 L M −1 L H L M L−1RR M (3.55)−1R M −1 R H R M R99


Capitolo 4Hardware e software impiegati4.1 L'HardwareIl software sviluppato necessita <strong>di</strong> <strong>un</strong>a parte fisica costituita, oltre che dalcalcolatore senza il quale non potrebbe essere eseguito, anche da <strong>un</strong><strong>sistema</strong> con delle caratteristiche specifiche senza le quali non è in grado <strong>di</strong>svolgere i compiti per i quali è stato progettato. Questo <strong>sistema</strong> è costituitoda <strong>un</strong>a coppia <strong>di</strong> telecamere poste su <strong>un</strong> supporto in grado <strong>di</strong> pre<strong>di</strong>sporlenella maniera più simile possibile a quella <strong>di</strong> <strong>un</strong> <strong>sistema</strong> visivo binoculare.4.1.1 Sistema <strong>di</strong> elaborazioneUn ambiente <strong>di</strong> elaborazione live deve fornire prestazioni elevate in modotale che le scene acquisite presentino meno scarti possibile.Un primo p<strong>un</strong>to fondamentale è costituito dalla potenza del processore edal numero <strong>di</strong> core in esso contenuti. Un secondo p<strong>un</strong>to è costituito dallamemoria <strong>di</strong> <strong>sistema</strong>: entrano in gioco sia la memoria primaria (RAM) chequella della scheda grafica del <strong>sistema</strong> su cui verranno eseguiti iprogrammi.È stato possibile testare il software con risultati sod<strong>di</strong>sfacenti sui seguenticalcolatori:• AMD Phenom(tm) II Quad-Core 3.30GHz con <strong>un</strong>a100


RAM istallata <strong>di</strong> 4.00 GB, scheda video ATI Radeon X1950 GTcon 256MB <strong>di</strong> memoria de<strong>di</strong>cata.• AMD Athlon(tm) Dual-Core 2.00GHz con <strong>un</strong>a RAMistallata <strong>di</strong> 4.00 GB• Intel centrino duo (T7200) 2.00 Ghz, RAM 2.00 GB,scheda video Invi<strong>di</strong>a GeForce 7600 con 256 <strong>di</strong> Ram internade<strong>di</strong>cataQuesto <strong>di</strong>mostra come, nonostante i tempi <strong>di</strong> risposta giochino <strong>un</strong> ruolocentrale e quin<strong>di</strong> siano auspicabili elevate prestazioni, sistemi <strong>di</strong>elaborazione <strong>di</strong> fascia me<strong>di</strong>a forniscano prestazioni sufficienti.4.1.2 Telecamere e loro collocazioneL'applicazione è stata sviluppata sfruttando principalmente due webcamHercules Dualpix Exchange con collegamento al calcolatore me<strong>di</strong>anteUSB. Queste telecamere possiedono <strong>un</strong> sensore VGA CMOS, forniscono<strong>un</strong>a risoluzione in modalità video con interpolazione <strong>di</strong> 1280×960 e <strong>un</strong>frame rate fino a 30 fps.Poter utilizzare il programma con vari tipi <strong>di</strong> telecamere è <strong>un</strong> aspettoconsiderato rilevante; pertanto il software è stato testato anche con <strong>un</strong>atelecamera integrata Sony Visual Comm<strong>un</strong>ication VGP-VCC2 con pixeleffettivi 640×480 dotata <strong>di</strong> <strong>un</strong> sensore VGA CMOS.La coppia <strong>di</strong> telecamere deve essere fissata in modo da risultare <strong>di</strong>sposta inmodo analogo al <strong>sistema</strong> visivo degli animali dotati <strong>di</strong> <strong>visione</strong> binoculare.Per far questo si è usato <strong>un</strong> supporto in legno, intagliato in modo da far101


incastrare il <strong>sistema</strong> <strong>di</strong> fissaggio proprio delle webcam Hercules DualpixExchange.Illustrazione 22: Posizionamento delle webcam con supporto in legno per il fissaggio (a destra)e senza ( a sinistra )Questa struttura elementare si è <strong>di</strong>mostrata spesso non necessaria, ciò sta a<strong>di</strong>mostrare che l'applicazione è facilmente utilizzabile senza <strong>un</strong> grandesforzo nel progettare <strong>un</strong> telaio complesso. Può essere sufficienteposizionare con cura le webcam su qualsiasi supporto facendo attenzioneche siano sufficientemente rigide, parallele e non troppo <strong>di</strong>stanti. Unaccidentale (o volontario) spostamento delle telecamere costringe l'utente aricalibrarle, ma il software permette <strong>di</strong> farlo in pochi minuti.La maggior parte delle webcam non è stata creata per questo genere <strong>di</strong>applicazioni in cui la rigi<strong>di</strong>tà è <strong>un</strong>a prerogativa centrale. Le Hercules, adesempio, hanno rotazione orizzontale fino a 360 gra<strong>di</strong> e rotazione verticalefino a 30 gra<strong>di</strong> che nel contesto per le quali sono state progettate è <strong>un</strong>importante pregio.Sistemi <strong>di</strong> <strong>visione</strong> stereoscopica progettati per l'elaborazione delle scene102


eali attualmente hanno costi relativamente elevati che <strong>di</strong>fficilmente lostudente o il ricercatore, che voglia acquistare personalmente lastrumentazione, vorrà affrontare. Allo stesso tempo per poter riutilizzare lewebcam anche in altre attività è necessario <strong>un</strong> <strong>sistema</strong> che permetta <strong>di</strong>passare dalla configurazione stereoscopica ad <strong>un</strong>a all'occorrenza piùflessibile che permetta <strong>di</strong> sfruttarle anche per attività lavorative, comevideoconferenze, o lu<strong>di</strong>che. Un <strong>sistema</strong> semplice come quelli mostratinell'illustrazione 22 permette tutto questo semplicemente sganciando letelecamere dal supporto e rimuovendo gli elastici utilizzati per impe<strong>di</strong>rnela rotazione. L'utente è libero <strong>di</strong> creare il proprio supporto senza eccessivosforzo.4.2 Software utilizzato4.2.1 Il linguaggio <strong>di</strong> programmazioneLa prima scelta fondamentale per l'applicazione sviluppata è stata quelladel linguaggio <strong>di</strong> programmazione. Nell'ambito della computer vision sonostati utilizzati molti linguaggi <strong>di</strong> programmazione e naturalmente èpossibile <strong>di</strong>re quale sia il migliore solo in relazione agli scopi del progettoche si vuole sviluppare. Storicamente si è ricorso con maggior frequenza,tra le varie possibilità esistenti, alle librerie <strong>di</strong> computer vision OpenCV oall'ambiente <strong>di</strong> sviluppo Matlab. In questo progetto la scelta è ricaduta sulprimo sebbene Matlab abbia degli innegabili vantaggi. Infatti anche se per<strong>un</strong> programmatore poco esperto Matlab può risultare più intuitivo,103


l'utilizzo <strong>di</strong> librerie sviluppate in linguaggio C/C++ permette <strong>di</strong> guadagnarevelocità <strong>di</strong> esecuzione, fattore che nell'elaborazione delle immagini intempo reale è <strong>di</strong> fondamentale importanza.Questo aspetto è a volte messo in secondo piano per il fatto che l'ImageProcessing Toolbox <strong>di</strong> Matlab consente <strong>di</strong> trattare le immagini comematrici, che sono <strong>un</strong> tipo <strong>di</strong> dato <strong>un</strong>iversale in questo ambiente, riducendole per<strong>di</strong>te in velocità <strong>di</strong> esecuzione. La “lentezza” in realtà è dovutasoprattutto al fatto che <strong>un</strong>o script Matlab viene prima convertito in <strong>un</strong>linguaggio interme<strong>di</strong>o detto p–code e poi ogni istruzione del p–code vieneeseguita in sequenza dall’interprete, generando <strong>un</strong> certo overhead.L'incremento <strong>di</strong> efficienza delle prestazioni si traduce in <strong>un</strong> aumento anche<strong>di</strong> 5 volte in termini <strong>di</strong> frame elaborati al secondo.4.2.2 OpenCVOpenCV è <strong>un</strong>a libreria open source sotto licenza BSD, originariamentesviluppata da Intel.104


Questa libreria è stata progettata per l'efficienza computazionale,soprattutto in considerazione <strong>di</strong> applicazioni in tempo reale, con lapossibilità <strong>di</strong> trarre vantaggio dall'utilizzo <strong>di</strong> processori multicore; inoltre èmultipiattaforma e può essere utilizzata con vari linguaggi <strong>di</strong>programmazione come il Python oltre che con il C/C++.Le librerie sono inoltre corredate da numerosi esempi nonché <strong>di</strong> manualiche illustrano dettagliatamente tutte le f<strong>un</strong>zioni a <strong>di</strong>sposizione.L'utilizzo della libreria OpenCV consente, con poco sforzo, <strong>di</strong> ottenererisultati apprezzabili sia dal p<strong>un</strong>to <strong>di</strong> vista prestazionale che da quellofornito dagli stessi esempi.4.2.3 L'ambiente <strong>di</strong> sviluppo e il Sistema OperativoUn buon ambiente <strong>di</strong> sviluppo è fondamentale nel creare <strong>un</strong>'applicazionecon <strong>un</strong> grado accettabile <strong>di</strong> usabilità e determina inoltre specifiche scelteper quanto riguarda il S.O. su cui si può eseguire il programma.Il progetto in analisi è stato interamente sviluppato me<strong>di</strong>ante l'ambiente <strong>di</strong>sviluppo Microsoft Visual Stu<strong>di</strong>o e pertanto il software è eseguibilesoltanto su S.O. Microsoft, ma si è cercato <strong>di</strong> tenere conto anche dellaportabilità delle f<strong>un</strong>zionalità <strong>di</strong> base. Queste non <strong>di</strong>pendono dal <strong>sistema</strong>operativo e perciò senza dover ritoccare il co<strong>di</strong>ce potranno essere riscrittein qualsiasi altra piattaforma, adeguando però quelle parti inerentiall'interfaccia grafica proprie <strong>di</strong> VS.Per quanto riguarda le versioni dei sistemi operativi Microsoft sono statieffettuati test sulle versioni Windows: XP Me<strong>di</strong>a Center 2005, Windows105


Vista e Windows 7.L'applicazione ha <strong>di</strong>mostrato <strong>di</strong> f<strong>un</strong>zionare su tutte queste con buonirisultati; in particolare la prima delle versioni citate, nonostante sia ormaiconsiderata obsoleta, regge la complessità delle operazioni real time nelsenso che:• Non mostra interruzioni nella fase <strong>di</strong> visualizzazioneed identificazione durante l'acquisizione delle immagini (sia consingola che con doppia telecamera).• Non perde fotogrammi nella fase <strong>di</strong> scrittura del datoacquisito sul <strong>di</strong>sco <strong>di</strong> <strong>sistema</strong>• Procede senza scarti <strong>di</strong> fotogramma nella fase <strong>di</strong>sincronizzazione dei processi che recuperano il dato.Durante la fase <strong>di</strong> elaborazione lo sforzo <strong>di</strong> CPU e la memoria <strong>di</strong>namicautilizzate restano sempre, in<strong>di</strong>pendentemente dalla complessità delleimmagini, al <strong>di</strong> sotto delle soglie limite previste. Il consumo in MB durantela fase <strong>di</strong> esecuzione dei processi <strong>di</strong> acquisizione immagine con 2telecamere in f<strong>un</strong>zione, è <strong>di</strong> circa 40 MByte mentre le due CPU viste dal<strong>sistema</strong> operativo, presentano rari picchi com<strong>un</strong>que al <strong>di</strong> sotto del 40%.106


Capitolo 5Distribuzione dei Processi5.1 Moltiplicare i processi per gestire più telecamereLe librerie OpenCV utilizzate non consentono <strong>di</strong> gestire facilmente,attraverso <strong>un</strong> singolo programma o processo, <strong>un</strong> <strong>sistema</strong> costituito da piùtelecamere. Al contrario, la scissione del generico programma <strong>di</strong>acquisizione in più processi <strong>di</strong>stinti, associati, ogn<strong>un</strong>o, ad <strong>un</strong>a singolatelecamera, risolve semplicemente il problema.Illustrazione 23: Schema della gestione <strong>di</strong> più telecamere me<strong>di</strong>ante scissione inpiù processi5.1.1 P<strong>un</strong>tare sul parallelismoAl <strong>di</strong> fuori della semplificazione del problema, pensando ai moderniprocessori multi-core o ad ambienti multi-processore, la scelta <strong>di</strong> scindere107


il problema in più sotto-problemi risulta <strong>un</strong> ottimo approccio per la<strong>di</strong>stribuzione dei compiti a livello <strong>di</strong> singolo core o singolo processore.In altre parole questa scelta permette <strong>di</strong> attribuire l'elaborazione <strong>di</strong> <strong>un</strong>compito specifico ad <strong>un</strong> singolo processore e <strong>di</strong> lasciare gli altri a<strong>di</strong>sposizione del <strong>sistema</strong> o <strong>di</strong> altri compiti.Considerando, ad esempio, <strong>un</strong> <strong>sistema</strong> <strong>di</strong> acquisizione stereo ed <strong>un</strong>processore quad-core si potrebbe attribuire due core alla gestione delletelecamere (acquisizione, elaborazione <strong>di</strong> base delle immagini ecc.) e glialtri due core per la gestione del <strong>sistema</strong> e <strong>di</strong> <strong>un</strong> terzo processo chepermetterà all'utente <strong>di</strong> interagire con i processi in questione passando loroi parametri ed acquisendone dei risultati.5.1.2 Interazione utente/processiIn <strong>un</strong>a situazione <strong>di</strong> questo tipo l'interazione <strong>di</strong>retta dell'utente con iprocessi de<strong>di</strong>cati deve essere ridotta al minimo e, se possibile, ad<strong>di</strong>ritturanon esservi. Il tipo <strong>di</strong> interazione desiderata dovrà essere puramentein<strong>di</strong>retta.In altre parole l'utente dovrà <strong>di</strong>sporre <strong>di</strong> <strong>un</strong>a interfaccia grafica che glipermetta <strong>di</strong> interagire in<strong>di</strong>rettamente con i processi (eseguendone - adesempio - startup, shutdown, ripristino e l'insieme <strong>di</strong> tutte le operazioni acui gli stessi sono de<strong>di</strong>cati).L'introduzione <strong>di</strong> questo strato <strong>di</strong> software che si frappone fra l'utente ed ilcore dell'applicazione deve risolvere i problemi <strong>di</strong> com<strong>un</strong>icazione fra i vari108


processi che si verranno a creare.Ci sono <strong>di</strong>fferenti mo<strong>di</strong> per risolvere questo problema e, in f<strong>un</strong>zionedell'ambiente (Microsoft, Unix ecc) in cui si presenta, le soluzioni sono piùo meno performanti.L'idea <strong>di</strong> base è quella <strong>di</strong> fare in modo che il <strong>sistema</strong> possa mantenere lapropria logica <strong>di</strong> base nel miglior modo possibile e che possa esserecompilato ed eseguito sulla maggior parte degli ambienti in commercio.5.2 Scelta del metodo <strong>di</strong> com<strong>un</strong>icazione tra processiFra i meto<strong>di</strong> che permettono a due o più processi <strong>di</strong> com<strong>un</strong>icare, la sharedmemory presenta <strong>un</strong>a filosofia com<strong>un</strong>e in ambienti Microsoft e Unix.In generale possiamo <strong>di</strong>re che la shared memory è <strong>un</strong>'area <strong>di</strong> memoriaprimaria le cui <strong>di</strong>mensioni vengono stabilite a priori dal programmatore, ilquale deve fare in modo che non si verifichino conflitti durante la fase <strong>di</strong>lettura e <strong>di</strong> scrittura che possano compromettere il f<strong>un</strong>zionamentodell'intero <strong>sistema</strong> che i processi stanno gestendo. È possibile fare questome<strong>di</strong>ante timer o altre azioni particolari in modo da avere <strong>un</strong>a opport<strong>un</strong>asincronizzazione.In ambienti Microsoft la shared memory è implementata come “filemapping” per con<strong>di</strong>videre <strong>un</strong>'area <strong>di</strong> memoria tra processi o threads. Ilprimo processo crea l'oggetto <strong>di</strong> file mapping chiamando la f<strong>un</strong>zioneCreateFileMapping con permessi <strong>di</strong> lettura e scrittura in memoria.Questa f<strong>un</strong>zione associa <strong>un</strong> nome all'oggetto <strong>di</strong> file mapping e ritorna <strong>un</strong>109


handle allo stesso oggetto che viene poi passato alla f<strong>un</strong>zioneMapViewOfFile per mappare <strong>un</strong>a regione selezionata del file in memoria.Questa f<strong>un</strong>zione restituisce <strong>un</strong> p<strong>un</strong>tatore pBuf al primo byte della regionedel file mappato. Il processo utilizza quin<strong>di</strong> la f<strong>un</strong>zione CopyMemory perscrivere nella regione p<strong>un</strong>tata da pBuf. Quando il processo non deve piùaccedere alla memoria con<strong>di</strong>visa è opport<strong>un</strong>o chiamare la f<strong>un</strong>zioneCloseHandle a cui verrà passato l'handle da chiudere associatoall'oggetto <strong>di</strong> file mapping.Un secondo processo può accedere alla regione scritta nella memoriacon<strong>di</strong>visa dal primo processo, chiamando la f<strong>un</strong>zione OpenFileMappingspecificando lo stesso nome per l'oggetto <strong>di</strong> file mapping. Ora si puòutilizzare la f<strong>un</strong>zione MapViewOfFile passandole l'handle all'oggetto <strong>di</strong>file mapping per ottenere l'in<strong>di</strong>rizzo iniziale dell'area mappata.Nel co<strong>di</strong>ce sviluppato è stata definita ed implementata <strong>un</strong>a opport<strong>un</strong>aclasse atta alla gestione della shared memory le cui f<strong>un</strong>zioni membropermettono <strong>di</strong>:• Allocare <strong>un</strong>o spazio <strong>di</strong> RAM e <strong>di</strong> associarlo ad <strong>un</strong> identificativo<strong>un</strong>ivoco che tutti i processi interessati potranno utilizzare perraggi<strong>un</strong>gere i contenuti dell'area in con<strong>di</strong><strong>visione</strong>.• Accedere all'area in modalità <strong>di</strong> scrittura per imporvi dati• Accedere all'area in modalità <strong>di</strong> lettura per recuperane i dati• Chiudere l'area al termine del suo utilizzoQueste f<strong>un</strong>zionalità <strong>di</strong> base potranno essere riscritte in qualsiasi altrapiattaforma senza dover ritoccare il co<strong>di</strong>ce che è stato scritto durante110


l'implementazione dei processi de<strong>di</strong>cati alle f<strong>un</strong>zionalità <strong>di</strong> basedell'applicazione.Lo scambio dati, avviene, per questi motivi, utilizzando <strong>un</strong>'area <strong>di</strong>memoria con<strong>di</strong>visa, come riportato nella figura sotto:SWUSB InterfaceProcess 1shmemGUIProcess 2shmemIllustrazione 24: Schema dell'interazione Processo - Shared MemoryOgni <strong>di</strong>fferente processo è caratterizzato da <strong>un</strong>a propria struttura datiattraverso la quale può interscambiare dati con la GUI.Si è scelto, per evitare problemi <strong>di</strong> sincronizzazione, che sia la stessa GUI,al momento opport<strong>un</strong>o, a generare l'area <strong>di</strong> interscambio e che solo dopoquesta operazione sia attivato il processo. Essendo la proprietaria dell'area,sarà ancora la GUI a terminare il processo imponendo nella sharedmemory <strong>un</strong>o stato opport<strong>un</strong>o, ad attendere alc<strong>un</strong>i istanti e a <strong>di</strong>struggeredefinitivamente l'area <strong>di</strong> memoria in con<strong>di</strong><strong>visione</strong>. Il processo,riconosciuto il segnale <strong>di</strong> richiesta <strong>di</strong> terminazione, esce dal proprio loopprincipale e termina la propria esecuzione.111


5.3 Strutture <strong>di</strong> baseA titolo <strong>di</strong> esempio si riportano le strutture ed i dati 2 utilizzati dai processi<strong>di</strong> acquisizione e <strong>calibrazione</strong>. La struttura <strong>di</strong> base è stata definitaattraverso i seguenti due tipi <strong>di</strong> dato strutturato:• ScacchieraType• CalibrazioneTypeQuesti vengono sotto riportati per questioni <strong>di</strong> praticità:typedef struct _scacchiera{CvSize DimScacchiera;float FormatoQuadrato;} ScacchieraType;typedef struct _<strong>calibrazione</strong>{int tipo;char baseOutputFile[512];<strong>un</strong>signed char sincro;ScacchieraType sc;} CalibrazioneType;ScacchieraType contiene:• DimScacchiera, <strong>di</strong> tipo CVSize (definito all'interno della libreria OpenCV),costituito da due campi interi che definiscono, in quadrati, le <strong>di</strong>mensioni dellascacchiera che verrà utilizzata.• FormatoQuadrato, <strong>un</strong> float che definisce la <strong>di</strong>mensione del singoloquadretto della scacchiera nell'<strong>un</strong>ità <strong>di</strong> misura scelta dall'utente.CalibrazioneType contiene, invece, tutti i dati <strong>di</strong> controllo che verrannopassati dalla GUI al processo <strong>di</strong> <strong>calibrazione</strong>. In particolare:• tipo, <strong>un</strong> intero che definisce il tipo <strong>di</strong> <strong>calibrazione</strong> che il processo dovrà2 Presenti nel file commons/commons.h112


applicare, valorizzato a:1 - nel caso l'operatore richieda <strong>un</strong>a acquisizione live delle immagini.2 - nel caso in cui l'operatore richieda <strong>di</strong> effettuare <strong>un</strong>a <strong>calibrazione</strong> stereo daimmagini acquisite3 - nel caso in cui l'operatore richieda <strong>un</strong>a <strong>calibrazione</strong> da video 3• baseOutputFile, <strong>un</strong>a stringa <strong>di</strong> 512 byte all'interno della quale viene passatoil path completo del file xml <strong>di</strong> output• sincro, <strong>un</strong> byte che viene utilizzato nel solo caso <strong>di</strong> acquisizione live per:- richiedere la chiusura del programma se valorizzato a FF- richiedere lo scatto <strong>di</strong> <strong>un</strong>a fotografia se valorizzato a 01- porre in stato <strong>di</strong> attesa la GUI se valorizzato a 00• sc, dato <strong>di</strong> tipo ScacchieraType, attraverso il quale vengono passate lecaratteristiche che l'operatore impone a livello <strong>di</strong> interfaccia grafica.5.4 Acquisizione delle immaginiSi introdurranno ora gli aspetti implementativi riguardanti l'acquisizionedelle immagini, dando spazio alla logica <strong>di</strong>etro la com<strong>un</strong>icazione tra iprocessi e all'algoritmo impiegato. In questa sezione saranno soltantoaccennate le operazioni che l'utente dovrà effettuare per eseguire <strong>un</strong>a<strong>calibrazione</strong>, le quali saranno approfon<strong>di</strong>te nei capitoli successivi.Per questo genere <strong>di</strong> operazioni le librerie OpenCV mettono a <strong>di</strong>sposizionela classe VideoCapture. L'associazione <strong>di</strong> <strong>un</strong> oggetto <strong>di</strong> questo tipo ad<strong>un</strong> <strong>di</strong>spositivo per l'acquisizione video permette <strong>di</strong> effettuare su <strong>di</strong> esso <strong>un</strong>gran numero <strong>di</strong> operazioni come aprirlo e prelevarne i fotogrammi.3 La f<strong>un</strong>zionalità “<strong>calibrazione</strong> da video” non è ancora operativa allo stato attuale, ma è statapre<strong>di</strong>sposta per eventuali sviluppi futuri113


La Graphical User Interface consente all'utente <strong>di</strong> attivare (o <strong>di</strong>sattivare)l'apertura <strong>di</strong> <strong>un</strong>a o entrambe le telecamere (si veda a tal proposito ilparagrafo 7.1.3) in modo da poter decidere, quanti processi sarannoeseguiti in parallelo, purché le telecamere siano effettivamente collegate alcalcolatore. Una volta imposta tale scelta, <strong>un</strong>a maniera per avviare <strong>un</strong>processo <strong>di</strong> acquisizione è quello <strong>di</strong> accedere al <strong>di</strong>alogo pre<strong>di</strong>sposto alla<strong>realizzazione</strong> <strong>di</strong> <strong>un</strong>a nuova <strong>calibrazione</strong>. L'operatore, nel primo pannellode<strong>di</strong>cato all'acquisizione live delle immagini, con caratteristiche simili aquelle riportate nell'illustrazione 25, impone l'esecuzione dei processi.Illustrazione 25: Pannello per l'acquisizione delle immagini114


5.4.1 Algoritmo relativo al tasto “Avvia”Illustrazione 26: Inserimento dei dati e attivazione dello scatto automaticoAlla pressione del tasto Avvia il co<strong>di</strong>ce associato al <strong>di</strong>alogo:1) Recupera i parametri inseriti.2) Verifica la vali<strong>di</strong>tà dei dati.3) Recupera il path completo del file xml in cui memorizzare i risultati everifica la possibilità <strong>di</strong> aprire il file in questione.4) Recupera il path della <strong>di</strong>rectory in cui scaricare le immagini5) A seguito <strong>di</strong> tali verifiche, impone, i suddetti parametri, in <strong>un</strong>a variabile115


locale del programma GUI, <strong>di</strong> tipo CalibrazioneType.6) Disabilita il pulsante Avvia così da non essere cliccato <strong>un</strong>'altra volta7) Impone, al parametro sincro <strong>di</strong> tale area, il valore esadecimale 00 , a<strong>di</strong>n<strong>di</strong>care che non vi è alc<strong>un</strong>a richiesta <strong>di</strong> interruzione o <strong>di</strong> scatto da partedell'operatore.8) Genera tante aree <strong>di</strong> shared memory <strong>di</strong> <strong>di</strong>mensione 256 byte quante sono letelecamere attivabili. Il numero <strong>di</strong> telecamere e quali (destra o sinistra)<strong>di</strong>pende dalle impostazioni del programma stesso.9) Verifica che le aree siano state correttamente allocate e, per ogn<strong>un</strong>a <strong>di</strong> esse,impone il dato presente nella variabile <strong>di</strong> tipo CalibrazioneType (la cui<strong>di</strong>mensione complessiva è minore dei 256 byte pre<strong>di</strong>sposti)10) Attiva i processi <strong>di</strong> acquisizione per tutte le telecamere definite nel propriofile <strong>di</strong> configurazione.11) I processi associati hanno il tempo per pre<strong>di</strong>sporre e riconoscere la propriatelecamera, acquisendo il dato <strong>di</strong> input dalla periferica USB a cui la stessarisulta collegata, e ad attivarla raggi<strong>un</strong>gendo lo stato <strong>di</strong> acquisizione, vale a<strong>di</strong>re <strong>un</strong> ciclo while infinito terminabile soltanto da comando provenientedalla GUI, nel quale si limitano a visualizzare le immagini che stannoscorrendo davanti all'obiettivo. In questo stato permangono fino a quandol'operatore non esegue <strong>un</strong>a scelta a livello <strong>di</strong> interfaccia grafica.12) Ultima operazione in questa parte <strong>di</strong> co<strong>di</strong>ce è l'attivazione <strong>di</strong> <strong>un</strong> timer (conco<strong>di</strong>ce identificativo 12345) che impone, nella coda dei segnali associati allaGUI, <strong>un</strong> evento ad ogni secondo.13) Il co<strong>di</strong>ce della f<strong>un</strong>zione OnTimer() della GUI, tratta questo eventoaccedendo alla shared memory con<strong>di</strong>visa con i/il processo <strong>di</strong> acquisizioneattivi/o e sulla base dello stato riportato in sincro. Se sincro vale 00 intutte le aree interessate dal processo, allora ness<strong>un</strong> processo <strong>di</strong> acquisizionerisulta impegnato ed è quin<strong>di</strong> possibile “scattare <strong>un</strong>a foto”; quin<strong>di</strong> la GUI116


abilita il tasto “Scatta”. In caso contrario si ha, in qualche area utilizzata,almeno <strong>un</strong> valore <strong>di</strong> sincro <strong>di</strong>verso da 00, quin<strong>di</strong> esiste almeno <strong>un</strong>processo che sta impegnando la CPU; <strong>di</strong> conseguenza la GUI inibisce iltasto Scatta.In altre parole, ad ogni secondo, la GUI verifica lo stato <strong>di</strong>sincronizzazione <strong>di</strong> tutte le telecamere attivate solo per abilitare o<strong>di</strong>sattivare la possibilità <strong>di</strong> premere il tasto <strong>di</strong> scatto.Al primo passaggio, ovvero subito dopo l'attivazione dei processi <strong>di</strong>acquisizione, la GUI troverà tutti i byte <strong>di</strong> sincronizzazione a 00 (avendoliimpostati lei stessa come descritto nel precedente p<strong>un</strong>to 7) e renderàimme<strong>di</strong>atamente <strong>di</strong>sponibile i tasti “Scatta” e “Termina”.5.4.2 Algoritmo associato al tasto “Scatta”Alla pressione, da parte dell'operatore, del pulsante <strong>di</strong> scatto:a) La GUI accede alla shared memory <strong>di</strong> ogni processo <strong>di</strong> <strong>calibrazione</strong> attivo e<strong>di</strong>mpone il valore esadecimale 01.b) <strong>di</strong>sabilita, imme<strong>di</strong>atamente, la possibilità <strong>di</strong> premere <strong>un</strong>a seconda volta il tastoScatta e riprende il suo ciclo <strong>di</strong> polling.c) A questo p<strong>un</strong>to i compiti sono demandati ai processi <strong>di</strong> acquisizione (descritti inseguito) che, trovando il byte a 01 verificano lo stato <strong>di</strong> ritorno della f<strong>un</strong>zione <strong>di</strong>rilevazione angoli. Al termine <strong>di</strong> tale ciclo il byte <strong>di</strong> sincronizzazione ritornerà a00.117


5.4.3 Algoritmo relativo al pulsante “Termina”Alla pressione <strong>di</strong> questo tasto:1. La GUI esegue la chiusura del timer, allocato a seguito della pressione deltasto Avvia, attraverso la f<strong>un</strong>zione KillTimer(12345) ed impone ilvalore FF a tutti i sincro dell'area con<strong>di</strong>visa.2. Ogni processo <strong>di</strong> acquisizione, ricevendo questo “segnale”, termineràqualsiasi interazione con la shared memory ed uscirà dal proprio cicloinfinito. Attenderà, quin<strong>di</strong>, alc<strong>un</strong>i secon<strong>di</strong>, prima <strong>di</strong> terminare la propriaesecuzione.3. La GUI, trascorsi alc<strong>un</strong>i millesimi <strong>di</strong> secondo, chiuderà, definitivamente, learee <strong>di</strong> memoria allocate per la pressione del tasto Avvia.118


Capitolo 6Sincronizzazione dei processiI due processi <strong>di</strong> acquisizione e la GUI interagiscono fra <strong>di</strong> loro secondo<strong>un</strong> or<strong>di</strong>ne ben preciso che evita conflitti durante la fase <strong>di</strong> elaborazione.Si consideri “buona” <strong>un</strong>a immagine risultante da <strong>un</strong>a acquisizione chepermetta <strong>di</strong> riconoscere i p<strong>un</strong>ti <strong>di</strong> intersezione della griglia utilizzata e“non buona” <strong>un</strong>a immagine che non consente la rilevazione <strong>di</strong> tali p<strong>un</strong>ti,questo senza tener conto delle con<strong>di</strong>zioni ambientali, in cui avvienel'acquisizione, che influenzano tale rilevazione.Una immagine, in considerazione dello scopo del suo salvataggio, vale a<strong>di</strong>re il suo utilizzo per <strong>un</strong>a <strong>calibrazione</strong> stereo, non deve essere consideratacome <strong>un</strong>a entità in<strong>di</strong>pendente, ma come <strong>un</strong>a metà delle due immagini checostituiscono <strong>un</strong>a <strong>visione</strong> binoculare.Una coppia <strong>di</strong> immagini è utilizzabile solo se entrambe sono “buone” e intal caso vanno registrate in <strong>un</strong>a <strong>di</strong>rectory prescelta e passate in <strong>un</strong>a fasesuccessiva al processo <strong>di</strong> <strong>calibrazione</strong> stereo.Al contrario nel caso in cui entrambe le telecamere acquisiscano risultati“non buoni” entrambe le immagini sono da scartare.Quando soltanto <strong>un</strong>a sola delle due immagini acquisite risulta accettabile,come nell'illustrazione 27, si deve considerare il problema dellasincronizzazione.119


Illustrazione 27: Coppia <strong>di</strong> immagini in cui soltanto quella <strong>di</strong> destra permette la rilevazione degliangoliL'eliminazione <strong>di</strong> <strong>un</strong>a soltanto delle immagini porta ad <strong>un</strong>a cattivasincronizzazione che produce <strong>un</strong> <strong>di</strong>sallineamento negli in<strong>di</strong>ci delleimmagini acquisite. In questo modo la corrispondenza fra immagine destraed immagine sinistra verrebbe perduta e non potrebbe essere utilizzata daautomatismi che siano in grado <strong>di</strong> riconoscerla a meno <strong>di</strong> interventimanuali sui filename prodotti dai processi. Un altro aspetto riguarda lacorretta sincronizzazione fra la macchina ed il suo utilizzatore per impe<strong>di</strong>rel'introduzione <strong>di</strong> possibili problemi a livello <strong>di</strong> coerenza <strong>di</strong> dati acquisiti.Questo porta ad <strong>un</strong>a semplice considerazione: <strong>un</strong>o scatto non può essereeffettuato fino a quando non si è completato, da parte delle due telecamere,l'elaborazione associata allo scatto precedente. Per semplificare ilproblema si è ipotizzato che, in<strong>di</strong>pendentemente dal fatto che <strong>un</strong>a delle duetelecamere abbia acquisito <strong>un</strong>a immagine buona, se l'altra non ha raggi<strong>un</strong>tolo stesso obiettivo, la coppia <strong>di</strong> immagini deve essere scartata. In tal caso120


cioè ness<strong>un</strong>a delle due immagini dovrà essere salvata sul <strong>di</strong>sco del PC inutilizzo. Questo vincolo permette, fra l'altro, <strong>di</strong> attribuire sequenzenumeriche complete nelle quali non si formano salti come nella tabellaseguente:Imma_sx_001 Imma_sx_002 Imma_sx_005 ...Imma_dx_002 Imma_dx_003 Imma_dx_005 ...Tabella 2: Sequenze <strong>di</strong> filename con salti indesideratima si hanno sequenze:Imma_sx_Imma_dx_nelle quali gli in<strong>di</strong>ci sono associati ad acquisizioni avvenute nellostesso istante.6.1 F<strong>un</strong>zionamento del processo <strong>di</strong> acquisizioneIl generico processo <strong>di</strong> acquisizione associato ad <strong>un</strong>a delle due telecameref<strong>un</strong>ziona secondo il seguente schema:1. Start e recupero dei parametri fondamentali per il f<strong>un</strong>zionamento dall'area <strong>di</strong>memoria che con<strong>di</strong>vide con il programma GUI2. Ingresso in <strong>un</strong> loop infinito nel quale recupera, dalla struttura passata nellashared memory dalla GUI, <strong>un</strong> byte (valori compresi fra 00 e FF) utilizzato per lasincronizzazione dei processi,3. In base al valore recuperato:• FF : Termina la propria esecuzione121


• 00 : Procede nella propria esecuzione recuperando <strong>un</strong>a immagine evisualizzandola• 01 : Verifica che il recupero dei corner nell'immagine correntementeacquisita sia andato a buon fineNei primi due casi non ci sono operazioni da compiere mentre nel terzo ilprogramma deve verificare lo stato <strong>di</strong> ritorno del processo <strong>di</strong> rilevazioneangoli:• se negativo: l'immagine non deve essere salvata• se positivo: l'immagine deve essere salvata se anche il processoassociato all'altra telecamera, ha dato lo stesso esito6.2 F<strong>un</strong>zionamento della GUILa GUI impone, sotto richiesta dell'utente o tramite timer, lo scatto <strong>di</strong> <strong>un</strong>aimmagine nelle aree <strong>di</strong> memoria che vengono con<strong>di</strong>vise con i processiassociati alle due telecamere e si pone in attesa dei risultati <strong>di</strong> questi ultimi.Se il valore ass<strong>un</strong>to dal byte <strong>di</strong> sincronizzazione, interno alle aree <strong>di</strong>memoria con<strong>di</strong>vise con i processi de<strong>di</strong>cati, com<strong>un</strong>ica che i risultati sonoentrambi positivi, la GUI informa l'utente <strong>di</strong> <strong>un</strong>a acquisizione <strong>di</strong> coppiacorretta. Al contrario, se almeno <strong>un</strong>o dei due valori è negativo, informal'utente dell'errore e su quale delle due telecamere. Al termine <strong>di</strong> questaverifica, la GUI riporta il valore del byte <strong>di</strong> sincronizzazione a 00attendendo lo scoccare del prossimo timer o della prossima richiesta <strong>di</strong>scatto da parte dell'utente.122


6.3 Diagramma <strong>di</strong> f<strong>un</strong>zionamento6.3.1 Processo <strong>di</strong> acquisizioneProcesso <strong>di</strong> acquisizione0M=FFM=01x=99CORNERS50 51NOT FOUNDA=0BCORNERSFOUND52 53 54A=0AIllustrazione 28: Diagramma <strong>di</strong> f<strong>un</strong>zionamento dei processi <strong>di</strong> acquisizioneLa figura precedente esplicita il <strong>di</strong>agramma a stati del processo <strong>di</strong>acquisizione e mostra il valore dei vari stati all'interno <strong>di</strong> figuregeometriche aventi il seguente significato:• Cerchio: transizione gestita <strong>di</strong>rettamente dal programma. Latransizione verso il prossimo stato, è regolata da <strong>un</strong> evento che lostato corrente può determinare autonomamente 4 .• Quadrato: transizione verso <strong>un</strong>o stato successivo regolata anche da4 E' il caso dello stato 50: il passaggio agli stati 51 o 52 è vincolato dal risultato ass<strong>un</strong>to da <strong>un</strong>af<strong>un</strong>zione invocata internamente al processo.123


eventi esterni, ad esempio recuperati dalle aree <strong>di</strong> shared memoryche il processo con<strong>di</strong>vide con altri processi 5 .Le tipologie <strong>di</strong> transizione fra stati sono in<strong>di</strong>cate con delle frecce daiseguenti tratti:➢ Transizione <strong>di</strong> colore nero: in<strong>di</strong>ca <strong>un</strong> percorso che viene eseguitonel caso in cui siano in f<strong>un</strong>zione entrambe le telecamere➢ Transizione <strong>di</strong> colore rosso: in<strong>di</strong>ca <strong>un</strong> percorso che il processointraprende sia nel caso sia in f<strong>un</strong>zione <strong>un</strong>a sola telecamera che nelcaso in cui siano in f<strong>un</strong>zione entrambe➢ Transizione <strong>di</strong> colore rosso tratteggiata: in<strong>di</strong>ca che il processointraprende quella strada nel solo caso in cui sia in f<strong>un</strong>zione <strong>un</strong>a solatelecamera6.3.1.1 Stato 01. In questo stato il processo attende richieste provenienti dalla GUIcontrollando il valore del byte <strong>di</strong> sincronizzazione.2. Se arriva <strong>un</strong> segnale <strong>di</strong> acquisizione da parte della GUI passa allostato 50.3. Se non arriva alc<strong>un</strong> segnale (sincro==00) si limita ad acquisire5 Ad esempio, considerando lo stato 0, il processo permane in questo stato fino a quando dallamemoria con<strong>di</strong>visa con la GUI non viene <strong>un</strong> valore <strong>di</strong>fferente da FF o da 01. La lettera M (mio)in<strong>di</strong>ca che l'informazione è letta dall'area <strong>di</strong> memoria che la GUI utilizza per com<strong>un</strong>icare con ilprocesso medesimo.124


<strong>un</strong>a nuova immagine e a visualizzarla nella propria interfaccia <strong>di</strong>output (questa interazione non è esplicitata in figura).4. Se arriva <strong>un</strong>a richiesta <strong>di</strong> chiusura da parte della GUI(sincro==FF) termina la propria esecuzione (x)6.3.1.2 Stato 50In questo stato, raggi<strong>un</strong>gibile sia che il processo venga eseguito per <strong>un</strong>a oper due telecamere, viene effettuato <strong>un</strong> controllo al valore booleano <strong>di</strong>ritorno della f<strong>un</strong>zione cvFindChessboardCorners(). In relazione alvalore restituito si ha:• FALSE: il processo passa allo stato 51.• TRUE: il processo, salva temporaneamente l'immagine su <strong>di</strong>sco epassa allo stato 52.6.3.1.3 Stato 51A questo stato si gi<strong>un</strong>ge per esecuzioni sia con coppie <strong>di</strong> telecamere checon singola telecamera. Si tratta <strong>di</strong> <strong>un</strong>o stato <strong>di</strong> passaggio, a cui si arrivanel caso <strong>di</strong> fallimento nella rilevazione degli angoli, all'interno del quale ilprocesso impone, nell'area <strong>di</strong> memoria che con<strong>di</strong>vide con la GUI, il valore0A a sincro per segnalare che non sono stati trovati angolinell'elaborazione precedente.125


6.3.1.4 Stato 52In questo stato, a cui si gi<strong>un</strong>ge se ha dato esito positivo la rilevazione <strong>di</strong>angoli, il processo d'acquisizione impone a sincro <strong>un</strong> valore pari a 0B.L'immagine, temporaneamente salvata nello stato 50, ha due alternative:• nel caso <strong>di</strong> esecuzione singola viene <strong>di</strong>rettamente confermata• nel caso <strong>di</strong> esecuzione doppia può essere definitivamenteconvalidata se anche l'altro processo abbia raggi<strong>un</strong>to lo stessorisultatoNel primo caso non sono necessarie altre operazioni ed il controllo puòtornare alla GUI. Il processo continua la propria esecuzione acquisendo evisualizzando nuove immagini nell'intervallo prefissato.Nel secondo caso deve avvenire la verifica dei risultati otteniti dall'altroprocesso e vanno intraprese le conseguenti azioni, per fare ciò si passa allostato 53.6.3.1.5 Stato 53A questo stato si gi<strong>un</strong>ge solo per esecuzioni con coppia <strong>di</strong> telecamere.Qui il processo controlla sia il byte <strong>di</strong> sincronizzazione nell'area <strong>di</strong>memoria che con<strong>di</strong>vide con la GUI sia il valore dello stesso byte delprocesso gemello.126


Se non gi<strong>un</strong>gono segnali <strong>di</strong> interruzione da parte della GUI si hanno questealternative:• Se il processo gemello segnala <strong>un</strong>a acquisizione positiva(sincro==0B) il processo corrente si sblocca e ritorna allo stato <strong>di</strong>partenza.• Al contrario, se il processo gemello da <strong>un</strong> segnale negativo(sincro==0A) passa allo stato 54, dove eseguirà la pulizia dellearee temporaneamente impegnate.6.3.1.6 Stato 54A questo stato si gi<strong>un</strong>ge solo per esecuzioni con coppia <strong>di</strong> telecamere esolo nel caso in cui l'esito della cvFindChessboardCorners() sia:a) Positivo per la telecamera correnteb) Negativo per l'altra.Rappresenta, quin<strong>di</strong>, solo <strong>un</strong>o stato <strong>di</strong> transizione all'interno del quale:1. Viene cancellata l'immagine temporaneamente salvata.2. Il contatore <strong>di</strong> immagini salvate viene resettato al valore precedente.3. Viene <strong>di</strong>chiarato il fallimento anche per questa acquisizione. Questop<strong>un</strong>to permette alla GUI <strong>di</strong> determinare che l'acquisizione correntenon è andata a buon fine per entrambe le telecamere.4. Si torna allo stato 0.127


6.3.2 GUIIllustrazione 29: Diagramma <strong>di</strong> f<strong>un</strong>zionamento della GUIAlla GUI sono affidate tutte le operazioni <strong>di</strong> interazione <strong>di</strong>retta conl'utente. Dall'illustrazione 26 si può vedere che l'interfaccia relativa ad <strong>un</strong>anuova acquisizione è <strong>di</strong>visa in schede attraverso <strong>un</strong> TabControl. La GUI èin grado <strong>di</strong> <strong>di</strong>stinguere in quale scheda è avvenuta la pressione <strong>di</strong> <strong>un</strong>determinato tasto. In f<strong>un</strong>zione delle scelte dell'operatore, la GUI si limitaad or<strong>di</strong>nare, se l'utente si trova nel primo <strong>di</strong> questi pannelli, l'acquisizione<strong>di</strong> <strong>un</strong>a coppia <strong>di</strong> immagini dalle due telecamere e ad analizzarne i risultatifinali proponendo <strong>un</strong> messaggio <strong>di</strong> esito sull'acquisizione corrente allostesso operatore. Essa ha due modalità <strong>di</strong> f<strong>un</strong>zionamento: quellaautomatica e quella manuale. Nel primo caso gli scatti sono gestiti da <strong>un</strong>evento timer, nel secondo da <strong>un</strong>a scelta dello stesso utente. Anche se glistati proposti nello schema precedente sono molto simili nelle operazioni128


compiute è conveniente <strong>di</strong>stinguerli in base al f<strong>un</strong>zionamento: questo evital'utilizzo <strong>di</strong> troppi statement if che compromettono la facile lettura delco<strong>di</strong>ce e danno a<strong>di</strong>to a cattive interpretazioni. La prima operazioneassociata alla pressione del pulsante Avvia è il recupero dei parametriinseriti che impone alla GUI il passaggio per lo stato 0 prossimo descritto.6.3.2.1 Stato 0In questo stato la GUI determina, in relazione a quali parametri l'utente hainserito, se la modalità <strong>di</strong> esecuzione debba essere manuale o automatica.Sulla base <strong>di</strong> questo impone <strong>un</strong>o tra i seguenti stati:• Stato 10: modalità <strong>di</strong> esecuzione manuale.• Stato 20: modalità <strong>di</strong> esecuzione automatica.A questo p<strong>un</strong>to la GUI, come descritto nel paragrafo 5.4, sulla base delfatto che siano collegate <strong>un</strong>a o due telecamere, genera le aree <strong>di</strong> memorianecessarie per il corretto f<strong>un</strong>zionamento del programma e attiva il/iprocessi <strong>di</strong> acquisizione. Attiva, quin<strong>di</strong> il timer per il controllo dei processie delle richieste utente6.3.2.2 Stato 10In questo stato il programma verifica che vi sia <strong>un</strong> comando utenteattraverso la pressione dei tasti Scatta o Termina e, in base al fatto che visia <strong>un</strong>a o più telecamere, interroga ciclicamente (polling) il contenuto delle129


shared memory alla ricerca <strong>di</strong> stati <strong>di</strong> processo com<strong>un</strong>icati dai programmi<strong>di</strong> acquisizione. Permane nello stato 10 fino a quando non rileva larichiesta da parte dell'utente <strong>di</strong> terminare i processi <strong>di</strong> acquisizioneme<strong>di</strong>ante la pressione del tasto Termina oppure siano rilevati:• i valori 0A o 0B nel caso <strong>di</strong> <strong>un</strong>a singola telecamera,• la coppia <strong>di</strong> valori (0A, 0A) o (0B,0B) nel caso <strong>di</strong> doppie telecamere.I valori riportati com<strong>un</strong>icano se si ha avuto <strong>un</strong> insuccesso o menodell'operazione richiesta. Si hanno i seguenti casi:• fallimento: passa allo stato 11,• successo: passa allo stato 12.6.3.2.3 Stato 11Visualizza <strong>un</strong> messaggio sull'interfaccia grafica nel quale esplicita l'erroresulla tentata acquisizione e riattiva il tasto scatta6.3.2.4 Stato 12Visualizza <strong>un</strong> messaggio sull'interfaccia grafica nel quale esplicita lariuscita dell'operazione e riattiva il tasto scatta.130


Capitolo 7Interfaccia grafica e tutorialQuesto capitolo descriverà i <strong>di</strong>aloghi che costituisco la Graphical UserInterface e allo stesso tempo mostrerà tutte le f<strong>un</strong>zionalità del programmaallo scopo <strong>di</strong> guidare passo passo anche l'utente più inesperto.Illustrazione 30: Interfaccia grafica all'avvio del programma7.1 Approccio iniziale7.1.1 Esecuzione del programmaIl programma oggetto della presente tesi ha effetto soltanto su S.O.Microsoft. Per la sua esecuzione sono necessarie le Dynamic-link library:• opencv_calib3d220.dll• opencv_core220.dll• opencv_highgui220.dll• opencv_imgproc220.dll131


Nonché i file eseguibili:• AcqImg.exe• <strong>calibrazione</strong>.exe• GUI.exeIl lancio del programma, che deve avvenire me<strong>di</strong>ante l'ultimo eseguibile,provoca la visualizzazione della finestra principale dotata <strong>di</strong> barra deglistrumenti e del menù mostrata nell'illustrazione 30.È da tenere presente durante la lettura dei documenti visualizzati dalla GUIche il tratto rosso con cui sono presentati alc<strong>un</strong>i valori o com<strong>un</strong>icazioni ha<strong>un</strong> significato negativo. In altre parole quel dato potrebbe in<strong>di</strong>carel'impossibilita <strong>di</strong> attivare <strong>un</strong>a determinata operazione oppure cheverosimilmente quel valore si <strong>di</strong>scosta dalla grandezza attesa.7.1.2 IDD_ABOUTBOXIllustrazione 31: Dialogo per la visualizzazione <strong>di</strong> informazioniIl <strong>di</strong>alogo che visualizza le informazioni relative all'autore del programma132


non permette interazioni <strong>di</strong>rette fra utente e <strong>sistema</strong> se non la sua chiusura(attraverso la pressione del tasto OK). La classe <strong>di</strong> controllo CaboutDlg èdefinita ed implementata <strong>di</strong>rettamente nel file GUI.cpp7.1.3 Impostazione dei processi <strong>di</strong> acquisizioneÈ possibile notare la tabella “Modalità <strong>di</strong> esecuzione impostate” che, incorrispondenza della telecamera riportata nella prima colonna, in<strong>di</strong>ca nellaseconda colonna:• Non Attivabile se non è possibile aprire la corrispondentetelecamera• Attivabile in caso contrarioE nella terza colonna:• Visualizzazione OFF se è <strong>di</strong>sattivata la cattura dei fotogrammi• Visualizzazione ON in caso contrarioÈ possibile mo<strong>di</strong>ficare tali parametri selezionando “Impostazioni” ➪“ProcessiAcquisizione” in modo da aprire il <strong>di</strong>alogo “Controllo deiprocessi <strong>di</strong> acquisizione” visibile nell'illustrazione 32.Questo <strong>di</strong>alogo ha come identificatore IDD_IMPOSTAZIONE_PROCESSI ela sua classe <strong>di</strong> controllo (CimpostazioneProcessi) è implementata nelfile ImpostazioneProcessi.cpp e definita in ImpostazioneProcessi.h. Esso,attraverso i check box, controlla il numero <strong>di</strong> processi associati a qualsiasifase <strong>di</strong> acquisizione imponendo nella shared memory utilizzata i coman<strong>di</strong><strong>di</strong> controllo del processo e, se non ancora attivi, permette <strong>di</strong> impostarli perla prossima esecuzione provocando l'aggiornamento della tabella133


nell'interfaccia iniziale. Il tasto “Reimposta On Line”, se la telecamerarelativa è stata attivata in precedenza, forza temporaneamente i nuovivalori nella shared memory ad essa associata.Illustrazione 32: Dialogo per l'impostazione dei processi <strong>di</strong> acquisizione7.1.4 Avviare i processi <strong>di</strong> acquisizioneLa pressione della prima icona della toolbar o, in modo equivalente, laselezione <strong>di</strong> “Controllo”➪ “Avviare processi acquisizione” permettel'esecuzione dei processi <strong>di</strong> cattura <strong>di</strong> flussi video precedentementeimpostati. Ogni abilitazione dell'apertura <strong>di</strong> <strong>un</strong>a telecamera provocal'esecuzione del processo associato, la visualizzazione <strong>di</strong> <strong>un</strong>a finestra per lacom<strong>un</strong>icazione delle operazioni eseguite e <strong>un</strong> <strong>di</strong>alogo, fornito dalla classe134


VideoCapture e rappresentato nell'illustrazione 33, che permette laselezione del <strong>di</strong>spositivo desiderato. Se non si riscontra l'avvio <strong>di</strong> alc<strong>un</strong>processo video, nonostante si sia verificato che le telecamere siano statecompletamente attivate, significa che l'applicazione non riesce a rilevareness<strong>un</strong> <strong>di</strong>spositivo; questo può avvenire per incompatibilità o perchéeffettivamente ness<strong>un</strong>a telecamera è collegata correttamente al PC.Questa prima modalità <strong>di</strong> esecuzione dei processi <strong>di</strong> acquisizione ha loscopo <strong>di</strong> testare la capacità dell'hardware e del software <strong>di</strong> supportarequesto tipo <strong>di</strong> applicazione. Nel caso in cui la visualizzazione delleimmagini vada a buon fine, senza rallentamenti da parte del <strong>sistema</strong> nelsuo complesso, si ha <strong>un</strong>a in<strong>di</strong>cazione positiva sull'efficaciadell'applicazione in quel particolare contesto.Illustrazione 33: Scelta del <strong>di</strong>spositivo da cui acquisire ilvideo135


Un altro utilizzo può essere quello <strong>di</strong> ausilio alla <strong>sistema</strong>zione delletelecamere. Il progetto presuppone l'utilizzo <strong>di</strong> <strong>un</strong> <strong>sistema</strong> <strong>di</strong> <strong>visione</strong>stereoscopico, perciò le due telecamere devono essere parallele. Se lostudente o il ricercatore non è in possesso <strong>di</strong> <strong>un</strong>a telecamera giàpre<strong>di</strong>sposta per la stereoscopia, le sue telecamere non saranno rigide fraloro e saranno facilmente rotabili, così inquadrando <strong>un</strong> oggetto conentrambe le telecamere si potrà aumentare il parallelismo tra gli assi otticicercando <strong>di</strong> far sì che l'oggetto si trovi sulle stesse scanline in entrambe leinquadrature. Allo stesso modo il flusso video permette <strong>di</strong> <strong>sistema</strong>re lamessa a fuoco manuale.Illustrazione 34: Immagine originale e sua trasformata <strong>di</strong> CannyQuando <strong>un</strong>a telecamera è selezionata e confermata si avvia <strong>un</strong> flusso videoper quello specifico <strong>di</strong>spositivo in <strong>un</strong>a finestra <strong>di</strong> nome “Camera Sinistra”o “Camera Destra” e associata ad ogn<strong>un</strong>a <strong>di</strong> queste immagini se ne apre<strong>un</strong>'altra finestra che visualizza la relativa trasformata <strong>di</strong> Canny 6 . In questo6 Eseguita con <strong>un</strong>a specifica f<strong>un</strong>zione OpenCV da <strong>un</strong> esempio inhttp://opencv.willowgarage.com/documentation/cpp/rea<strong>di</strong>ng_and_writing_images_and_video.html136


contesto la trasformata <strong>di</strong> Canny non ha <strong>un</strong> impatto <strong>di</strong>retto sui risultatidell'applicazione, sebbene questo tipo <strong>di</strong> trasformazione abbia importantiapplicazioni nell'Image Processing, ma ha il duplice scopo <strong>di</strong> sollecitarel'utilizzo <strong>di</strong> memoria volatile (per mettere alla prova l'hardware e lagestione della RAM da parte del <strong>sistema</strong> operativo) e mostrare come siapossibile riutilizzare il programma per sviluppi futuri che prevedanoquesto genere <strong>di</strong> elaborazioni.7.2 Avviare le operazioni inerenti <strong>un</strong>a <strong>calibrazione</strong>Una volta <strong>sistema</strong>te le telecamere è possibile procedere con la <strong>calibrazione</strong>cliccando sull'icona a scacchiera o, in modo equivalente, su “Controllo” ➪“Calibrazione”.Illustrazione 35: Finestra <strong>di</strong> <strong>di</strong>alogo con ra<strong>di</strong>o-buttonLa classe Calibrazione, definita nel file Calibrazione.h ed implementata nelfile Calibrazione.cpp, controlla il <strong>di</strong>alogo IDD_CALIBRAZIONE il qualepresenta tre ra<strong>di</strong>o-button (illustrazione 35) <strong>di</strong> cui i primi due permettono lascelta dei parametri <strong>di</strong> <strong>calibrazione</strong>, caricando insiemi <strong>di</strong> datiprecedentemente definiti, che verranno applicati durante le fasi successive,137


mentre la terza opzione consente <strong>di</strong> acquisirne <strong>di</strong> nuovi.Se è la prima volta che si esegue <strong>un</strong>a <strong>calibrazione</strong> è necessario selezionarel'ultimo ra<strong>di</strong>o-button il quale, <strong>un</strong>a volta premuto il tasto <strong>di</strong> conferma, avviail <strong>di</strong>alogo IDD_NUOVA_CALIBRAZIONE nell'illustrazione 3.7.3 Implementazione del tab controlLa struttura <strong>di</strong> base del controllo a schede, implementata me<strong>di</strong>ante lalibreria Microsoft Fo<strong>un</strong>dation Classes, è presentata nell'illustrazione 36.All'apertura del <strong>di</strong>alogo vengono inizializzati i campi (Tab 1, Tab 2, ...),mentre alla pressione del singolo elemento la tab si ri<strong>di</strong>mensionaopport<strong>un</strong>amente e consente la visualizzazione al suo interno <strong>di</strong> <strong>un</strong> sotto<strong>di</strong>alogo.Illustrazione 36: Struttura del Tab control inserito inIDD_NUOVA_CALIBRAZIONEI sotto-<strong>di</strong>aloghi permettono <strong>di</strong> scegliere tra le seguenti operazioni:138


1. IDD_CALIBRAZIONE_LIVE: Acquisizione e salvataggio delleimmagini per la <strong>calibrazione</strong>2. IDD_CALIBRAZIONE_LISTA_IMMAGINI: Calibrazione dalleimmagini salvate3. IDD_CALIBRAZIONE_VIDEOAd ogni sotto-<strong>di</strong>alogo è associata <strong>un</strong>a classe inglobata all'interno dellaclasse CmyTabCtrl, implementata e definita in CmyTabCtrl.cpp eCmyTabCtrl.h, che deriva dalla CTabCtrl <strong>di</strong> MFC ere<strong>di</strong>tandone tutti imeto<strong>di</strong> e sovrascrivendo quelli per il controllo dei Tab in modo tale chevengano visualizzati i sotto-<strong>di</strong>aloghi alla pressione del tab corrispondente.7.4 Primo sotto-<strong>di</strong>alogo e raccolta delle immaginiIllustrazione 37: Sotto-<strong>di</strong>alogo IDD_CALIBRAZIONE_LIVELa classe <strong>di</strong> controllo SubDlgCalibrazioneLive, relativa al primo sotto<strong>di</strong>alogo,implementata e definita, rispettivamente, nei fileSubDlgCalibrazoneLive.cpp e SubDlgCalibrazioneLive.h, è presentata139


nell'illustrazione 37 e permette l'inserimento dei parametri <strong>di</strong> base in modoche la <strong>calibrazione</strong> possa essere correttamente eseguita.7.4.1 Inserimento dei datiNei primi due spazi <strong>di</strong> IDD_CALIBRAZIONE_LIVE, partendo dall'alto,vanno inseriti gli angoli interni (in orizzontale e in verticale) presenti nellascacchiera; ad esempio per la scacchiera dell'illustrazione 27 va inserito 6 e8 in qualsiasi or<strong>di</strong>ne. Tali valori ovviamente devono essere maggiori <strong>di</strong> 2altrimenti nella relativa <strong>di</strong>rezione si hanno meno <strong>di</strong> 2 quadrati.È consigliabile imporre il numero massimo <strong>di</strong> angoli rilevabili in ogni<strong>di</strong>rezione in quanto valori inferiori, nella maggior parte dei casi, neimpe<strong>di</strong>scono l'estrazione o, ancor peggio, possono portare alla rilevazione<strong>di</strong> corner <strong>di</strong>fferenti nelle due immagini, come può essere notato osservandogli angoli illuminati nella prossima figura.Illustrazione 38: Rilevazione errata dovuta ad <strong>un</strong> inserimento non corretto dei parametriA fianco <strong>di</strong> “<strong>di</strong>mensione della casella” va inserita la l<strong>un</strong>ghezza <strong>di</strong> <strong>un</strong> lato <strong>di</strong><strong>un</strong>a casa degli scacchi in qualsiasi <strong>un</strong>ità <strong>di</strong> misura, tuttavia l'immissione <strong>di</strong>140


dati in centimetri porta a risultati finali <strong>di</strong> più facile lettura. In questo casoil controllo sul dato impone valori maggiori <strong>di</strong> zero.In “Rapporto <strong>di</strong> aspetto” si deve inserire il rapporto tra l<strong>un</strong>ghezza e altezzadell'immagine che assume valori compresi tra 1 e 2; se ad esempio sihanno immagini 640x480 il valore dovrà essere 1.33, vale a <strong>di</strong>re che sihanno immagini in 4/3.Come si può costatare dalle illustrazioni 25 e 26, nella parte inferiore del<strong>di</strong>alogo principale sono presenti altri campi <strong>di</strong> input:a) Path file delle acquisizionib) Path file mycc) Nome base delle immaginiLe prime due aree accolgono il percorso, rispettivamente, delle <strong>di</strong>rectory incui andranno salvate le immagini e quello del file myc 7contenente irisultati finali della <strong>calibrazione</strong>.Questi due campi possono essere inseriti in due mo<strong>di</strong> <strong>di</strong>fferenti:• manualmente, nel qual caso è preferibile verificare la correttezza deldato.• attraverso la pressione del tasto contrassegnato da “*” che apre <strong>un</strong>afinestra <strong>di</strong> <strong>di</strong>alogo per la selezione della <strong>di</strong>rectory.Dalle finestra per la selezione della <strong>di</strong>rectory è possibile navigare su<strong>di</strong>fferenti <strong>di</strong>schi presenti sul PC in utilizzo o navigare all'interno <strong>di</strong> <strong>un</strong>singolo <strong>di</strong>sco. La <strong>di</strong>rectory per la raccolta <strong>di</strong> immagini, per default,all'apertura del <strong>di</strong>alogo viene presentata come quella <strong>di</strong> esecuzione della7 Il nome dell'estensione myc è stato scelto in quanto abbreviazione <strong>di</strong> “my calibration”141


GUI ed il relativo <strong>di</strong>sco in cui la stessa è stata definita. Il file myc alcontrario viene impostato nella cartella documenti e il suo nome <strong>di</strong> defaultderiva da data e orario in cui è stato premuto il tasto “*”. Per cambiare<strong>di</strong>rectory è necessario imporre il <strong>di</strong>sco, selezionare la <strong>di</strong>rectory e allapressione del tasto imposta, preferibilmente dopo aver verificato il campo“Directory correntemente selezionata”, il nome della <strong>di</strong>rectory presceltaverrà sovrascritto nel campo associato al tasto premuto.Per l'area inerente a “Nome Base Immagine” va inserita la ra<strong>di</strong>ce dei nomidei file, con estensione jpg, da salvare.Questi parametri sono sufficienti per effettuare <strong>un</strong>a raccolta <strong>di</strong> immagininella modalità con scatto manuale (illustrazione 25), mentre i prossimi duesono necessari se si vuole effettuare <strong>un</strong>a <strong>calibrazione</strong> con scatto automatico(illustrazione 26).Lo spazio relativo a “Numero fotogrammi” permette <strong>di</strong> stabilire il numero<strong>di</strong> scatti da effettuare, mentre “Ritardo in secon<strong>di</strong>” imposta il tempo cheintercorre tra <strong>un</strong>o scatto e il successivo.7.4.2 Scatto manuale o automaticoLo scatto manuale conferisce <strong>un</strong>a maggiore consapevolezza a priori delleimmagini che saranno salvate e successivamente utilizzate per la<strong>calibrazione</strong>. È possibile infatti posizionare la scacchiera nel modo ritenutopiù opport<strong>un</strong>o e cliccare sul pulsante scatta. In questo caso però l'utentesarà costretto a cliccare sul pulsante “Scatta” per ogni immagine da142


catturare e, allo stesso tempo, muovere in maniera idonea la scacchiera.Nel caso <strong>di</strong> scatto automatico, dovrà preoccuparsi solo del posizionamentodella scacchiera perdendo però il controllo del momento esatto delloscatto. L'indubbia como<strong>di</strong>tà <strong>di</strong> questa modalità si riflette quin<strong>di</strong> in <strong>un</strong>aserie <strong>di</strong> immagini collocate in posizioni non predeterminate e, in tal<strong>un</strong>icasi, se l'operatore non è sufficientemente tempestivo nel <strong>sistema</strong>re lascacchiera in zone <strong>di</strong> inquadratura com<strong>un</strong>e tra le due telecamere, si rischia<strong>di</strong> <strong>di</strong>minuire il numero <strong>di</strong> fotogrammi preventivati in fase <strong>di</strong> inserimentodati. Se tali problemi dovessero risultare considerevoli, <strong>un</strong> modo perridurre questi rischi è quello <strong>di</strong> aumentare il “ritardo in secon<strong>di</strong>”effettuando <strong>un</strong>a <strong>di</strong>lazione tra gli scatti e avere così più tempo per collocareopport<strong>un</strong>amente il pattern <strong>di</strong> <strong>calibrazione</strong>.Una volta catturate le immagini queste vengono salvate nella <strong>di</strong>rectoryscelta al cui interno, al termine, saranno presenti tre sequenze <strong>di</strong> immaginii cui filename, supponendo che il nome <strong>di</strong> base sia “Im”, sono mostratinella seguente tabella:ImDestra0001.jpg ImDestra0002.jpg ImDestra0003.jpg ...ImDestra0001_ImDestra0002_ImDestra0003_...CORNERS.jpgCORNERS.jpgCORNERS.jpgImSinistra0001.jpg ImSinistra0002.jpg ImSinistra0003.jpg ...ImSinistra0001_ImSinistra0002_ImSinistra0003_...CORNERS.jpgCORNERS.jpgCORNERS.jpgTabella 3: Esempio <strong>di</strong> sequenza <strong>di</strong> filename salvata su <strong>di</strong>scoLe immagini che presentano il suffisso “CORNERS” evidenziano i p<strong>un</strong>tisalienti della scacchiera.143


Nella modalità automatica il programma si arresterà al termine del numero<strong>di</strong> fotogrammi inseriti, mentre nel caso manuale sarà necessario premere“Termina”. A questo p<strong>un</strong>to è possibile passare alla seconda sessione per la<strong>calibrazione</strong> vera e propria selezionando la seconda scheda del TABcontrol.7.4.3 Benefici apportati all'applicazione dal <strong>sistema</strong> <strong>di</strong>memorizzazione dei fotogrammiNon tutte le altre applicazioni per la <strong>calibrazione</strong> <strong>di</strong> telecamere prevedonol'acquisizione e il salvataggio delle immagini. Alc<strong>un</strong>e <strong>di</strong> queste, sfruttandotemporaneamente le immagini acquisite in tempo reale (senza il lorosalvataggio) eseguono calibrazioni che forniscono dati non ripetibiliessendo impossibile acquisire immagini identiche nelle esecuzionisuccessive. Altri software prevedono l'utilizzo <strong>di</strong> immagini salvate su <strong>di</strong>scosenza prevedere al loro interno <strong>un</strong> modo per la memorizzazioneobbligando l'utente a ricorrere ad applicazioni esterne per la cattura <strong>di</strong>sequenze video da telecamere. Le applicazioni che supportano ilsalvataggio delle immagini, solitamente, non prevedono <strong>un</strong>a preselezione<strong>di</strong> queste in base alla capacità dei fotogrammi <strong>di</strong> permettere la rilevazionedei corner. Fotogrammi che presentano <strong>un</strong> contrasto esageratamenteaccentuato, o catturati in ambienti dalla illuminazione scarsa oppure in cuisono presenti altri <strong>di</strong>fetti (elevata sfocatura, rumore, etc.) checompromettono la corner detection, in genere vengono persi in fase <strong>di</strong>144


<strong>calibrazione</strong> riducendo il numero delle immagini utilizzabili.In altre parole il presente progetto sfrutta la f<strong>un</strong>zionecvFindChessboardCorners()per salvare su <strong>di</strong>sco soltantofotogrammi in cui gli angoli della scacchiera vengono effettivamenterilevati spostando a monte dell'algoritmo <strong>di</strong> <strong>calibrazione</strong> lo scarto delleimmagini non buone.Un ulteriore vantaggio è quello <strong>di</strong> poter revisionare ogni immagine seguitadal suffisso “CORNERS” allo scopo <strong>di</strong> determinare quali immagini <strong>di</strong>anorisultati poco accurati. In fase <strong>di</strong> test si è riscontrato che alc<strong>un</strong>e sequenze <strong>di</strong>immagini che davano luogo a errori elevati, a valle <strong>di</strong> <strong>un</strong>a <strong>di</strong>scriminazionein base all'accuratezza degli angoli evidenziati, portavano a risultatiaccettabili.7.5 Secondo sotto-<strong>di</strong>alogoIl sotto-<strong>di</strong>alogo IDD_CALIBRAZIONE_LISTA_IMMAGINI, incluso allapressione del tab “2-Calibrazione da Immagini” all'interno del <strong>di</strong>alogoIDD_NUOVA_CALIBRAZIONE, può essere concettualmente sud<strong>di</strong>viso in treparti.Nella parte superiore compaiono filename e path da cui sono prelevate leimmagini; nella parte centrale è presente <strong>un</strong> “list view control" chevisualizza <strong>un</strong> elenco <strong>di</strong> elementi con icone, mentre nella parte inferiorefigurano due check box.La classe <strong>di</strong> riferimento SubDlgCalibrazioneListaImmagini, subitoprima <strong>di</strong> visualizzare la <strong>di</strong>alog box, carica due icone consistenti in due145


piccoli cerchi <strong>di</strong> colore verde e rosso e produce i campi della lista <strong>di</strong>elementi che si possono osservare nell'illustrazione 39.Illustrazione 39: Seconda scheda del tab control7.5.1 Visualizzazione della lista <strong>di</strong> coppie <strong>di</strong> filenameSe l'operatore accede al secondo pannello subito dopo aver acquisito leimmagini ha già inserito i dati necessari, al contrario deve inserire iparametri nel caso in cui voglia effettuare <strong>un</strong>a <strong>calibrazione</strong> da immaginisalvate non recentemente.Alla pressione del tasto “Avvia” viene abilitato il pulsante “Calibrazione”,146


sono poi visualizzati nomi e percorsi dei file nella parte superiore prima <strong>di</strong>chiamare la f<strong>un</strong>zione ResetContentDialog(). Questa f<strong>un</strong>zione eliminai vecchi elementi della lista e cerca i file nella <strong>di</strong>rectory <strong>di</strong> base specificatache rispettano i criteri imposti, riempie i campi pre<strong>di</strong>sposti e fornisce trepossibili risultati:1. Le coppie corrispondono perfettamente, quin<strong>di</strong> viene restituito ilnumero <strong>di</strong> coppie in<strong>di</strong>viduate.2. Le immagini <strong>di</strong> sinistra e quelle <strong>di</strong> destra sono <strong>di</strong>fferenti3. Non sono presenti immagini nella <strong>di</strong>rectory specificata cherispettano i criteri immessi.Nei primi due casi apparirà <strong>un</strong>a lista in cui figurano i nomi delle immagini<strong>di</strong>sposte in coppie. Ogni coppia corrisponde ad immagini catturatecontemporaneamente a cui è associato <strong>un</strong>o stesso numero più la parola“Sinistra” o “Destra” per specificare la telecamera con la quale è statacatturata. Al lato <strong>di</strong> ogni coppia è presente il numero nella lista con <strong>un</strong>aicona precedentemente caricata, vale a <strong>di</strong>re <strong>un</strong> pallino colorato che puòessere:• Verde se esistono sia l'immagine sinistra che destra• Rossa se l'immagine destra non è presente ed è quin<strong>di</strong> etichettata da<strong>un</strong>a “X”.7.5.2 Conferma delle singole coppie <strong>di</strong> immaginiFacendo <strong>un</strong> doppio click sul pallino si apre <strong>un</strong> nuovo <strong>di</strong>alogo per lavisualizzazione della relativa coppia <strong>di</strong> immagini in <strong>un</strong> formato compresso147


come nell'illustrazione 40. Non ci si deve preoccupare se la compressioneriduce considerevolmente la qualità delle immagini poiché nella <strong>di</strong>rectoryin cui verranno prelevate permangono nella loro forma originaria. Questo<strong>di</strong>alogo rende l'utente consapevole <strong>di</strong> qualche errore nel salvataggio delleimmagini dovuto ad <strong>un</strong>a memorizzazione esterna al programma 8 oppure daparte del software in fase <strong>di</strong> acquisizione, permettendo <strong>di</strong> cancellareme<strong>di</strong>ante la pressione del tasto “Elimina coppia dalla <strong>calibrazione</strong>” tutte lecoppie associate ad <strong>un</strong> pallino rosso.Illustrazione 40: Dialogo con identificativo IDD_VIS_IMGRisultati poco sod<strong>di</strong>sfacenti <strong>di</strong> alc<strong>un</strong>e calibrazioni possono essere dovutiad immagini <strong>di</strong> scarsa qualità che evidenziano gli angoli della scacchieranonostante tale deficienza. In certi casi, anche se la cattura delle immaginiè <strong>un</strong>'operazione abbastanza rapida, l'utente può preferire eliminare quelleche non ritiene accettabili senza doverne acquisire <strong>di</strong> ulteriori.8 Ad esempio attraverso <strong>un</strong> copia-incolla <strong>di</strong> immagini precedentemente acquisite e spostate da <strong>un</strong>'altra<strong>di</strong>rectory.148


Sebbene in questo <strong>di</strong>alogo potrà rimuovere le coppie non ritenuteaccettabili, nel caso in cui, a fronte <strong>di</strong> <strong>un</strong> esito poco sod<strong>di</strong>sfacente della<strong>calibrazione</strong>, non sia sufficiente il <strong>di</strong>alogo IDD_VIS_IMG per riconoscerequali immagini siano <strong>di</strong> scarsa qualità può aprire la <strong>di</strong>rectory in cui sonostate salvate le immagini ed esaminare quelle a cui corrisponde il suffisso“CORNERS” in cui sono <strong>di</strong>stinguibili gli angoli colorati. Qualora l'utentevoglia scartare i file in cui siano evidenziati angoli che non corrispondonoperfettamente a quelli presenti sulla scacchiera, oppure nei quali vi sia <strong>un</strong>ailluminazione non idonea, dovrà eliminare tutti i file che presentanonumero <strong>di</strong> immagine e nome <strong>di</strong> base medesimi. Bisogna però tenere inconsiderazione il numero dei fotogrammi utilizzabili per la <strong>calibrazione</strong> altermine <strong>di</strong> questa operazione perché calibrazioni effettuate su pocheimmagini portano a risultati poco accurati.7.5.3 Selezione delle opzioniUna volta cancellate o confermate le immagini l'utente può scegliere seselezionare i due check-box nella parte inferiore del secondo sotto-<strong>di</strong>alogo.Il primo consente <strong>di</strong> visualizzare, <strong>un</strong>a volta ultimata la <strong>calibrazione</strong>, latrasformazione <strong>di</strong> rettificazione applicata sulle immagini immesse, inmodo da verificare preliminarmente la qualità della <strong>calibrazione</strong>.La selezione del secondo check-box permette <strong>di</strong> adottare il metodo <strong>di</strong>Bouguet 9 per la rettificazione, altrimenti per default viene utilizzato ilmetodo <strong>di</strong> Hartley.9 Ve<strong>di</strong> capitolo 3149


L'ultima opzione concessa all'utente è il metodo con cui effettuare ilcalcolo della matrice fondamentale, ma è importante rendere noto che taleopzione non ha alc<strong>un</strong> effetto se è selezionato il metodo <strong>di</strong> Bouguet inquanto soltanto il metodo <strong>di</strong> Hartley sfrutta la matrice fondamentale per ilcalcolo della trasformazione <strong>di</strong> rettificazione.I meto<strong>di</strong> che si possono scegliere sono 10 :• Metodo dei sette p<strong>un</strong>ti in<strong>di</strong>cato con “FM_7POINT”.• Metodo degli otto p<strong>un</strong>ti in<strong>di</strong>cato con “FM_8POINT”• Metodo RANSAC in<strong>di</strong>cato con “FM_RANSAC” e impostato perdefault• Metodo LmedS e in<strong>di</strong>cato con “FM_LMEDS”7.6 Stereo-<strong>calibrazione</strong> e visualizzazione dei risultati7.6.1 Pressione del tasto “Calibrazione”Le prime operazioni alla pressione del tasto per l'avvio della <strong>calibrazione</strong>vera e propria concernono la verifica dei parametri inseriti e delle coppiepresenti nella <strong>di</strong>rectory, dopo<strong>di</strong>ché viene creato <strong>un</strong> vettore <strong>di</strong> stringhe con ipath delle immagini e vengono inizializzate le variabili booleane associateai check-box descritti nel paragrafo precedente.A questo p<strong>un</strong>to vengono passati i parametri, il vettore <strong>di</strong> pathfile e levariabili booleane alla f<strong>un</strong>zione StereoCalib() che è stata prelevata da <strong>un</strong>o10 Nel capitolo 3 è presente <strong>un</strong>a più accurata descrizione delle <strong>di</strong>fferenze fra i vari meto<strong>di</strong>150


degli esempi campione 11mo<strong>di</strong>fiche per adattarla al software qui presentato.<strong>di</strong> OpenCV a cui sono state apportate delleIllustrazione 41: Coppia <strong>di</strong> immagini rettificateNel caso in cui sia stata sp<strong>un</strong>tata la voce per la visualizzazione delleimmagini rettificate appariranno, come nell'illustrazione 41, coppie <strong>di</strong>immagini <strong>di</strong>storte rispetto alle originali per il processo <strong>di</strong> rettificazione, ilquale fa in modo che i p<strong>un</strong>ti corrispondenti possano giacere su <strong>un</strong>a stessascanline.Una verifica preliminare della bontà della <strong>calibrazione</strong> può essereeffettuata notando che i p<strong>un</strong>ti corrispondenti giacciono sulla stessa rigaorizzontale <strong>di</strong> pixel contrassegnata in verde. Una seconda verifica puòessere applicata alla <strong>di</strong>storsione delle immagini; <strong>un</strong>a leggera se purevidente compensazione solitamente è in<strong>di</strong>ce <strong>di</strong> <strong>un</strong>a buona <strong>calibrazione</strong>,mentre immagini eccessivamente <strong>di</strong>storte dovrebbero suggerire <strong>di</strong> catturare11 Si tratta in particolare <strong>di</strong> stereo_calib.cpp151


nuove immagini e effettuare nuovamente la <strong>calibrazione</strong>.7.6.2 Conferma dei RisultatiPer visualizzare i risultati numerici della <strong>calibrazione</strong> si devono chiudere lefinestre <strong>di</strong> <strong>di</strong>alogo sino a tornare alla finestra con i ra<strong>di</strong>o button“Calibrazione”.Selezionando “Ottieni i parametri da precedenti calibrazioni” è possibileaprire il <strong>di</strong>alogo “Recupero dei parametri <strong>di</strong> precedenti calibrazioni” conidentificativo IDD_SELEZIONE_CALIBRAZIONE che si riferisce allaclasse SelezioneCalibrazione implementata e definita negli omonimifile .cpp e .h.Illustrazione 42: Dialogo per la scelta dei risultati da visualizzareQuesto <strong>di</strong>alogo accede alla cartella in cui è stato effettuato l'ultimosalvataggio del file myc in cui sono riportati i risultati numerici evisualizza la lista <strong>di</strong> tutti i file <strong>di</strong> questo tipo presenti al suo interno152


corredata dalle relative informazioni poste <strong>di</strong> seguito:• Data e ora del salvataggio• Ra<strong>di</strong>ce dell'errore quadratico me<strong>di</strong>o• Path del file yml dei parametri intrinseci• Path del file yml dei parametri estrinseciI file <strong>di</strong> testo con estensione yml sono utilizzati per la raccolta dei risultatinegli esempi campione OpenCV; tra questi quelli che verranno selezionatisaranno poi rielaborati per essere visualizzati nella finestra <strong>di</strong> <strong>di</strong>alogoIDD_CONFERMA_CALIBRAZIONE, mostrata nell'illustrazione 43, daltitolo “Richiesta conferma scelta parametri <strong>di</strong> <strong>calibrazione</strong>” la qualefornisce <strong>un</strong>a <strong>di</strong>stinzione tra i vari elementi delle matrici.Illustrazione 43: Finestra <strong>di</strong> <strong>di</strong>alogo per la visualizzazione e l'approvazione dei parametriLa classe ConfermaCalibrazione gestisce questa finestra <strong>di</strong> <strong>di</strong>alogo einoltre memorizza i dati selezionati prima <strong>di</strong> mostrarli.Alla pressione del tasto “annulla” si torna al <strong>di</strong>alogo precedente, mentrealla conferma si aprirà il documento dell'illustrazione 44 caratterizzato da153


<strong>un</strong>a formattazione <strong>di</strong> più facile lettura, grazie al quale l'utente puòvisualizzare i dati.Illustrazione 44: Risultati numerici relativi alla <strong>calibrazione</strong> selezionataLe matrici M1 e M2 sono le matrici dei parametri intrinseci delle duetelecamere nelle quali l<strong>un</strong>go la <strong>di</strong>agonale principale appare il valore dellal<strong>un</strong>ghezza focale, mentre nell'ultima colonna sono riportate le coor<strong>di</strong>natedel p<strong>un</strong>to principale rispetto all'origine dei pixel. Il primo elemento <strong>di</strong>questo vettore colonna è la coor<strong>di</strong>nata orizzontale del p<strong>un</strong>to principale,invece il secondo in<strong>di</strong>ca la coor<strong>di</strong>nata verticale; questi due valoridovrebbero risultare prossimi alla metà dell'ampiezza e altezza <strong>di</strong> <strong>un</strong>aimmagine.154


I vettori dei coefficienti <strong>di</strong> <strong>di</strong>storsione chiudono la parte proposta relativaai parametri intrinseci al <strong>di</strong> sotto dei quali con la matrice <strong>di</strong> rotazione R trale due telecamere iniziano quelli estrinseci. Questa matrice, come qualsiasimatrice <strong>di</strong> rotazione, fornisce <strong>un</strong>'informazione ridondante circal'orientamento delle due terne in quanto i nove elementi sono legati tra lorodai sei vincoli <strong>di</strong> ortogonalità. Una rappresentazione minima per ladescrizione <strong>di</strong> <strong>un</strong> orientamento è costituita da tre parametri che possonoessere, come imposto nel software, i tre angoli <strong>di</strong> Eulero rollio, beccheggioe imbardata. L'utente può verificare la corrispondenza tra i tre angoli e larotazione reale tra le due telecamere nonché l'equivalenza tra la <strong>di</strong>stanzatra le stesse e il vettore <strong>di</strong> traslazione T. Subito sotto vengono mostrate lematrici <strong>di</strong> rettificazione R1 e R2, le matrici <strong>di</strong> proiezione P1 e P2 risultantida tale trasformazione e la matrice <strong>di</strong> riproiezione Q che, permette <strong>di</strong>ottenere i p<strong>un</strong>ti 3D se si conoscono le coor<strong>di</strong>nate sullo schermo deicorrispondenti p<strong>un</strong>ti bi<strong>di</strong>mensionali.155


Capitolo 8Sviluppo <strong>di</strong> <strong>un</strong>'applicazione per il tracciamento<strong>di</strong> <strong>un</strong> oggetto sferico nello spazioUna volta ultimata l'implementazione del software per la <strong>calibrazione</strong> si èdeciso <strong>di</strong> testare i parametri ottenuti me<strong>di</strong>ante la rilevazione <strong>di</strong> <strong>un</strong> oggettosferico nello spazio.8.1 Parametri della Circle Hough TransformLa tecnica utilizzata per l'estrazione delle feature è stata la trasformata <strong>di</strong>Hough con il metodo del gra<strong>di</strong>ente, che è stata descritta nel capitolo 2.Questo metodo è molto utilizzato per la sua efficacia e per la complessitàcomputazionale relativamente bassa. I parametri da scegliere con la CHTsono:• Risoluzione dell'accumulatore• Distanza minima tra i cerchi per essere considerati <strong>di</strong>fferenti• Parametri dell'operatore <strong>di</strong> Canny• Numero minimo <strong>di</strong> voti per <strong>un</strong> cerchio can<strong>di</strong>dato• Raggio massimo e minimoLa risoluzione dell'accumulatore è <strong>un</strong>a sorta <strong>di</strong> fattore <strong>di</strong> scala rispetto allarisoluzione dell'immagine. Impostata a 1 si ha la stessa risoluzione156


dell'immagine in ingresso, per valori maggiori si hanno risoluzioni perl'accumulatore inversamente proporzionali a quella dell'immagine. Unascelta <strong>di</strong> tale parametro pari a due si è <strong>di</strong>mostrata efficace, anche se nonl'<strong>un</strong>ica possibile per avere buoni risultati. In definitiva è stata impostaaltezza e larghezza dell'accumulatore due volte più piccola rispettoall'immagine acquisita dalle telecamere.La <strong>di</strong>stanza minima tra i cerchi consente <strong>di</strong> decidere con quale “densità”vogliamo che siano scelti. In altre parole <strong>un</strong> valore troppo basso provoca ilriconoscimento <strong>di</strong> cerchi multipli in <strong>un</strong> piccolo intorno <strong>di</strong> pixel, mentre <strong>un</strong>valore elevato può far perdere la rilevazione <strong>di</strong> due cerchi <strong>di</strong>stinti se questisi trovano ad <strong>un</strong>a <strong>di</strong>stanza inferiore, come mostrato nell'illustrazione 45.Illustrazione 45: Scelta della <strong>di</strong>stanza minima tra cerchi <strong>di</strong>stinti: 1) Un parametro basso porta acerchi multipli indesiderati 2) Un parametro elevato provoca la per<strong>di</strong>ta <strong>di</strong> possibili rilevazioniNel caso in esame si vuole rilevare <strong>un</strong>a singola sfera per cui valori che inmolte circostanze potrebbero risultare troppo elevati, risultano idonei inquesto contesto, mentre è necessario evitare valori bassi che possonoportare risultati insod<strong>di</strong>sfacenti. Si è riscontrato che valori superiori ad <strong>un</strong>157


quinto dell'altezza in pixel dell'immagine danno risultati accettabili.Un altro parametro rilevante è quello relativo alla soglia dell'accumulatoreche elimina i centri can<strong>di</strong>dati i cui voti non la superano. Anche in questocaso <strong>un</strong> valore troppo basso potrebbe dar luogo a false rilevazioni, maqueste possono considerarsi considerevolmente ridotte dalle restrizioni sulprecedente parametro. Una soglia troppo alta può invece eliminare tutti ican<strong>di</strong>dati non rilevando alc<strong>un</strong> cerchio, infatti sperimentalmente è risultatoche, posti i precedenti parametri, per valori superiori a 100 si riduconoconsiderevolmente il numero delle rilevazioni fino ad annullarsi quasicompletamente oltre i 200.Gli ultimi due parametri riguardano l'intervallo in cui facciamo cadere lepossibili <strong>di</strong>mensioni del raggio. Se si considerano immagini conrisoluzione 640×480 la proiezione <strong>di</strong> <strong>un</strong>a sfera completamente all'internodel piano immagine non può avere <strong>un</strong> raggio superiore a 240. Valoriprossimi a metà della risoluzione in altezza si verificano soltanto sel'oggetto è estremamente vicino alla telecamera, perciò si è scelto <strong>di</strong>escludere circonferenze con raggio superiore a 160. Il limite inferiore èstato posto a 20 perché valori inferiori danno luogo a false rilevazioni.8.2 Oggetto in movimento in <strong>un</strong>a scena realeÈ piuttosto semplice effettuare la rilevazione in <strong>un</strong>a scena a sfondo<strong>un</strong>iforme in cui sia presente <strong>un</strong> singolo oggetto statico circolare, se si ha a<strong>di</strong>sposizione <strong>un</strong>a f<strong>un</strong>zione che utilizzi la CHT. In genere in <strong>un</strong> ambientecom<strong>un</strong>e sono però presenti oggetti e forme <strong>di</strong> vario tipo, pertanto in <strong>un</strong>a158


scena reale raramente l'<strong>un</strong>ico oggetto tondeggiante sarà il nostro target. Sela sfera è statica certamente il suo contorno costituirà <strong>un</strong> cerchio can<strong>di</strong>datocon <strong>un</strong> numero <strong>di</strong> voti tra i più alti, ma non possiamo avere la stessacertezza che sia quello selezionato. La probabilità <strong>di</strong> essere scelto, sel'oggetto è in movimento, <strong>di</strong>minuisce all'aumentare della velocità. Inf<strong>un</strong>zione della sua <strong>di</strong>namicità l'oggetto si presenta esteso e sfocato l<strong>un</strong>go la<strong>di</strong>rezione del movimento, con <strong>un</strong>a evidente <strong>di</strong>minuzione della nitidezza. Lascelta del range del raggio tra 20 e 160 comporta <strong>un</strong>a <strong>di</strong>stanza del soggettoinferiore ai due metri; la vicinanza al centro ottico comporta maggiorivelocità angolari e quin<strong>di</strong> <strong>un</strong> maggiore effetto <strong>di</strong> mosso. Nell'illustrazione46 è evidente la per<strong>di</strong>ta <strong>di</strong> nitidezza della sfera in movimento; come si puònotare, la rilevazione è avvenuta com<strong>un</strong>que con successo grazieall'impiego <strong>di</strong> filtri che saranno descritti in seguito.8.3 Utilizzo <strong>di</strong> filtri <strong>di</strong> tonalitàGarantire la rilevazione dello stesso oggetto per entrambe le immagini in<strong>un</strong> <strong>sistema</strong> stereoscopico non è <strong>un</strong> problema banale. Per tale motivo si èdeciso <strong>di</strong> utilizzare oggetti (sfere) facilmente rilevabili con semplici featuredetector (CHT). Per agevolare l'object detection anche nel caso <strong>di</strong> soggettoin movimento sono state utilizzare delle sfere <strong>di</strong> colore <strong>un</strong>iforme chepermettono l'utilizzo <strong>di</strong> appositi filtri [Chen-2010].Nelle immagini in scala <strong>di</strong> grigi l’<strong>un</strong>ico attributo necessario a caratterizzarein ogni p<strong>un</strong>to l’immagine è l’intensità, che si traduce nel valore <strong>di</strong> grigiodel corrispondente pixel, mentre la rappresentazione delle immagini a159


colori prevede l’impiego <strong>di</strong> tre matrici <strong>di</strong> intensità, <strong>un</strong>a <strong>di</strong> rosso, <strong>un</strong>a <strong>di</strong>verde, <strong>un</strong>a <strong>di</strong> blu. In altre parole l’intensità da sola non è sufficiente acaratterizzare l’immagine, in quanto occorre anche esprimere lacrominanza costituita dalla tonalità (o tinta, hue in inglese) e dallasaturazione. Per poter <strong>di</strong>scriminare oggetti <strong>di</strong> <strong>di</strong>fferente colore, bisognaagire su questi due attributi dei quali il primo fornisce <strong>un</strong> in<strong>di</strong>ce dellapurezza del colore mentre il secondo può essere associato alla l<strong>un</strong>ghezzad'onda.In questa applicazione sono state utilizzate sfere <strong>di</strong> colore rosso, verde , blue giallo cercando <strong>di</strong> sviluppare dei filtri che consentissero <strong>di</strong> rilevaresoltanto la palla del colore scelto. Poiché i quattro colori sono caratterizzatida saturazioni abbastanza elevate, si è scelto <strong>di</strong> applicare delle soglie<strong>un</strong>icamente sulla tonalità.Nel modello RGB ogni colore è definito me<strong>di</strong>ante le intensità dei treprimari che lo compongono, ma la mo<strong>di</strong>fica in<strong>di</strong>pendente delle trecomponenti RGB cambia la crominanza <strong>di</strong> ogni pixel, introducendo <strong>un</strong>a<strong>di</strong>storsione cromatica. Nella classificazione basata sul colore risulta quin<strong>di</strong>più efficace utilizzare <strong>un</strong> modello del colore in cui la luminanza è separatadalla crominanza.Il modello utilizzato è quello HSV (tonalità-saturazione-valore), mostratonell'illustrazione 46 me<strong>di</strong>ante la sua rappresentazione cilindrica. Talemodello in OpenCV è caratterizzato da <strong>un</strong>a componente <strong>di</strong> tonalitàmemorizzata come <strong>un</strong> valore intero a 8 bit tra 0 e 179, con <strong>un</strong>a certaper<strong>di</strong>ta <strong>di</strong> risoluzione sul colore. La saturazione e il valore dell'intensità160


sono invece compresi tra 0 e 255. In particolare mentre in altri software<strong>un</strong>a saturazione massima equivale a puro bianco, in OpenCV corrispondesempre a colori brillanti [Emami-2010].Illustrazione 46: Rappresentazione cilindrica del modello HSV ( a sinistra );Rilevazione del target a <strong>di</strong>spetto dell'evidente effetto <strong>di</strong> mosso ( a destra ).Illustrazione 47: La finestra centrale è quella originale. A destra la conversione nel modello HSV.A sinistra il risultato dopo le operazioni <strong>di</strong> sogliatura, erosione, <strong>di</strong>lazione e smoothing Gaussiano.Nell'immagine <strong>di</strong> destra dell'illustrazione 47 si può vedere come appare<strong>un</strong>a immagine convertita in HSV a partire dal modello RGB.161


Per selezionare la singola tonalità è stata apportata <strong>un</strong>a scissione nelle trecomponenti e successivamente sono state applicate <strong>un</strong>a soglia minima e<strong>un</strong>a soglia massima sulla singola componente H; ad esempio per isolare ilcolore blu la soglia minima è stata scelta pari a 150 e la massima pari a 200in modo che 150H200 .Se il valore della componente Hue per lo sfondo originale non si trova nelrange selezionato, si avrà <strong>un</strong>o sfondo nero nell'immagine in output, mentrei pixel aventi tinta in quell'intervallo rimarranno in scala <strong>di</strong> grigi, perciòsolitamente il filtro sulla tonalità non isola completamente l'oggettodesiderato, ma tutti i pixel della medesima tinta.A questo p<strong>un</strong>to la singola componente viene convertita in scala <strong>di</strong> grigi epoi passata alla trasformata <strong>di</strong> Hough per i cerchi, la quale, se non ci sonomacchie <strong>di</strong> quel colore o altri oggetti sferici della tonalità desiderata,dovrebbe catturare il target, tuttavia non è infrequente riscontrarerilevazioni <strong>di</strong> pixel nell'intervallo isolato anche nella posizione <strong>di</strong> oggetti<strong>di</strong> altra tonalità. In altre parole in corrispondenza <strong>di</strong> <strong>un</strong> oggetto a tinta<strong>un</strong>iforme <strong>di</strong>fferente dal colore scelto possono comparire pixel <strong>di</strong> quellatonalità a causa del rumore e delle con<strong>di</strong>zioni <strong>di</strong> luminosità.La sogliatura produce quin<strong>di</strong> delle zone simili a macchie che possonofacilmente essere identificate come cerchi <strong>di</strong> piccolo raggio.Per eliminare questi gruppi <strong>di</strong> pixel è stato applicato all'immagine <strong>un</strong>osmoothing Gaussiano e <strong>un</strong>a operazione <strong>di</strong> apertura, vale a <strong>di</strong>re <strong>un</strong>aerosione seguita da <strong>un</strong>a <strong>di</strong>lazione [Gonzalez-2002].Queste operazioni oltre a <strong>di</strong>minuire i pixel indesiderati rendono anche <strong>di</strong>162


forma più tondeggiante l'immagine mossa, quando l'oggetto sferico è inmovimento. L'immagine <strong>di</strong> sinistra nell'illustrazione 47 mostra l'effetto <strong>di</strong>questa procedura effettuata sulla tonalità del rosso, mentre al centro èpresentata l'immagine originale su cui è stato applicato il cerchio rossorisultante dalla CHT.8.4 Estrazione delle coor<strong>di</strong>nate 3DIl centro del cerchio rilevato con la CHT ci fornisce le coor<strong>di</strong>nate dellaproiezione dell'oggetto sferico sui due piani immagine. La conoscenza <strong>di</strong>questi due valori <strong>un</strong>ita a quella dei parametri ricavati dalla <strong>calibrazione</strong> cipermette <strong>di</strong> estrarre le coor<strong>di</strong>nate del target nello spazio.Siano ad esempio x 1,y 1 e x 2,y 2 le due coor<strong>di</strong>nate estratte dalla CHT,il primo passo da effettuare è quello <strong>di</strong> portarle in coor<strong>di</strong>nate omogenee:1p 1=x =xy e 21p 2 y 21 1È possibile normalizzare questi vettori rispetto alle matrici dei parametriintrinseci calcolate con la <strong>calibrazione</strong>:p 1norm =M−1x 1x1 y e 21p 2norm =M 2 y1−1 21Per le coor<strong>di</strong>nate ottenute vanno compensati gli effetti della <strong>di</strong>storsione(2.13) ottenendo i vettori p 1<strong>un</strong><strong>di</strong>st e p 2<strong>un</strong><strong>di</strong>st . Applicando le rotazioniinverse rispetto ad R 1 ed R 2 si rendono complanari i due piani immagineed infine si moltiplicano le nuove matrici dei parametri intrinseci che si163


possono recuperare dalle prime tre colonne delle matrici P 1 e P 2 per ivettori appena ricavati. Dopo tali operazioni abbiamo ottenuto lecoor<strong>di</strong>nate 2D dei centri nelle immagini rettificate che quin<strong>di</strong> avrannostessa or<strong>di</strong>nata h:p 1rect=x' 1hSfruttando ora la matrice <strong>di</strong> riproiezione x' e p = 22rect h10 0 −X Q=[1 010 1 0 − Y 0]0 0 0 f new0 0 −1/ T X 01−X 02Tnella quale sono presenti i parametri proposti nella (3.47) e nella (3.48), èpossibile ricavare le coor<strong>di</strong>nate 3D X , Y , Z dell'oggetto dal risultatodella seguente espressione[ XY Z]=Q[x ' 1]hx' 1−x' 21normalizzando per il fattore <strong>di</strong> scala .18.5 Verifica dell'accuratezza dei risultatiLe otto matrici e i quattro vettori ottenuti con la <strong>calibrazione</strong> hanno loscopo <strong>di</strong> mettere in relazione l'ambiente tri<strong>di</strong>mensionale con quellobi<strong>di</strong>mensionale delle immagini. Verificare empiricamente la veri<strong>di</strong>cità164


delle stime dello spazio 3D, effettuate nell'applicazione, assicurain<strong>di</strong>rettamente l'atten<strong>di</strong>bilità dei valori forniti dalla <strong>calibrazione</strong>.Se si conosce la grandezza del raggio della circonferenza la stima dellaprofon<strong>di</strong>tà risulta calcolabile anche con <strong>un</strong>a singola telecamera applicandodelle proporzioni tra le <strong>di</strong>mensioni del raggio in due e in tre <strong>di</strong>mensioni. Senon si conosce la misura del raggio il <strong>di</strong>scorso cambia completamente,infatti soltanto nel caso <strong>di</strong> <strong>visione</strong> stereoscopica non c'è bisogno <strong>di</strong> questainformazione preventiva per stimare la profon<strong>di</strong>tà; inoltre si può ad<strong>di</strong>ritturacalcolare la misura del raggio nello spazio a meno <strong>di</strong> <strong>un</strong> piccolo margine <strong>di</strong>errore.Una volta appreso l'algoritmo per la triangolazione il metodo per estrarre la<strong>di</strong>mensione reale del raggio è piuttosto banale. La conoscenza sulle dueimmagini delle <strong>di</strong>mensioni del cerchio e del suo centro permette il calcolo<strong>di</strong> <strong>un</strong> secondo p<strong>un</strong>to che arbitrariamente poniamo a destra l<strong>un</strong>go lascanline a <strong>un</strong>a <strong>di</strong>stanza pari al raggio. Con <strong>un</strong> proce<strong>di</strong>mento analogo aquello dei centri calcoliamo la posizione nello spazio <strong>di</strong> questi due nuovip<strong>un</strong>ti e calcoliamo la <strong>di</strong>stanza euclidea con le coor<strong>di</strong>nate 3D dei centri. Laverifica manuale, con <strong>un</strong>o strumento <strong>di</strong> misura per l<strong>un</strong>ghezze delle<strong>di</strong>mensioni reali della sfera, consente <strong>di</strong> quantificare l'errore.Sebbene il <strong>sistema</strong> permetta la rilevazione della sfera anche a velocitàelevate, <strong>un</strong>a posizione statica facilita l'accertamento della fedeltà dellecoor<strong>di</strong>nate spaziali non essendo necessario conoscere l'istante in cui <strong>un</strong>aspecifica posizione è stata occupata. Ponendo l'oggetto in <strong>un</strong>a posizioneconosciuta si effettuano tutti i passi descritti fino alla triangolazione e poi165


si constata se le coor<strong>di</strong>nate estratte sono prossime a quelle attese. In realtàè da far presente che seppure l'oggetto è fermo ogni fotogramma non saràesattamente identico al precedente, soprattutto a causa del rumore e dellecon<strong>di</strong>zioni <strong>di</strong> illuminazione che non sono costanti. Questo aspettodetermina <strong>un</strong> cambiamento della sua posizione ad ogni istante, seppure <strong>di</strong>pochi pixel, come si può vedere dall'illustrazione 48.Illustrazione 48: Confronto tra posizione misurata (in rosso) e posizioni stimate (in blu)Questo movimento apparente genera <strong>un</strong> errore anche qualora la<strong>calibrazione</strong> fosse estremamente accurata. Se l'oggetto è fermo laposizione stimata permane com<strong>un</strong>que entro <strong>un</strong> certo intervallo, perciò sipuò aggirare il problema facendo la me<strong>di</strong>a delle posizioni occupate.166


Nell'esempio in figura la posizione conosciuta in cm è X=-5, Y=-2 e Z=30in modo che la sfera si trovi rispetto all'asse X al centro tra le duetelecamere <strong>di</strong>stanti tra loro circa 10 cm. Il raggio calcolato vale 3.52cmapprossimativamente pari al valore reale, mentre la ra<strong>di</strong>ce dell'errorequadratico me<strong>di</strong>o calcolata sui tre assi è (0.23, 0.18, 1.11) cm.I vari test hanno mostrato <strong>un</strong>a proporzionalità tra la profon<strong>di</strong>tà e il RMSEcalcolato su <strong>di</strong> essa, ad esempio ad <strong>un</strong>a profon<strong>di</strong>tà <strong>di</strong> 44cm l'RMSE èrisultato pari a 2.477, mentre è arrivato a 5.91 ad <strong>un</strong>a profon<strong>di</strong>tà <strong>di</strong> 85 cm.L'algoritmo riesce a rilevare la sfera con successo fino a <strong>di</strong>stanze <strong>di</strong> circa<strong>un</strong> metro, al <strong>di</strong> là del quale il raggio della sfera arriva al <strong>di</strong> sotto dellasoglia fissata con la trasformata Hough. Una soglia più bassaaumenterebbe in maniera non trascurabile la probabilità <strong>di</strong> falserilevazioni.167


Capitolo 9Conclusioni e sviluppi futuri9.1 ConclusioniIn questa tesi è stato descritto il progetto e la <strong>realizzazione</strong> <strong>di</strong> <strong>un</strong> <strong>sistema</strong> <strong>di</strong><strong>visione</strong> stereoscopica. In particolare è stato sviluppato <strong>un</strong> software <strong>di</strong><strong>calibrazione</strong> che prevede <strong>un</strong>'interfaccia grafica orientata all'utente conl'esecuzione automatica della maggioranza dei passi da effettuare.È stata inoltre implementata <strong>un</strong>a applicazione per il riconoscimentoautomatico <strong>di</strong> oggetti sferici in movimento. L'object detection permette <strong>di</strong>estrarre le coor<strong>di</strong>nate bi<strong>di</strong>mensionali dell'oggetto e in seguito calcolarne laposizione nello spazio me<strong>di</strong>ante rettificazione e triangolazione.La tesi fornisce inoltre <strong>un</strong>'accurata descrizione degli algoritmi <strong>di</strong> imageprocessing, <strong>di</strong> <strong>calibrazione</strong> e <strong>di</strong> ricostruzione della geometria epipolare perla rettificazione.Il primo obiettivo raggi<strong>un</strong>to in questo progetto è stato l'ideazione el'implementazione <strong>di</strong> <strong>un</strong> algoritmo che permettesse la memorizzazioneautomatica <strong>di</strong> fotogrammi acquisiti simultaneamente me<strong>di</strong>ante l'utilizzodella programmazione parallela.Inoltre questo algoritmo è stato completato con <strong>un</strong> <strong>sistema</strong> che consente lamemorizzazione automatica <strong>di</strong> coppie <strong>di</strong> immagini che rispettano ilrequisito <strong>di</strong> permettere l'estrazione, anch'essa automatica, degli angoli nelpattern <strong>di</strong> <strong>calibrazione</strong>.168


Il software <strong>di</strong> <strong>calibrazione</strong> sviluppato facilita l'utente non solo nella misuradei parametri intrinseci ed estrinseci, ma anche nella <strong>sistema</strong>zione del<strong>sistema</strong> stereoscopico, sottolineando quali parametri non sono adatti ad <strong>un</strong>impianto f<strong>un</strong>zionale.Una volta conclusa la parte relativa alla <strong>calibrazione</strong> si è rivolto l'interesseal riconoscimento <strong>di</strong> <strong>un</strong> oggetto sferico nello spazio <strong>di</strong> <strong>di</strong>mensioni ignote enell'estrazione delle sue coor<strong>di</strong>nate spaziali, nonché del suo raggio.9.2 Sviluppi futuriIl software <strong>di</strong> <strong>calibrazione</strong> potrebbe essere utilizzato in tutte quelleapplicazioni che ne utilizzano i parametri per la ricostruzionedell'ambiente, soprattutto in quelle applicazioni in cui è desiderabilemo<strong>di</strong>ficare la posizione relativa tra le telecamere.L'intero apparato potrebbe essere montato su <strong>un</strong> robot mobile perl'inseguimento <strong>di</strong> oggetti oppure potrebbe essere ulteriormente sviluppatoper portare <strong>un</strong> manipolatore in <strong>un</strong>a opport<strong>un</strong>a configurazione <strong>di</strong> presa. Latraiettoria pianificata potrebbe essere eseguita utilizzando le misure visualia ciclo aperto utilizzando <strong>un</strong> approccio look-and-move oppure inretroazione me<strong>di</strong>ante <strong>un</strong> controllo visuale, calcolando il vettore <strong>di</strong> erroretra le pose dell'organo terminale e quello dell'oggetto. Per come è statoprogettato il <strong>sistema</strong>, quest'ultimo approccio potrebbe essere più facilmenteeseguito nella modalità eye-in-hand in modo che non sia necessarioidentificare anche l'organo terminale del manipolatore. Inoltre, facendomuovere il <strong>sistema</strong> stereoscopico in maniera solidale all'organo terminale,169


si avrebbe <strong>un</strong> notevole incremento nell'accuratezza della misura inprossimità del target.Le lac<strong>un</strong>e del <strong>sistema</strong> si possono trovare soprattutto nel <strong>sistema</strong> <strong>di</strong>riconoscimento degli oggetti che permette <strong>di</strong> rilevare soltanto oggettisferici e che è molto influenzato dal rumore e dai cambiamenti <strong>di</strong>luminosità e per questo presenta problemi <strong>di</strong> falsi accoppiamenti.170


Bibliografia[Ballard-79] D. H. Ballard, Generalizing the Houghtransform to detect arbitrary shapes. Computer Sciencedepartment, University of Rochester, Ottobre 1979[Bouguet] J. Y. Bouguet, Camera Calibration Toolbox forMatlab,http://www.vision.caltech.edu/bouguetj/calib_doc/index.html.[Bradski-2008] G. Bradski, A. Kaehler. Learning OpenCV:Computer Vision with the OpenCV Library, O'Reilly Me<strong>di</strong>a,2008.[Brown-66] D. C. Brown. Decentering Distortion of Lenses.Photometric Engineering 32(3) : 444–462, 1966.[Brown-71] D. C. Brown. Close-range camera calibration.Photogrammetric Engineering, 37(8):855–866, 1971.[Canny-83] J. F. Canny. Fin<strong>di</strong>ng edges and lines in images.Master's thesis, MIT. AI Lab. TR-720, 1983.[Caprile-90] B. Caprile and V. Torre. Using vanishing pointsfor camera calibration. International Journal of ComputerVision, 4:127--140, 1990.[Chen-2010] Lior Chen. Fast object tracking using theOpenCV library. http://www.lirtex.com/robotics/fast-objecttracking-robot-computer-vision[Cyganek-09] B. Cyganek, P. Siebert. An Introduction to 3DComputer Vision Techniques and Algorithms. Wiley 2009171


[Davies-2005] Davies, E. Roy (2005). Machine Vision: Theory,Algorithms, Practicalities (3rd ed.)[Di Stefano] L. Di Stefano,http://<strong>di</strong>dattica.arces.<strong>un</strong>ibo.it/file.php/59/Elaborazione_dellImmagine_L-S/Manuali/tecnologie_3.pdf, Università <strong>di</strong> Bologna,Didattica Arces, Corso <strong>di</strong> Elaborazione dell'Immagine L-S,materiale <strong>di</strong>dattico[Duda-72] R. O. Duda and P. E. Hart. Use of the Houghtransformation to detect lines and curves in pictures.Comm<strong>un</strong>ications of the Association for Computing Machinery15 (1972): 11–15.[Emami-2010] Shervin Emami.http://www.shervinemami.co.cc/colorConversion.html[Euclide] Euclide, Elementi, IV - III secolo a.C.[Faugeras-01] O. Faugeras, Q. Luong. The Geometry ofMultiple Images. MIT Press (Marzo 2001).[Faugeras-93] Olivier Faugeras. Three-<strong>di</strong>mensional computervision: a geometric viewpoint. MIT Press, Cambridge, 1993.[Fusiello-2010] A. Fusiello, Visione Computazionale. App<strong>un</strong>tidelle lezioni, 2010.[Gonzalez-2002] R. C. Gonzalez, R. E. Woods, Digital ImageProcessing, Prentice Hall, 2002.[Hartley-97] R. I. Hartley. In defense of the eight-pointalgorithm. IEEE Transactions on Pattern Analysis andMachine Intelligence, 19(6): 580-593, Ottobre 1997.172


[Hartley-98] R. I. Hartley. Theory and practice of projectiverectification. International Journal of Computer Vision, toappear, 1998.[Hartley-2003] R. Hartley and A. Zisserman. Multiple ViewGeomerty in Computer Vision. Cambridge University Press,second e<strong>di</strong>tion, 2003.[Hough-59] P. V. C. Hough. Machine analysis of bubblechamber pictures. Procee<strong>di</strong>ngs of the International Conferenceon High Energy Accelerators and Instrumentation. (pp. 554–556), 1959.[Isgrò-99] F. Isgro, E. Trucco. Projective rectificationwithout epipolar geometry. In Procee<strong>di</strong>ngs of IEEEComputer Society Conference on Computer Vision and PatternRecognition, pp.94-99, 1999.[Koch-Tononi-2008] C. Koch, G. Tononi, Can Machines BeConscious? Yes - and a new Turing test might prove it.IEEE Spectrum, Vol., n. 6, pp. 54-59, giugno 2008.[Lei-99 ] B. J. Lei, E. A. Hendriks, M. J. T. Reinders. OnFeature Extraction from images. Technical report on“inventory properties” for MCCWS, 1999.[LonguetHiggins-81] H. C. Longuet-Higgins. A computeralgorithm for reconstructing a scene from twoprojections. Nature 293: 133-135 (10 Settembre 1981)[Lowe-2004] David G. Lowe. Distinctive Image Features173


from Scale-Invariant Keypoints. International Journal ofComputer Vision, Gennaio 2004.[Moravec-79] Moravec, H. (1979). Visual mapping by a robotrover. In Procee<strong>di</strong>ngs of the 6th International Joint Conferenceon Articial Intelligence, pp. 599-601, Agosto 1979.[Otha-2007] Smart CMOS image sensors and applications,CRC Press, Taylor & Francis Group, New York 2007[Rousseeuw-87] P. J. Rousseeuw. Robust Regression andOutlier Detection. Wiley, New York, 1987.[Scaramuzza-2003] D. Scaramuzza. <strong>Progetto</strong> e <strong>realizzazione</strong><strong>di</strong> <strong>un</strong> <strong>sistema</strong> <strong>di</strong> <strong>visione</strong> stereoscopica per la robotica, conapplicazione all’inseguimento <strong>di</strong> corpi in moto eall’autolocalizzazione. Tesi <strong>di</strong> laurea in ingegneria elettronicapresso l'<strong>un</strong>iversità degli stu<strong>di</strong> <strong>di</strong> Perugia. A.A. 2003 2004[Siciliano-2008] B. Siciliano, L. Sciavicco, L. Villani, G. Oriolo.Robotica, Modellistica, pianificazione e controllo.McGraw-Hill Companies. 2008[K. R. Spring] K. R. Spring, T. J. Fellers, M. W. Davidson.Introduction to Charge-Coupled Devices (CCDs).http://www.microscopyu.com/articles/<strong>di</strong>gitalimaging/cc<strong>di</strong>ntro.html[Trucco-98] E. Trucco, A. Verri, Introductory Techniques To3d Computer Vision, Prentice Hall, 1998[Tsai-87] Roger Y. Tsai. A Versatile Camera CalibrationTechnique for High-Accuracy 3D Machine Vision174


Metrology Using Off-the-shelf TV Cameras and Lenses.IEEE journal of robotics and automation, vol. ra-3, no. 4, Agosto1987[UTET-91] Grande Dizionario Enciclope<strong>di</strong>co, UnioneTipografico E<strong>di</strong>trice Torinese, 1991[Xie-2003] Ming Xie. F<strong>un</strong>damentals of Robotics, LinkingPerception to Action. Series in Machine Perception andArtificial Intelligence - Vol. 54. Singapore-MIT Alliance &Nanyang Technological University, Singapore 2003[Zhang-96] Z. Zhang. Determining the Epipolar Geometryand its Uncertainty: A Review. Institut national de rechercheen informatique et en automatique. N° 2927. Luglio 1996[Zhang-98] Z. Zhang. A Flexible New Technique for CameraCalibration. Technical Report, MSR-TR-98-71, MicrosoftResearch, December 2, 1998.ALTRI SITI WEB:• http://opencv.willowgarage.com• http://sourceforge.net/projects/opencvlibrary/• http://en.wikipe<strong>di</strong>a.org• http://opencvlibrary.sourceforge.net/• http://tech.groups.yahoo.com/group/OpenCV/• http://pr.willowgarage.com/wiki/OpenCV175

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!