Il flusso ottico (in inglese optical flow o optic flow) è il movimento apparente degli oggetti, o, più in generale, delle caratteristiche visive, causato dal movimento relativo fra un osservatore e l'ambiente circostante; descrive come l'immagine si sposta sulla retina (o sul piano immagine) quando l'osservatore si muove nello spazio o quando si muovono gli oggetti intorno a lui.

Il flusso ottico è un concetto fondamentale sia nella visione biologica, dove il termine è stato originariamente introdotto, sia nella visione artificiale, dove viene formalizzato come un campo bidimensionale che associa ad ogni punto dell'immagine una velocità apparente. Nella pratica, il flusso ottico trova numerose applicazioni in ambiti che vanno dalla navigazione e la stabilizzazione nei sistemi animali ai sistemi di guida autonoma, al tracciamento di oggetti e alla ricostruzione del movimento in sequenze video.

Storia Il concetto di flusso ottico nasce nell'ambito della psicologia della percezione, prima ancora di essere formalizzato matematicamente nella visione artificiale. Le sue origini sono legate allo studio del volo degli aerei durante la seconda guerra mondiale: diversi ricercatori, lavorando in modo pressoché indipendente per le forze armate britanniche e statunitensi, osservarono che il pattern di movimento apparente del terreno visto dal pilota durante l'atterraggio fornisce informazioni affidabili sulla quota, sulla velocità e sulla direzione di volo dell'aereo.

Il nome più comunemente associato a questa scoperta è quello dello psicologo statunitense James J. Gibson, che nel 1947, lavorando per l'Aviazione dell'esercito statunitense alla selezione e all'addestramento dei piloti, descrisse per la prima volta in un rapporto interno il pattern di espansione radiale percepito da un pilota durante l'avvicinamento alla pista. Gibson introdusse poi il termine flow ("flusso") nel suo libro del 1950 The Perception of the Visual World, e il termine più specifico optical flow in un lavoro successivo del 1955, in cui il fenomeno viene per la prima volta analizzato anche dal punto di vista geometrico e matematico. Ricerche più recenti hanno tuttavia mostrato che, prima e indipendentemente da Gibson, anche lo psicologo britannico Gwilym C. Grindley e l'ingegnere Edward S. Calvert avevano condotto studi simili.

La formalizzazione computazionale del flusso ottico, cioè la sua trattazione come problema da risolvere algoritmicamente a partire da sequenze di immagini digitali, arriva solo a partire dalla fine degli anni '70, nell'ambito della nascente disciplina della visione artificiale. Uno dei primi lavori a occuparsi esplicitamente del problema è quello di Fennema e Thompson del 1979. La sua formulazione più influente risale però al 1981, quando, indipendentemente l'uno dall'altro, vengono pubblicati sia il metodo di Horn e Schunck sia quello di Lucas e Kanade, tuttora alla base, rispettivamente, dei metodi globali e dei metodi locali di stima del flusso ottico descritti più avanti in questa voce.

Metodi di stima del flusso ottico Dati due fotogrammi consecutivi, esistono numerosi metodi per stimare il flusso ottico fra i due. Essi possono essere divisi in metodi tradizionali, chiamati anche knowledge-driven methotds ("metodi guidati dalla conoscenza"), metodi basati sull'apprendimento automatico, chiamati anche data-driven methods ("metodi guidati dai dati"), e metodi ibridi, che usano cioè elementi di entrambi gli altri due tipi.

Metodi tradizionali La maggior parte dei metodi tradizionali di stima del flusso ottico si basa sull'ipotesi di luminosità costante (constant brightness assumption), secondo cui l’intensità luminosa di un punto della scena rimane circa costante tra due fotogrammi, anche se la sua posizione cambia. Se indichiamo con la luminosità del punto al tempo , e con lo spostamento fra un punto in un fotogramma e il punto corrispondente nel fotogramma successivo, abbiamo quindi che , dove e sono rispettivamente la componente orizzontale e verticale del flusso ottico nel punto . Assumendo che lo spostamento sia sufficientemente piccolo, questa relazione può essere linearizzata tramite uno sviluppo in serie di Taylor al primo ordine, ottenendo .

Questa relazione da sola non è tuttavia sufficiente a calcolare il flusso, in quanto per ogni punto abbiamo due incognite e una sola equazione, generando quindi un sistema sottodeterminato. Per questo motivo è necessario introdurre un vincolo aggiuntivo che renda il problema determinato. A seconda del tipo di vincolo utilizzato, i metodi tradizionali si dividono principalmente in metodi globali e metodi locali.

Metodo di Horn e Schunck Uno dei primi e più influenti metodi globali è quello proposto da Horn e Schunck nel 1981. Oltre all'ipotesi di luminosità costante, esso introduce un vincolo di regolarità (o smoothness constraint), secondo cui il campo di flusso ottico varia in modo graduale nello spazio, evitando quindi variazioni brusche fra pixel vicini. Il flusso ottico viene calcolato minimizzando un funzionale dell'energia globale composto da un termine di errore, legato alla violazione dell'ipotesi di luminosità costante, e da un termine di regolarizzazione, legato alla variazione spaziale di e :

dove , e sono le derivate parziali della luminosità rispetto a , e , e è un parametro che pesa il contributo del termine di regolarizzazione. Il metodo produce un campo di flusso denso, cioè definito su ogni pixel dell'immagine, ma tende ad essere sensibile al rumore e poco accurato in corrispondenza dei bordi degli oggetti, dove il vincolo di regolarità viene violato.

