Optical Flow - il Flusso Ottico

Optical Flow

Per riuscire a spiegare cos'è il flusso ottico e quali sono le sue applicazioni, 30 righe su un sito per smanettoni non sono sicuramente sufficienti. Il mio obiettivo diventa perciò quello di darvi un'idea generale, integrata con alcune slides di studenti di Ingegneria Informatica (tra i quali il sottoscritto e Marco Paciscopi) che si sono cimentati sull'argomento per il corso di Analisi di Immagini e Video.

Una possibile definizione di flusso ottico lo vede come un'approssimazione del cosiddetto campo di moto. Per campo di moto si intende la proiezione del vettore velocità di un punto nello spazio tridimensionale sul piano immagine (bidimensionale). Se vi interessano le equazioni di geometria proiettiva avrete tutto il tempo di leggervele aprendo i file pdf nei link sottostanti.

Il task diventa quindi riuscire a stimare il flusso ottico per poterlo utilizzare in applicazioni come il tracking di oggetti in un video o la loro segmentazione a seconda dei movimenti. La difficoltà del lavoro si evince dalla definizione di flusso ottico data dallo psicologo americano James J. Gibson, il quale lo definì negli anni '50 come la distribuzione delle velocità apparenti dei pattern di luminosità nell'immagine. Sono le parole “apparente” e “luminosità” che ci fanno a capire come non sempre flusso ottico e campo di moto coincidono perfettamente: la variazione di luminosità su un oggetto potrebbe essere percepita dai nostri occhi o dalla telecamera come un movimento dell'oggetto quando in realtà esso è fermo o non si muove nella direzione percepita (si veda l'esempio della sfera ed il problema dell'apertura nelle slides).

Campo di Moto

Il primo algoritmo per la stima del flusso ottico, che è stato poi la base per le attuali procedure in Computer Vision e Video Analysis, fu presentato nel 1981 da B. K. P. Horn e B. G. Schunck nel loro articolo “Determining Optical Flow”. Il metodo si basa sul rispetto di due vincoli, il primo derivato dalle prime definizioni di flusso ottico, il secondo imposto dai due ricercatori.

Il primo vincolo (detto più generalmente “Vincolo del flusso ottico”) parte dall'assunto che i livelli di grigio di un oggetto in movimento non varieranno in modo repentino dall'istante t all'istante t+dt.

Il secondo vincolo (il “Vincolo di smoothness") impone invece l'uniformità del moto dei punti vicini.

Dopo Horn-Schunck furono teorizzati altri metodi, molti dei quali hanno una loro versione nella libreria OpenCV. All'interno del pdf teorico sono presentati i metodi di Lukas-Kanade, Block Matching e Farneback, mentre nel secondo pdf è spiegato come utilizzare le relative funzioni implementate in OpenCV. A questi è aggiunto un file cpp che contiene alcune funzione per facilitarvi l'utilizzo dei metodi per il flusso ottico.

Dopo questo articolo e quello sul toolkit QT presentato nei mesi scorsi, vi sarà presentato un semplice programma per “giocare” con il flusso ottico.

Flusso Ottico - Teoria
Flusso Ottico - OpenCV
Fie di template in .cpp

Si ringrazia Giannantonio D'Avico per il contributo nella stesura delle slides e del codice allegato.

Nota 27/05/2013
Siccome il codice è stato scritto più di un anno fa, è possibile che alcune funzioni per il calcolo del flusso ottico siano state deprecate. Vi consiglio quindi di includere la libreria legacy nel caso doveste avere problemi.

Alessio Antonielli

Ingegnere informatico, appassionato di cinema, musica, videogiochi e serie tv. Insomma, le solite cose che vi aspettereste da un ex studente di Ingegneria Informatica, giusto per rafforzare lo stereotipo…

Optical Flow - il Flusso Ottico ultima modifica: 2013-03-27T18:50:18+01:00 da Alessio Antonielli


Advertisment ad adsense adlogger