Con il termine Video Content Analysis (VCA) si intende «la capacità di analizzare automaticamente un flusso video per rilevare e determinare eventi temporali e spaziali». In questo contesto si parla spesso di semantic video understanding: il processo di analisi di una sequenza video per individuare — localizzare e riconoscere — le «entità» presenti e gli eventi che si verificano, attribuendo un significato alla scena (es. «la persona 1 prende in giro la persona 2 e scappa», «la persona 3 calcia la persona 1», «la persona 4 interrompe il combattimento»).
I principali task che la VCA affronta sono:
La VCA trova applicazione in ambiti molto diversi: informazioni sul traffico, sport (analisi di partite e movimenti), auto a guida autonoma, produzione di film, sorveglianza (surveillance) e interazione uomo-macchina (human computer interaction).
I problemi che rendono difficile l'analisi video sono numerosi:
Un video è una sequenza di frame catturati nel corso del tempo: i valori dell'immagine sono funzione dello spazio (x, y) e del tempo (t), cioè I(x, y, t). La variabilità osservabile nelle tre dimensioni non è omogenea. La percezione umana del movimento sfrutta le differenze tra frame consecutivi: un oggetto si dice in movimento se cambia la sua posizione rispetto al background.
La motion estimation può essere affrontata in due famiglie di metodi:
La background subtraction è molto usata per rilevare oggetti in movimento da telecamere statiche: l'idea è individuare gli oggetti in movimento osservando la differenza tra il frame corrente e un frame di riferimento che rappresenti il background (frame differencing). Siano I(x, y, t) il frame e B(x, y, t) il background al tempo t: la maschera di foreground è costituita da tutti i pixel per i quali:
|I(x, y, t) − B(x, y, t)| > th
La sfida: il background non è statico — cambia la luminosità (gradualmente o all'improvviso), la telecamera oscilla, gli oggetti del background si muovono (es. rami), la scena cambia (es. auto parcheggiate). La domanda chiave è: come stimare B(x, y, t)?
Vantaggi delle stime semplici: estremamente semplici da implementare, sufficientemente veloci, modello di background adattivo. Svantaggi: le prestazioni dipendono dalla velocità di oggetti e frame rate, sono computazionalmente costosi e la soglia è fissa (non funzione di t), quindi molto sensibile al suo valore.
Scena sintetica 36×20: sfondo con edifici e rumore di sensore; l'«auto» (rettangolo chiaro) si sposta di 2 celle a ogni frame. Il background è il frame precedente: le celle dell'auto che si spostano e il rumore del sensore producono differenze. Trova una soglia che separi il movimento vero dal rumore.
Stauffer e Grimson (CVPR 1999) propongono di associare a ciascun pixel una mixture di distribuzioni Gaussiane (media e varianza) che ne modellano l'intensità: una rappresentazione in grado di modellare background multimodali (es. un pixel che alterna foglie, acqua, tende). La memorizzazione dei parametri richiede meno spazio rispetto alla mediana; l'inizializzazione può avvenire osservando un piccolo intorno di ciascun pixel; il background è variabile, quindi a ogni frame i parametri vanno aggiornati (modello adattivo).
Aggiornamento (per la distribuzione a cui il pixel appartiene; le altre non vengono aggiornate, ma i loro pesi decadono):
w_i,t = (1 − α)·w_i,t−1 + α
μ_i,t = (1 − ρ)·μ_i,t−1 + ρ·x_t
σ²_i,t = (1 − ρ)·σ²_i,t−1 + ρ·(x_t − μ_i,t)(x_t − μ_i,t)ᵀ
ρ = α · η(x_t | μ_i,t−1, σ²_i,t−1) (α = learning rate)
Se il pixel non appartiene ad alcuna distribuzione, la distribuzione meno probabile viene sostituita con una nuova distribuzione con media xt, alta varianza e peso iniziale basso.
Selezione del background: il background è rappresentato dalle distribuzioni con bassa varianza e supporto elevato. Le Gaussiane vengono ordinate per rapporto wi/σi decrescente (valore elevato = alto supporto e bassa varianza) e le prime B distribuzioni sono scelte come background con B = argminb Σi=1..b wi > TB. A ogni iterazione i pixel che non appartengono a nessuna delle distribuzioni di background sono etichettati come foreground.
Vantaggi: la «soglia» è locale per ogni pixel, il modello è adattivo, gli oggetti possono entrare a far parte del background senza «distruggere» il modello esistente. Svantaggi: non gestisce i cambiamenti improvvisi, è sensibile all'inizializzazione (es. median filtering) e ha parametri da valutare con attenzione.
Queste semplici tecniche evidenziano i pixel in movimento ma non ne descrivono il movimento: per analisi video approfondite servono motion detection and tracking più avanzati.
Intensità di un pixel su 200 frame: sfondo ~N(120, 8) con due «passaggi» di foreground (N(60,10) e N(200,12)). Tre Gaussiane (K=3) vengono aggiornate con le regole di Stauffer-Grimson: verifica come learning rate α e soglia di background TB influenzano la classificazione.
L'obiettivo dell'object tracking è tracciare lo spostamento di uno o più oggetti in un flusso video. Gli algoritmi proposti in letteratura si differenziano per come rispondono a tre domande: qual è la rappresentazione più opportuna dell'oggetto? Quali sono le feature più adatte? Come modellare movimento, aspetto e forma?
Tutti i metodi di tracking usano meccanismi di object detection (a ogni frame, o quando un oggetto appare la prima volta): template matching, keypoint detector, deep learning (capitoli 9, 7 e 12) o background subtraction + etichettatura delle componenti connesse. Gli algoritmi di tracking si dividono in tre macro-categorie: point tracking (l'oggetto è un punto, es. il baricentro; l'associazione tra punti su frame consecutivi avviene sullo stato dell'oggetto), kernel tracking (il kernel è forma+feature, es. rettangolo con istogramma colore; il movimento è stimato come trasformazione parametrica) e silhouette tracking (si stima a ogni frame la regione occupata, confrontando forme o evoluzione del contorno).
Il filtro di Kalman è un filtro ricorsivo che valuta lo stato di un sistema dinamico a partire da misure soggette a rumore. Si usa in qualsiasi applicazione in cui si disponga di informazioni incerte sullo stato di un sistema dinamico e si possa fare un'ipotesi plausibile sullo stato futuro. Per l'object tracking ha tre proprietà preziose: predice la posizione futura dell'oggetto, riduce il rumore introdotto da rilevamenti inaccurati (object detection) e facilita l'associazione di un oggetto alla corrispondente traccia.
Esempio (robot in uno spazio 2D) — stato x̂ = (x̂, ŷ). Per stimare lo stato al tempo t conoscendo lo stato al tempo t−1:
Il robot percorre una traiettoria circolare (verde, «vero» stato). Il sensore restituisce misure rumorose (vermiglio). Il filtro di Kalman fonde modello e misure producendo la stima (cobalto). Regola il rumore di misura e di processo, poi avanza passo per passo.
Mean-shift è un metodo non parametrico per la ricerca delle mode di una funzione di densità di probabilità. Nel tracking viene usato per oggetti il cui aspetto è modellabile con la distribuzione del colore (es. istogramma colore): è utile per oggetti articolati (es. una persona che cammina) per cui è difficile specificare un modello matematico del movimento.
L'oggetto da tracciare viene scelto nel primo frame (manualmente o con object detection) e le feature colore vengono estratte da una regione rettangolare o ellissoidale. Date le feature q e la posizione (x, y) dell'oggetto nel frame t−1: si imposta la regione di interesse (RoI) nel frame t centrata in (x, y), poi si individua il candidato più simile all'interno della RoI usando una funzione di similarità tra distribuzioni del colore; la nuova posizione è la media pesata dei punti nella finestra, spostata verso la densità più alta, iterando fino alla convergenza.
Sessanta campioni (istogramma grigio) da due distribuzioni con mode a ~150 e ~450. La finestra (banda cobalto) viene spostata verso il baricentro pesato dei campioni che contiene, iterando fino alla convergenza. Scegli la posizione iniziale e premi «itera».
Nel 2016 viene proposto GOTURN (Generic Object Tracking Using Regression Networks), uno dei primi metodi di object tracking (di un singolo oggetto) basato su deep learning:
È il processo che associa a un flusso video un'etichetta o una descrizione che esprime l'azione/attività compiuta dai soggetti presenti nella scena. Termini chiave:
L'osservazione chiave dei temporal templates è che un umano riconosce un'azione anche senza informazioni dettagliate: dai soli punti in movimento si intuisce che qualcuno cammina o si siede — l'azione si può rilevare dal movimento stesso.
La Motion Energy Image (MEI) è una rappresentazione binaria che mette in risalto le regioni in cui è presente movimento:
Eτ(x, y, t) = ∪_{i=0..τ−1} D(x, y, t−i)
dove D(x, y, t) è una sequenza di immagini binarie che mostrano le regioni in cui vi è stato movimento tra due frame contigui (es. differenza binarizzata con una soglia).
La Motion History Image (MHI) è un'immagine in cui l'intensità di ogni pixel è funzione di quanto recentemente vi è stato movimento in quella posizione: più recente è il movimento, più alto è il valore. MEI e MHI insieme formano il temporal template della sequenza.
I momenti invarianti sono una particolare media pesata dell'intensità dei pixel. Dato un'immagine I(x, y), il momento semplice Mij = ΣxΣy xiyjI(x, y); i momenti centrali (invarianti per traslazione) μpq = ΣxΣy (x−x̄)p(y−ȳ)q I(x, y), con x̄ = M10/M00 e ȳ = M01/M00 componenti del centroide. I 7 momenti di Hu (h1…h7) sono combinazioni dei momenti centrali invarianti per traslazione, rotazione e scala e producono un descrittore di forma spazio-temporale globale:
h1 = μ20 + μ02
h2 = (μ20 − μ02)² + 4·μ11²
h3 = (μ30 − 3μ12)² + (3μ21 − μ03)²
h4 = (μ30 + μ12)² + (μ21 + μ03)²
h5 = (μ30 − 3μ12)(μ30 + μ12)[(μ30 + μ12)² − 3(μ21 + μ03)²] + (3μ21 − μ03)(μ21 + μ03)[3(μ30 + μ12)² − (μ21 + μ03)²]
h6 = (μ20 − μ02)[(μ30 + μ12)² − (μ21 + μ03)²] + 4μ11(μ30 + μ12)(μ21 + μ03)
h7 = (3μ21 − μ03)(μ30 + μ12)[(μ30 + μ12)² − 3(μ21 + μ03)²] − (μ30 − 3μ12)(μ21 + μ03)[3(μ30 + μ12)² − (μ21 + μ03)²]
Addestramento: 1) si generano i temporal template (MEI+MHI) delle sequenze di training; 2) si calcolano i momenti di Hu di ogni template; 3) per ogni tipo di azione si genera un modello statistico (media μ e matrice di covarianza S) dei momenti di Hu. Riconoscimento: 1) temporal template della sequenza di input; 2) momenti di Hu x; 3) distanza di Mahalanobis DM(x) = (x−μ)ᵀS⁻¹(x−μ) da tutti i modelli; 4) l'etichetta restituita è quella del modello con distanza minore.
Un punto percorre una traiettoria ondulata in 24 frame (griglia 36×24). La MEI (a sinistra) è l'unione binaria delle differenze negli ultimi τ frame; la MHI (a destra) codifica la recency: più chiaro = movimento più recente. Dai valori della MHI si calcolano i momenti di Hu.
Molti approcci recenti usano sensori RGB-D (es. Kinect) che acquisiscono, oltre ai canali RGB, la profondità dei punti della scena. Sfruttando la profondità operano in modo ottimale in ambienti indoor (il sensore IR arriva, nei casi migliori, a 6–7 metri); Kinect permette il tracking di individui e l'estrazione di informazioni scheletrali, fondamentali in questo dominio. Le sfide dei video RGB-D: cambi di illuminazione (RGB), color camouflage (foreground simile al background nel colore), depth camouflage (profondità simile) e out of sensor range (oggetti troppo vicini o lontani).
Franco, Magnani e Maio (Pattern Recognition Letters, 2020) propongono un approccio multimodale che combina le informazioni sullo scheletro (estratte dalle mappe di profondità, per catturare le pose assunte durante le attività) con le immagini RGB (per modellare l'evoluzione temporale e l'interazione con gli oggetti):
Il filtro di Kalman (predire, ridurre il rumore, associare), le tre categorie di tracking (point, kernel, silhouette), la differenza tra MEI e MHI e la pipeline dei momenti di Hu con distanza di Mahalanobis sono domande classiche. La sezione RGB-D multimodale è spesso chiesta come «approccio recente»: ricordate i due rami e la fusione per somma.
È «la capacità di analizzare automaticamente un flusso video per rilevare e determinare eventi temporali e spaziali»; nel contesto del semantic video understanding, localizza e riconosce le «entità» presenti e gli eventi che si verificano, attribuendo un significato alla scena.
Video segmentation (separare background statico e foreground in movimento, camera statica), shot boundary detection (rilevare i cambi di scena, camera anche in movimento), motion segmentation (isolare i singoli oggetti in movimento), object tracking (tracciare lo spostamento degli oggetti), più mosaicing, segmentazione di oggetti, modelli dinamici, stima 3D, riconoscimento di eventi/attività e miglioramento della qualità video.
Cambiamenti nell'ambiente (es. illuminazione), movimento della camera, camere multiple, oggetti multipli, occlusioni parziali o totali, movimenti rapidi (maggiori del frame rate), oggetti di forma complessa non rigida o articolata e scarsa disponibilità di dataset etichettati.
Feature-based: estrazione di feature (corner, keypoints) e tracking nei frame consecutivi → sparse motion field, robusto per il tracking, adatto a movimenti ampi tra frame consecutivi. Diretti (densi): calcolo del movimento di ciascun pixel dalla variazione di luminosità spazio-temporale → dense motion field, sensibile alle variazioni, adatto a cambiamenti limitati tra frame consecutivi.
Maschera di foreground: |I(x,y,t) − B(x,y,t)| > th. Stime di B: frame precedente B=I(x,y,t−1); media B=(1/n)Σi=0..n−1I(x,y,t−i); mediana B=mediana{I(x,y,t−i), i=1..n} (più costosa: richiede di ordinare tutti gli n valori).
Vantaggi: semplici da implementare, veloci, modello adattivo. Svantaggi: prestazioni dipendenti da velocità degli oggetti e frame rate, computazionalmente costosi, soglia fissa (non in funzione di t) → sensibilità al valore di soglia.
Ogni pixel è modellato da K Gaussiane (K≈3–5) con peso wi,t, media μi,t, covarianza σ²i,t; P(xt)=Σ wi,t·η(xt, μi,t, σ²i,t). Le Gaussiane sono ordinate per wi/σi decrescente; le prime B (con Σwi>TB) rappresentano il background; i pixel che non appartengono a nessuna di esse sono foreground. Aggiornamento adattivo con learning rate α e ρ=α·η(xt|μ,σ).
Punto (baricentro, oggetti piccoli), forme geometriche (rettangolo/ellisse, trasformazioni affini o omografiche), contorni e silhouette (forme articolate), modelli articolati (parti connesse da articolazioni, modelli cinematici) e modelli scheletrici (medial axis transform della silhouette).
Colore (istogrammi colore, color moments; spazi HSL, Luv, Lab), edge (meno sensibili ai cambi di illuminazione), optical flow (vettore per ogni pixel verso la posizione nel frame successivo) e texture (variazione di intensità sulle superfici, es. matrici di co-occorrenza).
Point tracking (l'oggetto è un punto, es. baricentro; associazione sullo stato), kernel tracking (forma+feature, es. rettangolo con istogramma colore; movimento come trasformazione parametrica) e silhouette tracking (si stima a ogni frame la regione occupata confrontando forme o evoluzione del contorno).
Per tre proprietà: predice la posizione futura, riduce il rumore dei rilevamenti e facilita l'associazione oggetto-traccia. Passi: 1) predizione col modello matematico; 2) densità di probabilità (media+covarianza); 3) misura dal sensore (object detection); 4) Kalman gain; 5) stima x̂t; 6) aggiornamento covarianza; 7) si ripete.
Metodo non parametrico per la ricerca delle mode di una densità: l'oggetto è modellato dalla distribuzione del colore; nel frame t si imposta la RoI centrata nella posizione del frame t−1 e si cerca il candidato più simile con una funzione di similarità tra distribuzioni; la finestra si sposta verso la media pesata dei punti, iterando fino alla convergenza. Adatto a oggetti articolati.
Due CNN (5 convolutional layer ciascuna) sui crop del frame corrente e del precedente (centrati sulla detection del frame precedente); output concatenato in ingresso a tre fully-connected layer; livello di output con quattro neuroni che rappresentano la bounding box. È uno dei primi tracker deep learning (2016).
Evento: un singolo momento nel tempo (una porta che si chiude). Azione: un movimento «atomico», un singolo gesto (mettersi a sedere). Attività: una serie di azioni che avvengono simultaneamente (interazione tra persone).
La MEI (Motion Energy Image) è un'immagine binaria che evidenzia le regioni in cui c'è stato movimento (unione delle differenze binarie su τ frame). La MHI (Motion History Image) codifica la recency: l'intensità di ogni pixel è funzione di quanto recentemente vi è stato movimento. Insieme formano il temporal template.
Addestramento: temporal template (MEI+MHI) delle sequenze di training → momenti di Hu → modello statistico (μ, S) per ogni azione. Riconoscimento: temporal template dell'input → momenti di Hu x → distanza di Mahalanobis DM(x)=(x−μ)ᵀS⁻¹(x−μ) da tutti i modelli → etichetta del modello con distanza minore.
Combinazione di scheletro (dalle mappe di profondità: 28 angoli da 15 joints, bag-of-words di pose chiave via K-Means, classificazione con Random Forest) e RGB (Temporal Image Gradient centrate sulla vita, descrittori HOG, M SVM lineari fusi per somma). Gli output dei due classificatori sono combinati per il riconoscimento finale.