Metodo di Lucas e Kanade Un approccio alternativo, di tipo locale, è quello proposto da Lucas e Kanade nel 1981. Invece di imporre un vincolo di regolarità globale, questo metodo assume che il flusso ottico sia approssimativamente costante all'interno di una piccola finestra (o patch) attorno a ciascun pixel. Sotto questa ipotesi, l'equazione di luminosità costante viene applicata a tutti i pixel della finestra, ottenendo un sistema di equazioni lineari :

dove sono i pixel all'interno della patch. Essendo questo sistema generalmente sovradeterminato, può essere risolto con il metodo dei minimi quadrati:

Il metodo di Lucas-Kanade è computazionalmente efficiente e robusto al rumore, ma in genere fornisce un campo di flusso sparso, affidabile principalmente nelle zone dell'immagine con sufficiente texture o gradiente di intensità (come angoli e bordi), risultando invece indeterminato nelle zone uniformi.

Il tracker KLT Nella pratica, il metodo di Lucas e Kanade viene raramente applicato a ogni pixel dell'immagine, poiché fornisce stime affidabili solo nelle zone con sufficiente gradiente di intensità in più direzioni. È quindi comune applicarlo solo su un insieme sparso di punti selezionati tramite un apposito algoritmo di individuazione delle caratteristiche visuali (feature detection). Questa combinazione, nota come tracker KLT (Kanade-Lucas-Tomasi), nasce da un filone di lavori successivi a quello originale del 1981: Tomasi e Kanade, nel 1991, propongono un criterio per selezionare i punti "buoni" da tracciare basandosi sugli autovalori della stessa matrice utilizzata nella soluzione ai minimi quadrati di Lucas-Kanade; Shi e Tomasi, nel 1994, perfezionano questo criterio nell'articolo Good Features to Track, oggi alla base della funzione goodFeaturesToTrack della libreria OpenCV. Infine, Bouguet propone un'implementazione piramidale (multi-risoluzione) del tracciamento, che estende l'applicabilità del metodo anche a spostamenti di grande entità tra un fotogramma e l'altro, altrimenti incompatibili con l'ipotesi di piccolo spostamento alla base della formulazione originale.

Metodi basati sull'apprendimento automatico A partire dalla metà degli anni 2010, con la diffusione delle reti neurali convoluzionali (CNN), sono stati proposti metodi che imparano a stimare il flusso ottico direttamente da grandi quantità di dati, senza fare affidamento esplicito sull'ipotesi di luminosità costante o su altri vincoli. Il primo esempio significativo è FlowNet, che formula la stima del flusso come un problema di apprendimento supervisionato risolto tramite una rete convoluzionale end-to-end, addestrata su un ampio dataset sintetico generato appositamente. A questo approccio sono seguiti numerosi perfezionamenti, come FlowNet 2.0, PWC-Net e, più recentemente, RAFT (Recurrent All-Pairs Field Transforms), che ha introdotto l'uso di un volume di correlazione multi-scala aggiornato iterativamente tramite una rete ricorrente, raggiungendo risultati allo stato dell'arte su diversi benchmark di riferimento come Sintel e KITTI.

I metodi basati sull'apprendimento automatico ottengono generalmente prestazioni superiori ai metodi tradizionali in presenza di grandi spostamenti, occlusioni e variazioni di illuminazione, ma richiedono grandi quantità di dati durante la fase di addestramento e possono generalizzare male in scenari molto diversi da quelli osservati in fase di addestramento. Inoltre hanno un costo computazionale più elevato e richiedono schede video o altro hardware dedicato per poter essere eseguiti in tempo reale. Dataset di riferimento e metriche di valutazione Per confrontare in modo oggettivo le prestazioni dei diversi metodi di stima del flusso ottico, la comunità scientifica fa affidamento su alcuni dataset di riferimento (benchmark), che forniscono coppie di fotogrammi accompagnate da un flusso ottico di ground truth (letteralmente "verità di base"), ovvero un flusso ottico noto con precisione, insieme a metriche standardizzate per misurare l'accuratezza delle stime prodotte da un dato metodo.

I dataset per il flusso ottico possono essere sintetici o reali, a seconda che le immagini presenti siano state rispettivamente generate con un programma di rendering o acquisite con una camera. A causa delle difficoltà legate ad ottenere un ground truth preciso per sequenze reali, i dataset reali sono meno comuni. Uno dei più usati è il KITTI Vision Benchmark Suite, che raccoglie scene reali riprese da una telecamera montata su un veicolo in movimento nel traffico urbano, includendo condizioni di illuminazione, meteo e superfici particolarmente difficili da gestire per i metodi di stima del flusso.

Fra i dataset sintetici si annoverano invece MPI-Sintel, ricavato dal cortometraggio d'animazione open source Sintel, e FlyingChairs e FlyingThings3D, generati sovrapponendo oggetti 3D renderizzati a sfondi casuali per produrre automaticamente un numero elevato di coppie di immagini con ground truth noto.

Le metrica più comunemente utilizzata per valutare l'accuratezza di una stima di flusso ottico sono l'errore di punto finale (end-point error, EPE) e l'errore angolare (angular error, AE). Il primo è definito come la distanza euclidea media, calcolata su tutti i pixel dell'immagine, fra il vettore di flusso stimato e quello di verità, mentre il secondo misura la differenza fra l'orientamento dei vettori di flusso stimati e quelli di verità. Esistono poi altre metriche per valutare il comportamento dei metodi di stima in scenari particolarmente complessi, come ad esempio "l'errore di punto finale senza corrispondenza" (end-point error unmatched) che viene utilizzato nel dataset MPI-Sintel per misurare l'errore in regioni visibili in uno solo dei due fotogrammi consecutivi.

Applicazioni