Saturday, July 12, 2008

Stereo Vision

Essendomi dedicato a questo argomento recentemente, pubblico qui un paio di consigli per creare un sistema di stereo visione utilizzando due webcam (nel mio caso Logitech QuickCam).
Questo sistema affiancato ad un algoritmo di tracking (come il CAMShift) permette di individuare e trovare distanza e dimensioni dell'oggetto cercato.
I punti chiave sono:
- calibrazione delle webcam
- rettificazione delle immagini stereo
- triangolazione dei punti corrispondenti

La calibrazione serve per ottenere le matrici delle camere, con parametri intrinseci ed estrinseci.
I primi sono:
- focal length
- principal point
- parametri di distorsione delle lenti
I secondi invece sono le matrici di rotazione e vettori di traslazione.
Per questo passaggio si può utilizzare la libreria matlab della calctech ed usando come calibration rig una scacchiera regolare bianca e nera.
Seguite i passaggi che trovate nelle guide sul sito e otterrete così le due matrix camera. Ci sono anche alcune funzioni stereo nella libreria richiamabili con il comando calib_gui che si basano sui parametri trovati prima.

Una volta ottenuti i parametri si devono rettificare le immagini stereo, eliminando così la rotazione tra le due webcam. Tra le immagini vi sarà solo una traslazione pari alla baseline.
Per fare ciò si possono utilizzare le librerie OpenCV e in particolare la classe calib_filter che fornisce tutto il necessario. Si posso anche calibrare le webcam con questa classe ma i risultati sono peggiori. Vi consiglio di utilizzare la libreria matlab come detto sopra.
La rettificazione permette di parallelizzare gli assi focali e rette epipolari, centrare le immagini nel principal point e rimuovere la distorsione delle lenti.
Questo passaggio è indispensabile per semplificare il processo di triangolazione.

La triangolazione permette di trovare le coordinate nello spazio di un punto prese le sue proiezioni sulle due immagini stereo.
Se sono stati fatti tutti i precedenti passaggi questo processo si riduce semplicemente all' uso di questa formula:
Distanza = (baseline x DistanzaFocale) / delta
dove la baseline è la distanza delle due webcam in mm e delta è la differenza delle distanze dei due punti corrispondenti nelle immagini stereo dai due centri delle stesse immagini.

La risoluzione di distanza è non-lineare con l'aumentare della distanza. Per migliorarla si può aumentare la baseline.

Ottenuta la distanza cioè la coordinata Z si possono calcolare anche le coordinate X e Y così:
X = Z xl / distFocale
Y = X yl / distFocale

Con tali coordinate si possono calcolare le dimensioni reali dell'oggeto visto dalle due webcam.

No comments: