Scopri la potenza dell'Optical Flow nella computer vision. Scopri come stima il movimento, migliora l'analisi video e guida le innovazioni nell'AI.
Il flusso ottico è un concetto fondamentale in visione artificiale che implica stima del movimento apparente di oggetti, superfici e bordi in una scena visiva. Questo movimento viene calcolato in base movimento relativo tra un osservatore (come una telecamera) e la scena stessa. Il risultato di questo processo è un campo vettoriale in cui ogni vettore rappresenta lo spostamento di un pixel o di un elemento tra due fotogrammi video consecutivi. Analizzando questi vettori di movimento, i sistemi possono ottenere una comprensione granulare e di basso livello della dinamica della scena, rispondendo alla domanda cruciale di "come" i pixel siano stati spostati. alla domanda cruciale su "come" si muovono i pixel nel tempo.
Il calcolo del flusso ottico si basa tipicamente sull'ipotesi di "costanza della luminosità". Questo principio che l'intensità dei pixel di un punto specifico di un oggetto rimanga costante tra i fotogrammi consecutivi, anche quando si muove. si muove. Gli algoritmi utilizzano questa ipotesi per track spostamento. Esistono due approcci principali per determinare questi campi di movimento:
È importante distinguere il flusso ottico dal tracciamento degli oggettipoiché hanno scopi diversi all'interno di una pipeline di visione. Il flusso ottico è un'operazione di basso livello che descrive il movimento movimento istantaneo dei pixel senza capire cosa rappresentino. Non mantiene intrinsecamente l'identità di un l'identità di un oggetto nel tempo.
Al contrario, il tracciamento degli oggetti è un'attività di alto livello che localizza entità specifiche e assegna loro un ID coerente tra i vari fotogrammi. Le modalità di tracciamento avanzate, come quelle disponibili in Ultralytics YOLO11in genere eseguono rilevamento degli oggetti prima e poi utilizzare spunti di movimento per associare i rilevamenti. Mentre un tracker potrebbe utilizzare il flusso ottico internamente per prevedere la posizione, l'obiettivo del tracker è la persistenza dell'identità ("Dov'è andata l'auto n. 4?"), mentre l'obiettivo del flusso ottico è la mappatura del movimento ("A che velocità si muovono questi pixel? mappatura del movimento ("A che velocità si muovono questi pixel verso destra?").
Il flusso ottico è uno strumento versatile utilizzato in diversi settori per risolvere problemi complessi legati al movimento.
Il seguente esempio Python mostra come calcolare il flusso ottico denso utilizzando il metodo OpenCV OpenCV. Si utilizza l'algoritmo di Gunnar Farneback, un metodo popolare per la stima del flusso denso.
import cv2
import numpy as np
# Load two consecutive frames (ensure these files exist)
frame1 = cv2.imread("frame1.jpg")
frame2 = cv2.imread("frame2.jpg")
# Convert frames to grayscale
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
# Calculate dense optical flow using Farneback's algorithm
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"Flow shape: {flow.shape}") # Output: (Height, Width, 2)
print(f"Max motion magnitude: {np.max(mag):.2f} pixels")
Per gli utenti che desiderano integrare l'analisi del movimento con il rilevamento degli oggetti, i modelli di rilevamentoUltralytics possono essere combinati con gli algoritmi di flusso per creare robuste pipeline di analisi. Mentre il flusso ottico fornisce i dati grezzi sul movimento, modelli di livello superiore come YOLO11 forniscono la comprensione semantica necessaria per interpretare efficacemente il movimento. La ricerca e sviluppo in corso su modelli come YOLO26 mira a unificare ulteriormente la comprensione spaziale e temporale per un'analisi video end-to-end ancora più rapida.