Esplora i fondamenti del flusso ottico nella visione artificiale. Scopri come i vettori di movimento guidano la comprensione dei video e migliorano il tracciamento in Ultralytics .
Il flusso ottico è il modello di movimento apparente di oggetti, superfici e bordi in una scena visiva causato dal movimento relativo tra un osservatore e una scena. Nel campo della visione artificiale, questo concetto è fondamentale per comprendere le dinamiche temporali all'interno delle sequenze video. Analizzando lo spostamento dei pixel tra due fotogrammi consecutivi, gli algoritmi di flusso ottico generano un campo vettoriale in cui ogni vettore rappresenta la direzione e l' ampiezza del movimento di un punto specifico. Questo indizio visivo di basso livello consente ai sistemi di intelligenza artificiale di percepire non solo ciò che è presente in un'immagine, ma anche come si muove, colmando il divario tra l'analisi delle immagini statiche e la comprensione dei video dinamici.
Il calcolo del flusso ottico si basa generalmente sul presupposto della costanza della luminosità, secondo cui l' intensità di un pixel su un oggetto rimane costante da un fotogramma all'altro, anche se si muove. Gli algoritmi utilizzano questo principio per risolvere i vettori di movimento utilizzando due approcci principali:
Sebbene siano spesso utilizzati in tandem, è fondamentale distinguere il flusso ottico dal tracciamento degli oggetti. Il flusso ottico è un'operazione di basso livello che descrive il movimento istantaneo dei pixel; non comprende intrinsecamente l'identità o la persistenza degli oggetti.
Al contrario, il tracciamento degli oggetti è un'attività di alto livello che individua entità specifiche e assegna loro un ID coerente nel tempo. I tracker avanzati, come quelli integrati in Ultralytics , in genere eseguono il rilevamento degli oggetti per individuarli e poi utilizzano segnali di movimento, talvolta derivati dal flusso ottico, per associare i rilevamenti tra i fotogrammi. Il flusso ottico risponde alla domanda "a che velocità si stanno muovendo questi pixel in questo momento", mentre il tracciamento risponde alla domanda "dove è andata l'auto n. 5?"
La capacità di stimare il movimento a livello di pixel alimenta un'ampia gamma di tecnologie sofisticate:
L'esempio seguente mostra come calcolare il flusso ottico denso utilizzando OpenCV , uno strumento standard nell'ecosistema della visione artificiale . Questo frammento di codice utilizza l'algoritmo di Farneback per generare una mappa di flusso tra due fotogrammi consecutivi.
import cv2
import numpy as np
# Simulate two consecutive frames (replace with actual image paths)
frame1 = np.zeros((100, 100, 3), dtype=np.uint8)
frame2 = np.zeros((100, 100, 3), dtype=np.uint8)
cv2.rectangle(frame1, (20, 20), (40, 40), (255, 255, 255), -1) # Object at pos 1
cv2.rectangle(frame2, (25, 25), (45, 45), (255, 255, 255), -1) # Object moved
# Convert to grayscale for flow calculation
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
# Calculate dense optical flow
flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)
# Compute magnitude and angle of 2D vectors
mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
print(f"Max motion detected: {np.max(mag):.2f} pixels")
Per applicazioni di alto livello che richiedono la persistenza degli oggetti piuttosto che il movimento dei pixel grezzi, gli utenti dovrebbero prendere in considerazione le modalità di tracciamento disponibili in Ultralytics YOLO11 e YOLO26. Questi modelli astraggono la complessità dell'analisi del movimento , fornendo ID oggetto e traiettorie robusti e pronti all'uso per attività che vanno dal monitoraggio del traffico all' analisi della vendita al dettaglio.